Menu
Coddy logo textTech

테스트벤치란 무엇인가

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 73번째.

테스트벤치는 다른 모듈을 테스트하는 데 사용되는 특별한 Verilog 모듈입니다. 이는 설계에 입력을 제공하고 출력이 올바른지 확인합니다.

왜 테스트벤치가 필요한가요?

모듈을 빌드할 때, 그것이 올바르게 작동하는지 확인해야 합니다. 테스트벤치를 사용하면 다음을 수행할 수 있습니다:

  • 모듈에 다양한 입력 값을 적용합니다
  • 출력을 관찰합니다
  • 출력이 예상과 일치하는지 확인하세요
  • 수동 테스트 없이 이를 자동으로 수행하세요

테스트벤치 vs 디자인 모듈

 디자인 모듈테스트벤치
목적하드웨어 구현디자인 모듈 테스트
포트가 있습니까?예 (입력 및 출력)아니오 (자체 포함)
합성 가능합니까?아니오 (시뮬레이션 전용)

간단한 테스트벤치 예제

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

주요 사항

  • 테스트벤치에는 포트가 없습니다
  • reg는 변경되는 신호(DUT로의 입력)에 사용됩니다
  • wire는 DUT로부터의 신호(출력)에 사용됩니다
  • 테스트 중인 모듈은 DUT (Design Under Test)라고 불립니다
  • $finish는 시뮬레이션을 종료합니다

다음 레슨들에서 자극(stimulus) 생성, 결과 표시 및 기타 테스트벤치 기능들을 다룰 것입니다.

challenge icon

챌린지

AND 게이트 모듈이 주어집니다. 여러분의 작업은 테스트벤치에 누락된 부분을 추가하는 것입니다.

수행할 작업:

테스트벤치에 다음 부분을 추가하세요:

  1. 입력 ab를 위한 reg를 선언하세요
  2. 출력 c를 위한 wire를 선언하세요
  3. 이름이 dutand_gate를 인스턴스화하고 포트를 연결하세요

치트 시트

테스트벤치(testbench)는 다른 모듈(DUT - Design Under Test, 설계 검증 대상)을 테스트하는 데 사용되는 Verilog 모듈입니다. 테스트벤치는 포트가 없으며 시뮬레이션 전용입니다.

module testbench;              // No ports!

  reg a, b;                    // reg for inputs (signals that change)
  wire c;                      // wire for DUT outputs

  and_gate dut (               // Instantiate DUT
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin                // Apply test values
    a = 0; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;                   // End simulation
  end
endmodule
  • initial 블록에서 구동되는 신호(DUT의 입력)에는 reg를 사용합니다.
  • DUT에서 나오는 신호(출력)에는 wire를 사용합니다.
  • $finish는 시뮬레이션을 종료합니다.

직접 해보기

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  
  // 작업 1: 입력 a와 b를 위한 reg 선언
  
  
  // 작업 2: 출력 c를 위한 wire 선언
  

  // 작업 3: dut라는 이름으로 and_gate 인스턴스화
  // .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실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨