小编use*_*538的帖子

Verilog在一个始终块中生成/ genvar

我试图让一个模块在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

16
推荐指数
2
解决办法
10万
查看次数

标签 统计

verilog ×1