Assignment Delays
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 69/90。
これまでのレッスンでは、General delays(#10 a = b;)とゲート遅延(and #5 (out, a, b);)について学びました。今回は、代入文の一部として手続きブロック(initialやalwaysなど)の内部で発生する遅延であるassignment delaysについて学びます。
assignment delay は指定された時間待機してから、assignment を実行します。遅延は after # 記号の前に配置します。
構文:
variable = #delay expression;General delay #10 a = b;(delay then assign)とは異なり、assignment delay a = #10 b;はその時点でのbの値を取得し、10 time units待ってから、それをaにassignします。
Assignment Delay vs General Delay
| General Delay | Assignment Delay | |
|---|---|---|
| 構文 | #10 a = b; | a = #10 b; |
| 値はいつ読み取られるか? | assignment の時点(after delay) | 直ちに(遅延の前) |
| どの値が代入されるか? | その時点での b の値 | time 0(または読み取り時点)での b の値 |
| 値はいつ代入されるか? | After delay | After delay |
例:違い
initial begin
b = 1;
#5 b = 0;
// 一般的な遅延
#10 a1 = b; // 10待機してから b を読み取る (b=0) → a1=0
// 代入遅延
a2 = #10 b; // 今 b を読み取り (b=0)、10待機してから代入 → a2=0
endどちらもここでは同じ result を返します。違いは、delay の during に b が changes したときに現れます。
主な違いの例
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // 時刻0でb=1を読み取り、時刻10でa1=1を代入する
end
initial begin
#5 b = 0; // 時刻5でbを0に変更する(遅延中)
end- 時刻 0:
a1はb = 1を読み取る - 時刻 5:
bは0に変わる(a1はまだ待機中) - 時刻 10:
a1には1(時刻 0 で読み取られた値)が代入され、0ではない
別のブロックで一般的な遅延 #10 a2 = b; を使用すると、b は時刻 10 に読み取られる(値は 0)。
重要なルール
| ルール | 説明 |
|---|---|
= は # の前に置く | a = #10 b; であり、a #10 = b; ではない |
| 値は直ちに読み取られる | 右辺はすぐに評価される |
| Assignment は delay の後に行われる | 左辺は後で値を取得する |
| 手続き型ブロックにのみ使用 | initial または always で使用される |
チャレンジ
行うこと:
不足している assignment delay を Add して、a が b の値を after 15 time units 後に gets するようにします。ただし、b はすぐに reads します。
自分で試してみよう
module assignment_challenge;
reg a, b;
// 遅延中に b を変更するための別ブロック
initial begin
b = 1;
// TODO: 代入遅延を追加
// a は 15 タイムユニット後に b を取得すべき
// 今 b を読み取り、遅延後に代入
end
initial begin
#5 b = 0; // 遅延中に b を変更する
#20 $display("Time %0t: a = %b", $time, a);
$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オンラインコンパイラ