当前位置: 代码迷 >> 综合 >> HDLBits Mux256to1v
  详细解决方案

HDLBits Mux256to1v

热度:91   发布时间:2023-11-27 09:50:05.0

题目如下要创建一个256选1的多路选择器

Create a 4-bit wide, 256-to-1 multiplexer. The 256 4-bit inputs are
all packed into a single 1024-bit input vector. sel=0 should select
bits in[3:0], sel=1 selects bits in[7:4], sel=2 selects bits in[11:8],
etc.

module top_module( input [1023:0] in,input [7:0] sel,output [3:0] out );

思路
一开始是很容易想到要如下操作的

assign out = in[sel*4+3:sel*4];

结果居然报错

Error (10734): Verilog HDL error at top_module.v(6): sel is not a constant 

显然出现了语法问题,一通查找发现是上界不可以为变量,那就干脆不要上界。。

题解如下

1.方法一:用拼接符号

module top_module( input [1023:0] in,input [7:0] sel,output [3:0] out );assign out = {
    in[sel*4+3],in[sel*4+2],in[sel*4+1],in[sel*4+0]};
endmodule

2.方法二:使用+:/-:
当然也可以采用其他思路,使用如下格式来避免上界是变量
也就是使用 +: -:

//------------------"+:"--------------
data[begin +: width]
data[(begin + width -1): begin]//这里是上式的等价表达式
//------------------"-:"--------------
data[end   -: width]
data[end :(end-width+1)]       //这里是上式的等价表达式

所以我们可以按照下面两种方式写,都是没有问题的

assign out = in[sel*4 +: 4];
assign out = in[sel*4+3 -: 4];
  相关解决方案