我試圖讓一個模塊通過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