参照モデルとスコア
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 28/38。
自己検証型のテストベンチは、設計の出力とは独立して期待される動作を計算します。リファレンスモデルは、実装が異なる構造を使用している場合でも、単純な算術演算を使用できます。スコアボードは観測結果と不一致の数を数えます。シナリオごとにそのカウンターを一度だけ初期化し、設計の出力が安定した後にのみ比較します。
関連する抜粋です。周辺の宣言と接続は課題内で提供されています。
expected = {1'b0,a} + {1'b0,b};
checked = checked + 1;
if(actual !== expected) errors = errors + 1;期待値は指定された入力動作から得られるものであり、actual をコピーしたものではありません。
期待値を独立して計算し、定められた時点でサンプリングし、確認したすべての結果を追跡します。
チャレンジ
中級符号なし4ビット加算器の参照チェックを実装してください。完全な5ビットの数学的な a+b を計算し、actual がその結果と4値比較で正確に一致する場合のみ ok=1 を返します。このモジュールには、ロックされたテストベンチから呼び出されるシミュレーション専用の task が含まれます。出力列: ok。
design.v を完成させ、モジュール名とポートを保持してください。ロックされた testbench.v が入力の変更を与え、値が安定した後に出力を表示します。+CASE=1 のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。ロックされたテストベンチでの表示とシナリオ制御はそのままにし、task 本体のみを実装してください。期待される出力は、観測ごとに10進値を1行ずつ出力し、値は1つのスペースで区切り、最後に改行を付けます。
自分で試してみよう
module dut;
task check_sum;
input [3:0] a,b;
input [4:0] actual;
output ok;
reg [4:0] expected;
begin
// チェッカータスクを完成させてください。
ok=0;
end
endtask
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
RTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ