当我使用变量作为结束条件时,for循环进入无限循环

时间:2016-05-09 06:31:54

标签: loops for-loop verilog quartus

我有一个在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之后结束,但由于某种原因它不会。请帮忙!

1 个答案:

答案 0 :(得分:2)

Verilog HDL不是编程语言,例如C或Python,但硬件描述语言(HDL)。因此,综合工具将for循环展开到固定的硬件电路,为此需要知道循环中的(最大)迭代次数。

在你的情况下,当结束条件基于m作为寄存器时,合成工具(Altera Quartus II / Prime)似乎无法解决这个问题,所以你必须将它重写为每个循环具有恒定的结束条件,允许综合工具将其展开到固定的硬件电路。