境界と制御のカバレッジ
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 29/38。
いくつかのテストに合格することは、重要なシナリオを網羅することとは異なります。最小値、最大値、通常の値がテストされたかどうか、また競合する制御が同時に発生したかどうかを追跡します。カバレッジフラグは、case が観測されたことを記録しますが、設計が正しく応答したことを証明するものではありません。カバレッジを結果のチェックと組み合わせてください。
関連する抜粋です。周囲の宣言と接続は課題内で提供されています。
if(value==0) seen[0]=1;
else if(value==15) seen[1]=1;
else seen[2]=1;ビットマスクは、以前のヒットを置き換えることなく、どのカテゴリが出現したかを記憶します。
境界網羅と制御組み合わせ網羅を、独立した正しさのチェックと組み合わせます。
チャレンジ
中級以前のヒットを消去せずに、seen 内の3つの入力カバレッジビンを追跡します。ビット 0 は value=0 を記録し、ビット 1 は value=15 を記録し、ビット 2 は 1 から 14 までの値を記録します。入力には既知のビットが含まれています。呼び出し側はシナリオの前に seen=0 を初期化します。このモジュールには、ロックされたテストベンチから呼び出されるシミュレーション専用の task が含まれています。出力列: seen の10進数表現。
design.v を完成させ、モジュール名とポートを保持してください。ロックされた testbench.v は入力を変更し、値が安定した後に出力を表示します。+CASE=1 のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。ロックされたテストベンチでの表示とシナリオ制御はそのままにし、task 本体だけを実装してください。期待される出力は、各観測につき10進数値を1行に1つ出力し、値同士は1つのスペースで区切り、最後は改行で終わります。
自分で試してみよう
module dut;
task observe;
input [3:0] value;
inout [2:0] seen;
begin
// チェッカータスクを完成させてください。
seen=seen;
end
endtask
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
RTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ