Menu
Coddy logo textTech

ゲート遅延

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

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

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

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

一般デレイ(General Delay)とゲートデレイ(Gate Delay)の違い

 General DelayGate 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時間単位(5 time unit)かかります。

複数入力を持つ Gate Delay

nand #8 (out, a, b, c, d);   // 8時間単位の遅延を持つ4入力NAND

重要なルール

ルール説明
Delay は gate 名の後に配置するand #5 (out, a, b)
Time unit 単位での Delay 値timescale ディレクティブに基づく
すべての input が output に影響するいずれの input の変更も delay を発生させる
合成不可(Not synthesizable)Gate delay はシミュレーション専用
challenge icon

チャレンジ

この module に不足している gate delay を追加してください。各 gate に異なる delay を使用してください。

作業内容:

  1. AND gate: 5 time unitdelay
  2. OR gate: 3 time unitdelay
  3. NOT gate: 2 time unitdelay

自分で試してみよう

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

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

基礎のすべてのレッスン