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