ハードウェア記述言語と検証
組み合わせ回路のつもりで上のように書くと、論理合成で何ができるか。
always @(*) begin
if (en)
y = d;
end
- Aenが0のときyは自動で0になる組み合わせ回路
- Bクロックで動くDフリップフロップ
- Cenが0のときyの値を保つ必要があるので、意図しないラッチができる
答えと解説を見る
正解:C. enが0のときyの値を保つ必要があるので、意図しないラッチができる
enが0のときにyへの代入がないので、yは前の値を覚えておかなければなりません。組み合わせ回路には記憶の働きがないので、論理合成は値を保つためのラッチを作ります。ラッチはタイミングの解析を難しくし、雑音で誤動作する原因にもなるので、意図しない場合は避けます。「else y = 0;」のように、すべての場合に値を代入すれば組み合わせ回路になります。
- A. 0にする記述がないので、0にはなりません。
- B. クロックを使っていないので、フリップフロップにはなりません。
- C. 正しい。elseがないことが原因です。