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

Verilogインターバル遅延とイントラ代入遅延の理解

Verilog遅延文では、代入演算子の左辺または右辺のいずれかに遅延を指定できます。

インターバル遅延(Inter-assignment Delays)

// 遅延は左辺に指定
#<delay> <LHS> = <RHS>

インターバル遅延文では、代入演算子のLHSに遅延値があります。これは、遅延が期限切れになった後に文自体が実行されることを示し、最も一般的に使用される遅延制御の形式です。

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    
    // 時間0で全信号を0に初期化
    a <= 0; b <= 0; c <= 0; q <= 0;
    
    // インターバル遅延: #5時間単位待機
    // その後aとcに1を代入。'a'と'c'は
    // 現在のタイムステップの末尾で更新される
    #5 a <= 1; c <= 1;
    
    // インターバル遅延: #5時間単位待機
    // その後qにRHSの評価値を代入
    #5 q <= a & b | c;
    #20;
  end
endmodule

qが時間10単位で1になることに注意してください。文が10時間単位で評価され、RHSであるa、b、cの組み合わせが1と評価されるためです。

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

イントラ代入遅延(Intra-assignment Delays)

// 遅延は右辺に指定
<LHS> = #<delay> <RHS>

イントラ代入遅延は、代入演算子のRHSに遅延があるものです。これは、文が最初に評価され、RHSのすべての信号の値が取得されることを示します。その後、遅延が期限切れになった後に結果信号に代入されます。

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    
    // 時間0で全信号を0に初期化
    a <= 0; b <= 0; c <= 0; q <= 0;
    
    // インターバル遅延: #5時間単位待機
    // その後aとcに1を代入。'a'と'c'は
    // 現在のタイムステップの末尾で更新される
    #5 a <= 1; c <= 1;
    
    // イントラ代入遅延: まず文を実行
    // その後5時間単位待機して評価値をqに代入
    q <= #5 a & b | c;
    #20;
  end
endmodule

ログにqへの代入が出ていないことに注意!

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

これは、5時間単位でaとcがノンブロッキング文で代入されるためです。ノンブロッキング文の動作では、RHSが評価されますが、そのタイムステップの末尾で初めて変数に代入されます。

したがって、aとcの値は1と評価されますが、まだ代入されていない状態で、次のノンブロッキング文であるqの文が実行されます。そのため、qのRHSが評価されるとき、aとcはまだ古い値の0を持っており、$monitorは変化を検出せず文を表示しません。

変化を観察するために、aとcへの代入文をノンブロッキングからブロッキングに変更してみましょう。

...
// ノンブロッキングをブロッキングに変更、その他の
// コードは同じ
#5 a = 1; c = 1;
q <= #5 a & b | c;
...
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Verilog基礎:最初のANDゲートを設計する
  2. Verilogマスター:デジタル回路設計のための完全チュートリアル
  3. Verilog構文マスター:重要ルールとベストプラクティス
  4. Verilog連結マスター:実践ガイド
  5. Verilog代入文の理解:種類、構文、ベストプラクティス
  6. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  7. Verilog関数のマスター:効率的なRTL設計のために
  8. Verilogタスクの理解:関数との違い、構文、使用法
  9. Verilog遅延制御の理解:タイミング技術とベストプラクティス
  10. Verilogゲート遅延の理解:信頼性の高いデジタル設計のための正確なタイミング
  11. Verilogクロックジェネレータ:設計と実装ガイド