ハードウェア記述言語と検証

組み合わせ回路のつもりで上のように書くと、論理合成で何ができるか。

always @(*) begin
    if (en)
        y = d;
end
  1. Aenが0のときyは自動で0になる組み合わせ回路
  2. Bクロックで動くDフリップフロップ
  3. Cenが0のときyの値を保つ必要があるので、意図しないラッチができる
答えと解説を見る

正解:C. enが0のときyの値を保つ必要があるので、意図しないラッチができる

enが0のときにyへの代入がないので、yは前の値を覚えておかなければなりません。組み合わせ回路には記憶の働きがないので、論理合成は値を保つためのラッチを作ります。ラッチはタイミングの解析を難しくし、雑音で誤動作する原因にもなるので、意図しない場合は避けます。「else y = 0;」のように、すべての場合に値を代入すれば組み合わせ回路になります。

  • A. 0にする記述がないので、0にはなりません。
  • B. クロックを使っていないので、フリップフロップにはなりません。
  • C. 正しい。elseがないことが原因です。
この分野を解く 分野ページへ

ハードウェア記述言語と検証のほかの問題

  1. 上の記述でラッチができてしまう理由と、対策の組み合わせとして正しいものはどれか。
  2. 組み合わせ回路のalwaysブロックで、意図しないラッチを防ぐためによく使われる書き方はどれか。
  3. 次のVerilogの記述のうち、論理合成で回路にならず無視されるもの(シミュレーション用の記述)はどれか。
  4. 上のように8ビットのdの中の1の数を数える記述を論理合成すると、どのような回路になるか。
  5. 上の記述のリセットの種類と動作として正しいものはどれか。