再利用可能なチェッカータスク
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 27/38。
Verilog の task は手続き的な処理をまとめ、output または inout 引数を通じて結果を返すことができます。テストベンチの task を使うと、重複したチェックを減らせます。組み合わせ function とは異なり、task には必要に応じてタイミング制御を含めることができますが、これらのチェッカー task はゼロ時間の比較のみを実行します。並行して実行される個別の呼び出しで独立したローカルストレージが必要な場合は automatic task を使用してください。この例で提供されている呼び出しは逐次的です。
関連する抜粋です。周囲の宣言と接続は課題内で提供されます。
task check_value;
input [7:0] actual,expected;
output ok;
begin ok = (actual === expected); end
endtask呼び出し元は、明示的な出力引数を通じてチェック結果を受け取ります。
失敗を収集する前に、task 引数の方向を定義し、呼び出しごとの結果変数をリセットします。
チャレンジ
中級actual と expected が4状態等価で一致する場合に ok が1になり、それ以外の場合は0になるように check_value を実装してください。このモジュールには、固定されたテストベンチから呼び出されるシミュレーション専用の task が含まれています。出力列: ok。
design.v を完成させ、モジュール名とポートを保持してください。固定された testbench.v は入力の変化を与え、それらが安定した後に出力を表示します。+CASE=1 のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。表示処理とシナリオ制御は固定されたテストベンチに残し、task 本体だけを実装してください。期待される出力は、各観測結果につき10進値を1行に1つ、1つのスペースで区切り、改行で終わる形式です。
自分で試してみよう
module dut;
task check_value;
input [7:0] actual,expected;
output ok;
begin
// チェッカータスクを完成させてください。
ok=0;
end
endtask
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
RTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ