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

上の記述で、selがX(不定)のとき、Verilogのシミュレーションではyにbが選ばれる。この性質が検証で問題になる理由として正しいものはどれか。

always @(*)
    if (sel) y = a;
    else     y = b;
  1. Ayが必ずXになり、シミュレーションが止まるから
  2. BselがXのときは、実際のチップでも必ずbが選ばれるから
  3. CXが「偽」として扱われてbという確定した値が出るので、selが不定という誤りがシミュレーションで見えなくなる
答えと解説を見る

正解:C. Xが「偽」として扱われてbという確定した値が出るので、selが不定という誤りがシミュレーションで見えなくなる

Verilogのif文は、条件がXのときに偽として扱い、else側を実行します。そのためyにはbという確定した値が出て、selが不定だという誤りがシミュレーションで隠れてしまいます。実際の回路ではselは0か1のどちらかで、aが選ばれることもあります。これをX楽観主義と呼び、Xを伝えるような書き方をする、Xを検出するアサーションを入れる、などで対策します。

  • A. yはXにならず、bになってしまいます。
  • B. 実際のチップではaとbのどちらになるか分かりません。
  • C. 正しい。X楽観主義(Xオプティミズム)と呼ばれる問題です。
この分野を解く 分野ページへ

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

  1. HDLでZ(ハイインピーダンス)を出力するトライステートの記述について、一般的に正しいものはどれか。
  2. HDLの検証で使うテストベンチの説明として正しいものはどれか。
  3. テストベンチの上の記述で作られるクロックの周期はいくらか(時間の単位は1 nsとする)。
  4. テストベンチで、回路への入力をクロックの立ち上がりと同じ時刻にブロッキング代入で変えると、問題が起きることがある。主な理由と対策の組み合わせとして正しいものはどれか。
  5. 自己チェック型のテストベンチの特徴として正しいものはどれか。