我有一个在Verilog中运行良好的for循环。它看起来像这样:
for(j=0; j<=5; j=j+1)begin
...
end
但是只要我将5改为变量:
for(j=0; j<=m; j=j+1)begin
...
end
我收到此错误:
Error (10119):alu.v(95)中的Verilog HDL循环语句错误:具有非常量循环条件的循环必须在250次迭代中终止
我有一个初始化的注册表:
reg [3:0] m = 5;
我需要使用变量的原因是我有另一个变量,我希望这个循环计数到。我得到了同样的错误所以我使用了这个测试值'm'应该总是等于5.我不知道为什么会发生这种情况。我认为循环会在5之后结束,但由于某种原因它不会。请帮忙!
答案 0 :(得分:2)
Verilog HDL不是编程语言,例如C或Python,但硬件描述语言(HDL)。因此,综合工具将for
循环展开到固定的硬件电路,为此需要知道循环中的(最大)迭代次数。
在你的情况下,当结束条件基于m
作为寄存器时,合成工具(Altera Quartus II / Prime)似乎无法解决这个问题,所以你必须将它重写为每个循环具有恒定的结束条件,允许综合工具将其展开到固定的硬件电路。