Menu
Coddy logo textTech

ゲート遅延

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 68/90。

前回のレッスンでは、#10 a = b; のように使用される一般的な遅延について学習しました。これらは文を実行する前に待機します。

このレッスンでは、andornotなどの組み込みゲートプリミティブに特有のゲート遅延について説明します。ゲート遅延は、入力が変化してからハードウェアゲートが出力を生成するまでにかかる時間をモデル化したものです。

実際のハードウェアでは、ゲートは即座に反応しません。わずかな遅延が存在します。組み込みのゲートプリミティブを使用する場合、ゲートの伝搬時間をシミュレートするために遅延を追加できます。出力は、指定された遅延の後にのみ変化します。

一般的な遅延とゲート遅延の違い

 一般的な遅延 (General Delay)ゲート遅延 (Gate Delay)
構文#10 a = b;and #5 (out, a, b);
位置ステートメントの前の #ゲートプリミティブ内の #
目的実行前に待機するゲートの伝搬時間をモデル化する

構文:

gate_type #(delay) (output, input1, input2, ...);

#(delay) は、ゲートが応答するのにかかる時間単位を指定します。

簡単な例

and #5 (out, a, b);

このANDゲートは、aまたはbが変化してから出力が変化するまでに5時間単位かかります。

複数入力のゲート遅延

nand #8 (out, a, b, c, d);   // 8タイムユニットの遅延を持つ4入力NAND

重要なルール

ルール説明
遅延はゲート名の後に記述しますand #5 (out, a, b)
遅延値は時間単位に基づきますtimescale ディレクティブに基づきます
すべての入力が出力に影響しますいずれかの入力が変化すると遅延が発生します
合成不可ゲート遅延はシミュレーション専用です
challenge icon

チャレンジ

このモジュールに不足しているゲート遅延を追加してください。ゲートごとに異なる遅延を使用してください。

やるべきこと:

  1. ANDゲート: 5時間単位の遅延
  2. ORゲート: 3時間単位の遅延
  3. NOTゲート: 2時間単位の遅延

チートシート

ゲート遅延は、組み込みゲートプリミティブにおける伝搬時間をモデル化します。

構文:

gate_type #(delay) (output, input1, input2, ...);

例:

and  #5 (out, a, b);         // ANDゲート、5時間単位の遅延
or   #3 (out, a, b);         // ORゲート、3時間単位の遅延
not  #2 (out, a);            // NOTゲート、2時間単位の遅延
nand #8 (out, a, b, c, d);   // 4入力NAND、8時間単位の遅延

主なポイント:

  • # はゲート名の後、ポートリストの前に記述します
  • 入力の変化は、出力が更新される前に遅延をトリガーします
  • ゲート遅延はシミュレーション専用であり、論理合成は不可能です

自分で試してみよう

module gate_delay_challenge;
  reg a, b;
  wire and_out, or_out, not_out;
  
  // TODO: 5時間単位の遅延を持つANDゲートを追加(入力 a, b)
  
  // TODO: 3時間単位の遅延を持つORゲートを追加(入力 a, b)
  
  // TODO: 2時間単位の遅延を持つNOTゲートを追加(入力 a)
  

  initial begin
    $monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b", 
              $time, a, b, and_out, or_out, not_out);
    
    a = 1; b = 1;
    #10 $finish;
  end
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン