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

Verilogで代入の種類を使い分けるときの一般的なガイドラインとして正しいものはどれか。

  1. Aどこでもブロッキング代入(=)だけを使う
  2. Bクロックで動く順序回路にはノンブロッキング代入(<=)、組み合わせ回路のalwaysにはブロッキング代入(=)を使う
  3. C1つのalwaysの中で、2つをでたらめに混ぜて使う
答えと解説を見る

正解:B. クロックで動く順序回路にはノンブロッキング代入(<=)、組み合わせ回路のalwaysにはブロッキング代入(=)を使う

順序回路をノンブロッキング代入で書くと、すべてのフリップフロップが同時に値を取り込む回路の動きと一致し、記述の順番や、ほかのalwaysブロックとの実行の順番に結果が左右されません。組み合わせ回路では、上から順に途中の値を計算していく書き方が自然なので、ブロッキング代入を使います。1つのalwaysブロックの中で両方を混ぜないことも大切です。

  • A. 順序回路でブロッキングを使うと、意図と違う回路になりがちです。
  • B. 正しい。シミュレーションと回路の動きを一致させやすくなります。
  • C. 混ぜると動作が分かりにくく、誤りのもとになります。
この分野を解く 分野ページへ

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

  1. Verilogで「always @(*)」と書く意味として正しいものはどれか。
  2. 組み合わせ回路のつもりで上のように書いた。起こりうる問題として正しいものはどれか。
  3. 組み合わせ回路のつもりで上のように書くと、論理合成で何ができるか。
  4. 上の記述でラッチができてしまう理由と、対策の組み合わせとして正しいものはどれか。
  5. 組み合わせ回路のalwaysブロックで、意図しないラッチを防ぐためによく使われる書き方はどれか。