Menu
Coddy logo textTech

テストベンチとは

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 73/90。

testbench は、別の module をテストするために使用される特別な Verilog module です。設計に対して inputs を提供し、outputs が正しいかどうかを確認します。

なぜテストベンチが必要なのでしょうか?

モジュールを構築したら、それが正しく動作するか確認する必要があります。テストベンチを使用すると、以下のことが可能になります:

  • モジュールにさまざまな入力値を適用する
  • 出力結果を観察する
  • 出力が期待通りであるか確認する
  • 手動でのテストを行わずに、これを自動化する

Testbench と Design Module の比較

 Design ModuleTestbench
目的ハードウェアを実装するデザインモジュールをテストする
ポートの有無あり (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
endmodule

Key Points

  • Testbench には ports がありません
  • reg は変更される signals(DUT への inputs)に使用されます
  • wire は DUT からの signals(outputs)に使用されます
  • テスト対象のモジュールは DUT (Design Under Test) と呼ばれます
  • $finish はシミュレーションを終了します

刺激(stimulus)の作成、結果の表示、その他のテストベンチの機能については、以降のレッスンで扱います。

challenge icon

チャレンジ

ANDゲートモジュールが与えられています。あなたのタスクは、そのテストベンチに不足している部分を追加することです。

作業内容:

テストベンチに以下の部分を追加してください:

  1. input である ab のために reg を宣言する
  2. output である c のために wire を宣言する
  3. and_gatedut という名前でインスタンス化し、ポートを接続する

自分で試してみよう

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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン