Menu
Coddy logo textTech

Assignment Delays

CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 69/90。

これまでのレッスンでは、General delays#10 a = b;)とゲート遅延and #5 (out, a, b);)について学びました。今回は、代入文の一部として手続きブロック(initialalwaysなど)の内部で発生する遅延である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 DelayAssignment Delay
構文#10 a = b;a = #10 b;
値はいつ読み取られるか?assignment の時点(after delay)直ちに(遅延の前)
どの値が代入されるか?その時点での b の値time 0(または読み取り時点)での b の値
値はいつ代入されるか?After delayAfter 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: a1b = 1 を読み取る
  • 時刻 5: b0 に変わる(a1 はまだ待機中)
  • 時刻 10: a1 には 1(時刻 0 で読み取られた値)が代入され、0 ではない

別のブロックで一般的な遅延 #10 a2 = b; を使用すると、b は時刻 10 に読み取られる(値は 0)。

重要なルール

ルール説明
=# の前に置くa = #10 b; であり、a #10 = b; ではない
値は直ちに読み取られる右辺はすぐに評価される
Assignment は delay の後に行われる左辺は後で値を取得する
手続き型ブロックにのみ使用initial または always で使用される
challenge icon

チャレンジ

行うこと:

不足している assignment delay を Add して、ab の値を 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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ