工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilogスケジューリングセマンティクスの理解:タイミング、イベント、実行順序

Verilogの設計とテストベンチには通常、alwaysまたはinitialブロック、連続代入、その他の手続き文など、多くのコード行が含まれ、これらはシミュレーションの過程で異なる時間にアクティブになります。

Verilogモデル内の信号値のすべての変化は更新イベントと見なされます。そして、これらの更新イベントにセンシティブなalwaysやassignブロックなどのプロセスは、任意の順序で評価され、これは評価イベントと呼ばれます。これらのイベントは異なる時間に発生する可能性があるため、シミュレーション時間で並べられたイベントキューにスケジューリングすることで、より適切に管理し、正しい実行順序を保証できます。

module tb;
  reg a, b, c;
  wire d;
  
  // 'always'は'a'または'b'が更新されると評価されるプロセス
  // 'a'または'b'の値が変化すると'更新イベント'と呼ばれる
  // 'always'ブロックが'a'または'b'の変化でトリガーされると
  // '評価イベント'と呼ばれる
  always @ (a or b) begin
    c = a & b;
  end
  
  // ここでは'assign'は'a'または'b'または'c'が更新されると
  // 評価されるプロセス
  assign d = a | b ^ c;
endmodule

イベントキュー

シミュレーションステップは4つの異なる領域に分割できます。アクティブイベントキューは、現在の時間で実行する必要があるプロセスのセットであり、これがアクティブまたは他のイベントキューにさらに多くのプロセスをスケジューリングする結果となります。イベントはどの領域にも追加できますが、常にアクティブ領域から削除されます。

現在のタイムステップのアクティブキュー内のすべてのイベントが実行されると、シミュレータは時間を次のタイムステップに進め、そのアクティブキューを実行します。

module tb;
  reg x, y, z;
  initial begin
    #1 x = 1; y = 1;
    #1 z = 0;
  end
endmodule

シミュレーションは時間0で開始し、最初の文はシミュレーション時間が1時間単位に達したときに実行されるようスケジューリングされ、ここでxとyに1が代入されます。これは現在の時間(1時間単位)のアクティブキューです。シミュレータはさらに1時間単位後の次の文をスケジューリングし、ここでzに0が代入されます。

シミュレーションを非決定的にするものは?

シミュレーション中に競合状態が発生し、同じ設計とテストベンチで異なる出力が得られることがあります。非決定的な動作の理由の1つは、アクティブイベントがキューから削除され、任意の順序で処理されることです。

Verilog

  1. Verilogマスター:デジタル回路設計のための完全チュートリアル
  2. Verilog連結マスター:実践ガイド
  3. Verilog代入文の理解:種類、構文、ベストプラクティス
  4. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  5. Verilog関数のマスター:効率的なRTL設計のために
  6. Verilogタスクの理解:関数との違い、構文、使用法
  7. Verilogクロックジェネレータ:設計と実装ガイド
  8. Verilog数学関数のマスター:効率的なハードウェア設計のために
  9. Verilog $timeformatのマスター:精度と表示制御
  10. 任意のスコープでのVerilog timescale理解と表示
  11. VerilogファイルI/Oの完全ガイド:オープン、読み取り、書き込み、クローズ