What Is A Testbench
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 73/90。
testbenchは、別のモジュールをテストするために使用される特殊なVerilog moduleです。設計にinputsを与え、outputsが正しいかどうかを確認します。
なぜテストベンチが必要なのでしょうか?
モジュールを構築したら、正しく動作することを確認する必要があります。テストベンチを使うと、次のことができます。
- モジュールにさまざまな入力値を適用する
- 出力を観察する
- 出力が期待どおりか確認する
- 手動テストなしでこれを自動的に行う
テストベンチと設計モジュールの比較
| 設計モジュール | テストベンチ | |
|---|---|---|
| 目的 | ハードウェアを実装する | 設計モジュールをテストする |
| ポートがあるか? | はい(inputs と outputs) | いいえ(自己完結型) |
| 合成可能か? | はい | いいえ(simulation のみ) |
シンプルなテストベンチの例
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
endmodule要点
- testbenchにはポートがありません
regは変化する信号(DUTへのinputs)に使用されますwireはDUTからの信号(outputs)に使用されます
- テスト対象のモジュールはDUT(テスト対象デザイン)と呼ばれます
$finishはシミュレーションを終了します
次のレッスンでは、刺激の作成、結果の表示、その他のtestbenchの機能について学びます。
チャレンジ
ANDゲートのmoduleが与えられています。あなたのタスクは、そのtestbenchに不足している部分を追加することです。
やること:
次の部分をtestbenchに追加してください:
- Declare
regを inputsaとbのために - Declare
wireを outputcのために - Instantiate
and_gateを名前dutで、ports を接続する
自分で試してみよう
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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ