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; // ブロッキング代入
endAlwaysブロックでのBlocking(組み合わせ論理)
always @(*) begin
temp = a & b; // ステップ 1
out = temp | c; // ステップ 2(ステップ 1 の temp を使用)
end順序が重要です。これは組み合わせ論理では問題ありません。
Blocking と Non-Blocking
Blocking (=) | Non-blocking (<=) | |
|---|---|---|
| 実行 | 1つずつ順番に | すべて同時に |
| 次の行は待機する? | はい | いいえ |
| Uses | 組み合わせ論理 | 順序論理(フリップフロップ) |
重要:フリップフロップには Blocking を使用しないでください
チャレンジ
一時変数を使用して、x と y の値を入れ替えるために、不足しているブロッキング代入を追加してください。
行うこと:
xの値をtempにAssignする(x を temp に save)yの値をxにAssignする(y を x into move)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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
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 Design5Operators 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オンラインコンパイラ