ハードウェア記述言語と検証
Verilogのノンブロッキング代入(<=)の動作として正しいものはどれか。
- A代入した瞬間に左辺が更新され、次の行ではその新しい値が使われる
- B同じタイミングのすべての右辺を先に評価し、その後でまとめて左辺を更新する
- C代入の結果を捨てて、何も変更しない
答えと解説を見る
正解:B. 同じタイミングのすべての右辺を先に評価し、その後でまとめて左辺を更新する
ノンブロッキング代入では、クロックのエッジで、すべての<=の右辺をまず古い値のまま評価し、そのあとで一斉に左辺を書き換えます。これは、同じクロックで動く多数のフリップフロップが、エッジの直前の値を同時に取り込む実際の回路と同じ動きです。そのため、クロックで動く順序回路の記述にはノンブロッキング代入を使うのが原則です。
- A. それはブロッキング代入(=)の動作です。
- B. 正しい。フリップフロップが一斉に値を取り込む動作と一致します。
- C. 値は更新されます。