ハードウェア記述言語と検証
上の記述で、クロックの立ち上がりの直前にa=0、b=1だった。立ち上がりの後のaとbの値はどうなるか。
always @(posedge clk) begin
a <= b;
b <= a;
end
- Aa=1、b=0(入れ替わる)
- Ba=1、b=1
- Ca=0、b=0
答えと解説を見る
正解:A. a=1、b=0(入れ替わる)
ノンブロッキング代入では、2つの右辺(bの古い値1とaの古い値0)を先に評価してから、aに1、bに0を同時に書き込むので、値が入れ替わります。回路としては、2つのフリップフロップの出力を互いの入力につないだ形です。ブロッキング代入(=)で書くと、1行目でaが1になり、2行目のbには新しいaの1が入って、両方とも1になってしまいます。
- A. 正しい。右辺はどちらも古い値で評価されます。
- B. これは「=」で書いた場合の結果です。
- C. 値が失われることはありません。