Menu
Coddy logo textTech

Blocking Assignment

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

Verilogには、手続き型代入が2種類あります。blocking=)とnon-blocking<=)です。このレッスンでは、blocking assignmentに焦点を当てます。

Blocking assignment は = 演算子を使用します。現在の assignment が完了するまで次の文の実行をブロックするため、「ブロッキング」と呼ばれます。コードは順番に、step ごとに実行されます。

構文:

variable = expression;

Blocking Assignment を使用する場合

Blocking assignment(=)は組み合わせ論理に使用されます。これは、入力が変化すると出力が直ちに変化し、クロックメモリもない回路です。

組み合わせ論理の例:

  • AND / OR / XOR ゲート
  • 加算器と減算器
  • マルチプレクサ
  • デコーダ

Verilogの例:

always @(*) begin
  sum = a + b;      // ブロッキング代入
  carry = a & b;    // ブロッキング代入
end

AlwaysブロックでのBlocking(組み合わせ論理)

always @(*) begin
  temp = a & b;    // ステップ 1
  out = temp | c;  // ステップ 2(ステップ 1 の temp を使用)
end

順序が重要です。これは組み合わせ論理では問題ありません。

Blocking と Non-Blocking

 Blocking (=)Non-blocking (<=)
実行1つずつ順番にすべて同時に
次の行は待機する?はいいいえ
Uses組み合わせ論理順序論理(フリップフロップ)

重要:フリップフロップには Blocking を使用しないでください

challenge icon

チャレンジ

一時変数を使用して、xy の値を入れ替えるために、不足しているブロッキング代入を追加してください。

行うこと:

  1. x の値を temp にAssignする(x を temp に save)
  2. y の値を x にAssignする(y を x into move)
  3. temp の値を y にAssignする(saved x を y into move)

自分で試してみよう

module swap;
  reg x, y;
  reg temp;
  
  initial begin
    x = 1;
    y = 0;
    
    $display("Before swap: x=%d, y=%d", x, y);
    
    // TODO: ステップ1 - x を temp に代入する
    
    // TODO: ステップ2 - y を x に代入する
    
    // TODO: ステップ3 - temp を y に代入する
    
    $display("After swap: x=%d, y=%d", x, y);
    $finish;
  end
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン

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