我试图让一个模块通过 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
当我尝试语法检查时,我收到以下错误消息:
错误: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
请不要评论如果没有生成会更容易编写它。这是一段更复杂的代码的简化示例,其中涉及多个 if 和对“temp”的非阻塞分配。另外,不要只告诉我有更新版本的 ISE,我已经知道了。OTOH,如果您知道它已在更高版本的 ISE 中修复,请告诉我您知道哪个版本有效。