What Are Delays
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 67/90。
Verilogでは、遅延によって文が実行されるタイミングや信号が変化するタイミングを制御します。遅延は、実際のハードウェアのタイミング動作をモデル化するために使用されます。
遅延が必要な理由
実際のハードウェアでは、信号が配線やゲートを通過するのに時間がかかります。遅延によって、このタイミングの動作をシミュレートできます。
- シミュレーションでは、遅延がない場合、すべてが時刻 0 に発生します
- 遅延を使うと、イベントを時間の経過に沿って間隔を空けて配置できます
- 遅延は、クロックやステートマシンのようなタイミングに敏感な設計のテストに役立ちます
遅延の種類
| 遅延の種類 | 目的 |
|---|---|
| ゲート遅延 | 論理ゲートを通過する際の遅延 |
| 代入遅延 | 値を代入する際の遅延 |
| Timescale ディレクティブ | シミュレーションの時間単位を設定 |
基本構文
遅延は、# の後に数値を付けて記述します。
#10 clk = ~clk; // 10タイムユニット待ってから、クロックをトグルする
#5 a = b; // 5タイムユニット待ってから、a = b を代入する# の後の数字は、待機する time units の数です。
簡単な例
initial begin
a = 0;
#10 a = 1; // 10時間単位後、aは1になります
#5 a = 0; // さらに5時間単位後、aは0になります
endタイミング:
- Time 0:
a = 0 - Time 10:
a = 1 - Time 15:
a = 0
Always ブロックでの遅延
always #5 clk = ~clk; // 5タイムユニットごとにクロックをトグルするこれにより、連続的な clock 信号が生成されます(clk が initial ブロックで 0 に first 初期化されている場合)。そうでなければ、~x は x のままになります。
重要なルール
| ルール | 説明 |
|---|---|
# 記号 | delay を示します |
# の後の数値 | 待機する time units の数 |
| 遅延は累積されます | #10 の後に #20 を指定すると、合計 30 待機します |
| 合成不可 | 遅延はシミュレーション専用です |
チャレンジ
行うこと:
このコードが時刻 0、10、25、40 にメッセージを出力するように、不足している遅延を Add してください。
自分で試してみよう
module delay_challenge;
initial begin
$display("Time %0t: Start", $time);
// TODO: 時間 10 に到達するための遅延を追加
$display("Time %0t: After first delay", $time);
// TODO: 時間 25 に到達するための遅延を追加
$display("Time %0t: After second delay", $time);
// TODO: 時間 40 に到達するための遅延を追加
$display("Time %0t: End", $time);
$finish;
end
endmodule
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ