ゲート遅延
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 68/90。
前回のレッスンでは、文を実行する前に待機する #10 a = b; のような一般的な遅延(general delay)について学びました。
このレッスンでは、and、or、not などの組み込みゲートプリミティブに特有のゲート遅延について説明します。ゲート遅延は、入力が変化した後にハードウェアゲートが出力を生成するまでに要する時間をモデル化します。
実際のハードウェアでは、gate は即座には反応しません — わずかな delay が存在します。組み込みの gate プリミティブを使用する場合、delay を追加して gate の伝播時間をシミュレートできます。output は指定された delay が経過した後にのみ変化します。
一般デレイ(General Delay)とゲートデレイ(Gate Delay)の違い
| 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時間単位(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 はシミュレーション専用 |
チャレンジ
この module に不足している gate delay を追加してください。各 gate に異なる delay を使用してください。
作業内容:
- AND
gate: 5timeunitのdelay - OR
gate: 3timeunitのdelay - NOT
gate: 2timeunitのdelay
自分で試してみよう
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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。