2012-02-14 9 views
0

私はModelSimの上のDフリップフロップのためのVHDLコードを書いていると私はそれをシミュレートしようとすると、私はエラーを取得:デバッグ反復リミットエラー

Error: (vsim-3601) Iteration limit reached at time 400 ps.

私はわからないんだけどそれは意味しますが、私は多くのソースコードを見て、エラーがないことを確認しました。誰でも問題の原因を推測できますか?

+2

コードを投稿するとうまくいくでしょう。 – ForceMagic

答えて

2

反復制限に達すると、システムが安定していないことを意味します。あなたはループが表示されるまで、あなたのコードと、単一のステップにブレークポイントを追加する必要が

a <= b;

--- and then later...

b <= a;

+0

あなたの単純化された例題が問題を引き起こすには単純すぎると思います。さらにa '= someFuntionOf(b、c、d、e)のようになります。 b <= someOtherFunctionOf(a、f、g、h) '......しかし、はい、OPのコードにフィードバックループがあるように聞こえます。 –

0

:ほとんどの場合、それはのようなものです。 もう一つの手法は、おそらく生産性が高いことですが、反復と機密性リストを詳しく見て、良いコードレビューです。

0

前述のように、信号が安定していないという問題があります。可能性のある問題は、2つの組み合わせ論理信号が互いに置き換えられ続けることですが、私が後世のために強調したいことがいくつかあります。

ザイリンクスAnswer Record #19068に記載されているように、それは感度リストの信号を変更するプロセスによっても引き起こされる可能性があります。

ここで私の問題を最終的に解決する別のチェックは、シミュレーションの解像度が十分に小さいことを確認することでした。私の規模は大きすぎて、テストベンチの時計は1回のシミュレーションで何度も実行されていました。

2

このエラーは、通常、ModelSimが無限ループで停止していることを示します。 VHDLでは、これは、信号が感度リストに置かれ、この信号がプロセスで変更されたときに発生します。信号が変化し、プロセスがトリガされ、信号が変更され、再びプロセスがトリガされ、サイクルが継続されます。

次は、無限ループの原因となるプロセスの簡単な例である:ほとんどの人はVHDLや他のHDL言語を持っている

PROCESS (count) 

BEGIN 

count <= not count; 

END PROCESS; 
1

一つの問題は、彼らが、これはシーケンシャルではないことを理解していないということですコード。あなたがプロセス内に持つすべてのことが並行して起こります。 アーメドからの例では、良いものです:

PROCESS (count) 

BEGIN 

count <= not count; 

END PROCESS; 

HDLシミュレータは、各シミュレーションティックの後に「カウントしない」にcountの値を設定しようと、その変更はの価値以来、他のダニがトリガされますカウントが変更され、クラッシュするか上記の問題が発生するまで継続します。

HDLが正常に動作するためには、実際の値の遅延を使用するために、クロック形式または合成用でない場合は遅延を使用する必要があります。

PROCESS (count) 
BEGIN 
    count <= not count after 1 ns; 
END PROCESS; 

に上記のコードを変更することによりシミュレーションが動作し、カウントは、すべて1ナノ秒を切り替えます。