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

テストベンチで、回路への入力をクロックの立ち上がりと同じ時刻にブロッキング代入で変えると、問題が起きることがある。主な理由と対策の組み合わせとして正しいものはどれか。

  1. A回路が変わる前と後のどちらの値を取り込むかが実行の順番で変わる(競合)ため。入力はクロックのエッジから少しずらすか、ノンブロッキング代入で変える
  2. Bクロックの周波数が自動で下がるため。クロックを速くする
  3. Cブロッキング代入は、テストベンチでは使えないため。すべてassign文にする
答えと解説を見る

正解:A. 回路が変わる前と後のどちらの値を取り込むかが実行の順番で変わる(競合)ため。入力はクロックのエッジから少しずらすか、ノンブロッキング代入で変える

同じ時刻に、テストベンチが入力を書き換える処理と、回路のフリップフロップが入力を取り込む処理が起こると、シミュレータがどちらを先に実行するかで、取り込まれる値が古い値にも新しい値にもなります。これはシミュレーションの競合(レース)で、シミュレータによって結果が変わることもあります。入力を立ち下がりで変える、少し遅らせる、ノンブロッキング代入やSystemVerilogのクロッキングブロックを使う、などで防ぎます。

  • A. 正しい。シミュレーションの競合(レース)を避ける工夫です。
  • B. 周波数が変わるわけではありません。
  • C. テストベンチでもブロッキング代入は使えます。
この分野を解く 分野ページへ

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

  1. 自己チェック型のテストベンチの特徴として正しいものはどれか。
  2. 検証で、C言語などで書いた参照モデル(ゴールデンモデル)を使う目的として正しいものはどれか。
  3. シミュレーションの結果をVCDなどの形式のファイルに書き出す主な目的はどれか。
  4. ランダムな入力を使うテストで、乱数のシード(種)を記録しておく理由として正しいものはどれか。
  5. SystemVerilogの制約付きランダム検証の説明として正しいものはどれか。