What Is A Testbench
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 73번째.
testbench는 다른 module을 테스트하는 데 사용되는 특수한 Verilog module입니다. 설계에 입력을 제공하고 출력이 올바른지 확인합니다.
왜 testbench가 필요한가요?
module을 만들 때는 module이 올바르게 작동하는지 확인해야 합니다. testbench를 사용하면 다음을 수행할 수 있습니다:
- module에 다양한 input values 적용
- outputs 관찰
- 출력이 예상한 것과 일치하는지 확인합니다
- 수동 테스트 없이 이 작업을 자동으로 수행합니다
테스트벤치와 설계 모듈 비교
| 설계 모듈 | 테스트벤치 | |
|---|---|---|
| 목적 | 하드웨어 구현 | 설계 모듈 테스트 |
| 포트가 있나요? | 예 (입력 및 출력) | 아니요 (독립적으로 구성됨) |
| 합성 가능한가요? | 예 | 아니요 (시뮬레이션 전용) |
간단한 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핵심 사항
- 테스트벤치는 포트가 없습니다
reg는 변경되는 신호(DUT에 대한 inputs)에 사용됩니다wire는 DUT의 신호(outputs)에 사용됩니다
- 테스트 중인 모듈은 DUT(테스트 대상 설계)라고 합니다
$finish는 시뮬레이션을 종료합니다
다음 레슨에서는 자극 생성, 결과 표시 및 기타 testbench 기능을 다룹니다.
챌린지
AND 게이트 모듈이 주어집니다. 여러분의 과제는 테스트벤치에 누락된 부분을 추가하는 것입니다.
수행할 작업:
테스트벤치에 다음 부분을 추가하세요:
reg를 입력a와b에 대해 선언하세요- 출력
c에 대해wire를 선언하세요 - 이름이
dut인and_gate를 인스턴스화하고 포트를 연결하세요
직접 해보기
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
// Task 1: 입력 a와 b에 대한 reg 선언
// Task 2: 출력 c에 대한 wire 선언
// Task 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 컴파일러