我正在尝试让一个模块通过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
当我尝试进行语法检查时,出现以下错误消息:
ERROR:HDLCompiler:731 - "test.v" 第46行:不允许对非寄存器 <c> 进行过程赋值。
我真的不明白为什么会出现这种情况。"c" 不是一个 wire,而是一个 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
请不要评论说不使用generate会更容易编写,这只是一个更复杂的代码片段的缩小示例,涉及多个if语句和对“temp”进行非阻塞赋值。此外,请不要仅告诉我有更新版本的ISE,我已经知道了。另一方面,如果你知道它在后续版本的ISE中已经修复,请告诉我你知道哪个版本可以正常工作。