Question:

在sysemverilog 中,有的工具编译在generate中使用genvar的位截取功能(part-select) 出错: illegal select base error.

如下面代码:

1
2
3
4
5
6
7
generate 
genvar i;
for(i=0; i<16; i=i+1) begin: gen
wire [2:0] val = i[3:1];

end
endgenerate

上面对 genvar类型的变量i进行part-select操作某些工具出错

Answer:

解决方法如下:

1
2
3
4
5
6
7
8
9
generate 
genvar i;
for(i=0; i<16; i=i+1) begin: gen
localparam [3:0] tmp_i = i;

wire [2:0] val = tmp_i[3:1];

end
endgenerate

根据查资料是因为genvar的变量位宽不确定导致的,因此先将genvar 变量 i 给localparam,这样位宽是一个确定的,再进行part-select操作。