我试图让一个模块在ISE 12.4中通过语法检查,它给了我一个我不明白的错误.首先是一个代码片段:
parameter ROWBITS = 4;
reg [ROWBITS-1:0] temp;
genvar c;
generate
always @(posedge sysclk) begin
for (c = 0; c < ROWBITS; c = c + 1) begin: test
temp[c] <= 1'b0;
end
end
endgenerate
Run Code Online (Sandbox Code Playgroud)
当我尝试语法检查时,我收到以下错误消息:
错误:HDLCompiler:731 - "test.v"第46行:不允许对非寄存器<c>进行程序分配.
我真的不明白为什么抱怨."c"不是电线,它是一种genvar.这应该等同于完全合法的语法:
reg [3:0] temp;
always @(posedge sysclk) begin
temp[0] <= 1'b0;
temp[1] <= 1'b0;
temp[2] <= 1'b0;
temp[3] <= 1'b0;
end
Run Code Online (Sandbox Code Playgroud)
请不要评论如何在没有生成的情况下更容易地编写它.这是一个更复杂的代码片段的简化示例,涉及对"temp"的多个ifs和非阻塞赋值.另外,不要只告诉我有更新版本的ISE,我已经知道了.OTOH,如果您知道它已在ISE的更高版本中修复,请告诉我您知道哪个版本有效.
verilog ×1