我试图让一个模块通过ISE 12.4中的语法检查,它给了我一个我不明白的错误。首先代码片段:Verilog generate/genvar总是阻止
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" Line 46: Procedural assignment to a non-register <c> is not permitted.
我真的不明白为什么它的抱怨。 “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的更高版本中被修复,请告诉我你知道哪个版本的作品。
感谢您的快速反应。我担心它会是这样的。部分问题是我想用for循环生成一系列if语句或case选择符,这不能在单独的always块中完成。 – user1684538
有没有什么办法可以在一个always块中生成所有的代码,或者genvar是不是可以做到这一点? – user2569332