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

上の記述のように、フリップフロップを通らずに組み合わせ回路の出力が自分の入力に戻ってくる形を何と呼び、なぜ避けるべきか。

assign a = b & c;
assign b = a | d;
  1. A組み合わせループと呼び、発振したり値が定まらなかったりして、タイミングの解析もできなくなるから
  2. Bパイプラインと呼び、回路が速くなりすぎるから
  3. Cシフトレジスタと呼び、データが失われるから
答えと解説を見る

正解:A. 組み合わせループと呼び、発振したり値が定まらなかったりして、タイミングの解析もできなくなるから

aがbを、bがaを決める形では、フリップフロップがないため、値がゲートの遅延のたびに回り続けて発振したり、どの値に落ち着くかが遅延の差で決まったりします。ラッチのような記憶の働きが意図せずできることもあります。静的タイミング解析は経路が輪になっていると扱えません。帰還が必要なときは、途中に必ずフリップフロップを入れて、クロックごとに値を更新する形にします。

  • A. 正しい。多くのツールがエラーや警告を出します。
  • B. パイプラインはフリップフロップで区切った構造です。
  • C. シフトレジスタはフリップフロップでできています。
この分野を解く 分野ページへ

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

  1. 上の記述をFPGA向けに論理合成すると、一般にどう扱われるか。
  2. 組み合わせ回路で、if・else ifを長くつないだ記述と、条件が互いに重ならないcase文の記述を比べたときの説明として正しいものはどれか。
  3. Verilogの等号の演算子「==」と「===」の違いとして正しいものはどれか。
  4. VerilogなどのHDLで書いた記述と、C言語などのソフトウェアのプログラムとの大きな違いとして正しいものはどれか。
  5. Verilogでmoduleを使う目的として正しいものはどれか。