题目如下要创建一个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];