ハードウェア記述言語と検証
組み合わせ回路のalwaysブロックで、意図しないラッチを防ぐためによく使われる書き方はどれか。
- A条件分岐をできるだけ多く書き、elseは省略する
- Bブロックの先頭で、出力のすべての信号にデフォルトの値を代入してから条件分岐を書く
- C出力の信号をすべてwireにして、alwaysの中で代入する
答えと解説を見る
正解:B. ブロックの先頭で、出力のすべての信号にデフォルトの値を代入してから条件分岐を書く
ブロックの先頭で「y = 0; valid = 0;」のように出力にデフォルトの値を入れておけば、後の条件分岐でどの経路を通っても、少なくともデフォルトの値が代入されているので、値を保つ必要がなくなりラッチはできません。条件の多い状態機械の出力の記述などで特に役に立ちます。SystemVerilogのalways_combを使うと、ラッチができたときにツールが警告を出してくれます。
- A. elseを省くとラッチの原因になります。
- B. 正しい。どの経路でも必ず値が決まります。
- C. wireはalwaysの中で代入できません。