代码如下
genvar i;
generate
for(i = 10; i >= 0; i--) begin:genloop
if(i == 10) begin:if_space
<declearation1>
else begin:if_space
<declearation2>
end
end
endgenerate
当访问genloop.if_space.<declearation1>
时,vivado仿真器报错
ERROR: [VRFC 10-2991] 'if_space' is not declared under prefix 'genloop' [...]
同样代码在Questasim/Modelsim中通过且行为正确。
以上设计代码在参数化设计中有使用,例如:
注意下面例子中不能使用genloop[i].param1
,因为verilog中if语句会创建新的命名空间,这样使用会报错找不到param1;lacalparam换成parameter也是不行的。当参数必须使用判断生成时,以上错误不可避免,只能重新设计,例如不创建参数,而在设计中直接使用constant function。
genvar i;
generate
for(i = 10; i >= 0; i--) begin:genloop
if(i == 10) begin:if_space
localparam param1 = constant_function();
else begin:if_space
localparam param1 = constant_function();
end
end
endgenerate
//example
generate
for(i = 10; i >= 0; i--)begin:gen_design
if(genloop[i].if_space.param1) //could not use 'genloop[i].param1'
/* statements*/
else
/* statements*/
end
endgenerate