2016-05-09 32 views
0

Verilogで正常に動作するforループがあります。終了条件として変数を使用するとForループが無限ループに入ります

for(j=0; j<=5; j=j+1)begin 
    ... 
end 

しかし、すぐに私は変数に5を変更するよう:

for(j=0; j<=m; j=j+1)begin 
    ... 
end 

私はこのエラーを取得する:

Error (10119) : Verilog HDL Loop Statement error at alu.v(95): loop with non-constant loop condition must terminate within 250 iterations

私が初期化REGとしてメートルを持っていることは、このようになりますそのように:

reg [3:0] m = 5; 

私が必要な理由私はこのループを数えたい別の変数を持っています。私は同じエラーが発生していたので、このテスト値 'm'を使用しました。これは常に5になるはずです。なぜこれが起こっているのか分かりません。私はループが5後に終了すると思うが、何らかの理由でそれはしない。助けてください!

+0

合成または非合成のものを実装していますか? –

+0

アルテラのQuartus II/Primeによって「[Error(10119)](https://www.altera.com/support/support-resources/knowledge-base/solutions/rd04232012_554.html)」が生成されるため、合成です。 。 –

答えて

2

Verilog HDLはプログラミング言語ではありません。 CまたはPythonではなく、ハードウェア記述言語(HDL)です。したがって、合成ツールはループをforの固定ハードウェア回路に展開します。このため、ループ内の(最大)反復回数を知る必要があります。

あなたは、各ループにこれを書き換える必要がありますので、あなたのケースでは、Aは、終了条件は、レジスタとしてmに基づいてされたときに合成ツール(アルテラのQuartus II /首相が)、これを把握することはできませんように見えます合成ツールがこれを固定ハードウェア回路に展開することを可能にする。

関連する問題