Menu
CoddyTech

ゲート遅延

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

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

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

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

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

 一般的な遅延ゲート遅延
構文#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時間単位の遅延

自分で試してみよう

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腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ