ゲート遅延
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ディレクティブに基づく |
| すべての入力が出力に影響する | どの入力が変化しても出力が変わる可能性がありますが、遅延後にのみ変化します |
| 合成できない | ゲート遅延はシミュレーション専用です |
チャレンジ
このモジュールに不足しているゲート遅延を追加してください。各ゲートには異なる遅延を設定してください。
行うこと:
- ANDゲート: 5時間単位の遅延
- ORゲート: 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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ