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

組み合わせ回路のalwaysブロックで、意図しないラッチを防ぐためによく使われる書き方はどれか。

  1. A条件分岐をできるだけ多く書き、elseは省略する
  2. Bブロックの先頭で、出力のすべての信号にデフォルトの値を代入してから条件分岐を書く
  3. C出力の信号をすべてwireにして、alwaysの中で代入する
答えと解説を見る

正解:B. ブロックの先頭で、出力のすべての信号にデフォルトの値を代入してから条件分岐を書く

ブロックの先頭で「y = 0; valid = 0;」のように出力にデフォルトの値を入れておけば、後の条件分岐でどの経路を通っても、少なくともデフォルトの値が代入されているので、値を保つ必要がなくなりラッチはできません。条件の多い状態機械の出力の記述などで特に役に立ちます。SystemVerilogのalways_combを使うと、ラッチができたときにツールが警告を出してくれます。

  • A. elseを省くとラッチの原因になります。
  • B. 正しい。どの経路でも必ず値が決まります。
  • C. wireはalwaysの中で代入できません。
この分野を解く 分野ページへ

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

  1. 次のVerilogの記述のうち、論理合成で回路にならず無視されるもの(シミュレーション用の記述)はどれか。
  2. 上のように8ビットのdの中の1の数を数える記述を論理合成すると、どのような回路になるか。
  3. 上の記述のリセットの種類と動作として正しいものはどれか。
  4. 同期リセットと非同期リセットの違いとして正しいものはどれか。
  5. 非同期リセットを使う回路で、リセットの解除(0から1への変化)を2段のフリップフロップでクロックに同期させてから各回路に配る理由として正しいものはどれか。