多くの場合、各ゲートを単位伝搬遅延として単純にモデル化するのが適切なアプローチです。もう少し洗練された代替手段は、ほとんどのコンポーネントの「シミュレーションステップ」ルーチンで、シミュレーション時間が「フルステップ」進んだかどうかをチェックし、そうである場合にのみその出力を更新することです。いくつかのコンポーネントはそのチェックを省略できますが、代わりに、他のコンポーネントが更新される機会があった後、シミュレーション ステップでそれらを再度実行するように要求します。これにより、一部のコンポーネントは、ネストが深すぎない限り、伝搬遅延がゼロであるかのように振る舞うことができます (シミュレーションは、コンポーネントが実行されないと判断する前に、各コンポーネントの状態評価ルーチンの実行を試行する回数を制限する必要があります)。安定した状態に到達します)。
正確に何がシミュレートされているかに応じて、「高」と「低」以外に、コンポーネントに複数の出力状態を用意することをお勧めします。コンポーネントの入力がその出力に影響を与える可能性のある方法で変化した場合、出力は最小伝播時間後に「不確定」になり、最大伝播時間後に正当な値を想定するという動作で、「不確定」状態を追加することも役立ちます。入力が有効になった瞬間からの伝播時間。信号がより多くのレベルのロジックを通過するにつれて、信号が「不確定」である時間が増加することに注意してください。何かを有意義にシミュレートする唯一の方法は、安定していると想定されるクロックを用意し、クロック周期がそれらの間で完全に安定するのに十分な長さであることを確認することです。
この方法で物事をシミュレートすると、実際には機能する多くの回路でシミュレーションが「失敗」する (「不確定」な値が得られる) 一方で、そのようなシミュレーションが決定論的な結果をもたらすという事実は、構築された実際の回路が同じ方法でそうするでしょう。残念ながら、エッジ トリガー ラッチに依存する回路の場合、実際に動作する可能性が 100% の回路であっても、最も一般的なシミュレーション結果は「不確定」です。その問題を緩和するために、「不確定」な間隔を伸ばさないように、いくつかのゲートを「ジンクス」したいことがよくあります。これを行うことは「チート」のようなものであり、回路がシミュレーションでは機能する可能性がありますが、実際には失敗する可能性があります。とはいえ、このようなチートを丁寧に施せば、