テストベンチとは
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 73/90。
testbench は、別の module をテストするために使用される特別な Verilog module です。設計に対して inputs を提供し、outputs が正しいかどうかを確認します。
なぜテストベンチが必要なのでしょうか?
モジュールを構築したら、それが正しく動作するか確認する必要があります。テストベンチを使用すると、以下のことが可能になります:
- モジュールにさまざまな入力値を適用する
- 出力結果を観察する
- 出力が期待通りであるか確認する
- 手動でのテストを行わずに、これを自動化する
Testbench と Design Module の比較
| Design Module | Testbench | |
|---|---|---|
| 目的 | ハードウェアを実装する | デザインモジュールをテストする |
| ポートの有無 | あり (inputs および outputs) | なし (自己完結型) |
| 論理合成可能か? | 可能 | 不可 (simulation のみ) |
シンプルな testbench の例
module testbench; // ポートなし!
// 入力と出力は、テスト対象のモジュール(DUT)から来ます。
reg a, b; // 入力用のreg
wire c; // 出力用のwire
// これはモジュールのインスタンス化です — and_gateモジュールのコピーを作成し、dutと名付けます
and_gate dut ( // DUTをインスタンス化
.a(a),
.b(b),
.c(c)
);
// これは、テスト対象のモジュールの入力にテスト値を適用するinitialブロックです。
initial begin // テスト値を適用
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
end
endmoduleKey Points
- Testbench には ports がありません
regは変更される signals(DUT への inputs)に使用されますwireは DUT からの signals(outputs)に使用されます
- テスト対象のモジュールは DUT (Design Under Test) と呼ばれます
$finishはシミュレーションを終了します
刺激(stimulus)の作成、結果の表示、その他のテストベンチの機能については、以降のレッスンで扱います。
チャレンジ
ANDゲートモジュールが与えられています。あなたのタスクは、そのテストベンチに不足している部分を追加することです。
作業内容:
テストベンチに以下の部分を追加してください:
inputであるaとbのためにregを宣言するoutputであるcのためにwireを宣言するand_gateをdutという名前でインスタンス化し、ポートを接続する
自分で試してみよう
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
// タスク 1: 入力 a と b の reg を宣言する
// タスク 2: 出力 c の wire を宣言する
// タスク 3: and_gate を dut という名前でインスタンス化する
// .a(a), .b(b), .c(c) を接続する
initial begin
a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。