Verilog上“ for”循环中的localparam错误

时间:2018-11-23 02:41:59

标签: verilog hdl

parameter N = 4, FOO = { N { 4'd1 } };
//And then in the generate loop
genvar i;
for( i = 0; i < N; i = i + 1 )
    begin : gen_loop
       localparam THIS_FOO = FOO[ i * 4 +: 4 ];
   end
wire [1:0] rr = THIS_FOO[1:0];
wire [1:0] rt = THIS_FOO[3:2];

我收到此错误,但不明白为什么?:

Line 344: <THIS_FOO> is not declared. 
Line 345: <THIS_FOO> is not declared.
Module <TCL_vec> ignored due to previous errors.
  

请告诉我我哪里错了?

1 个答案:

答案 0 :(得分:1)

您的localparambegin:gen_loop..end范围内声明。此外,您的generate for循环使用名称创建了该块的多个版本

gen_loop[0]
gen_loop[1]
...

所以您也有THIS_FOO的多个版本。访问它们的方法是使用交叉引用符号。

wire [1:0] rr = gen_loop[0].THIS_FOO[1:0];
wire [1:0] rt = gen_loop[1].THIS_FOO[3:2];
...

是的,您必须知道要访问循环的哪个迭代。

因此,在您的情况下,它抱怨是因为您没有在要访问它的范围内声明THIS_FOO。