Non Blocking Assignment
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 50/90。
前のレッスンでは、ステップごとに実行されるblocking assignment(=)について学びました。今回は、すべてを一度に並列で実行するnon-blocking assignment(<=)について学びます。
Non-blocking assignment は <= 演算子を使用します。次の文の実行をblock しないため、「non-blocking」と呼ばれます。ブロック内の All non-blocking assignment は同時に実行されます。
構文:
variable <= expression;Non-Blocking Assignment を使用するタイミング
Non-blocking assignment(<=)はsequential logicに使用します。これは、クロックを使用し、メモリを持つ回路です。出力はクロックエッジ(通常は立ち上がりエッジ)のときだけ変化します。
順序論理の例:
- フリップフロップ
- レジスタ
- カウンタ
- 状態機械
- シフトレジスタ
Verilogの例:
initial begin
a <= 5; // スケジュールされたが、まだ実行されていない
b <= a + 2; // スケジュールされた、a の古い値を使用
c <= b * 3; // スケジュールされた、b の古い値を使用
end3つの代入はすべて、old の値を使用して同時に行われます。時間ステップの終わりに、すべての更新が一緒に行われます。
Alwaysブロック内のNon-Blocking(順序論理)
Non-blockingは順序論理に使用されます。順序論理とは、クロックを使用し、メモリを持つ回路(フリップフロップ、レジスタ、カウンタ)のことです。
always @(posedge clk) begin
q <= d; // クロックエッジで q が d を取得する
count <= count + 1; // クロックエッジで count がインクリメントする
end両方の代入は、clock edge より前の values を使用して、同時に行われます。
まとめ
| ルール | 説明 |
|---|---|
逐次論理には <= を使用する | always @(posedge clk) |
組み合わせ論理には = を使用する | always @(*) |
| Non-blocking は並列に実行される | All の代入は一度に行われる |
| Values は time step の end に更新される | 即座ではない |
チャレンジ
Non-Blocking Assignmentを完成させる
この2ビットのシフトレジスタが動作するように、不足しているnon-blocking assignmentsをAddしてください。
仕組み:
- 各clock edgeで、
q1getsd q2getsq1のold value
行うこと:
dをq1にAssignする(non-blocking)q1をq2にAssignする(non-blocking)
自分で試してみよう
module shift_register (
input clk,
input reset,
input d,
output reg q1,
output reg q2
);
always @(posedge clk or posedge reset) begin
if (reset) begin
q1 <= 0;
q2 <= 0;
end else begin
// TODO: シフトロジックを追加
// ステップ1: d を q1 に代入(ノンブロッキング)
// ステップ2: q1 を q2 に代入(ノンブロッキング)
end
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オンラインコンパイラ