首页 > 解决方案 > Verilog上“for”循环内的localparam错误

问题描述

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.

请告诉我我错在哪里?

标签: veriloghdl

解决方案


您在范围内localparam声明。begin:gen_loop..end此外,您的生成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 。


推荐阅读