Dumpfile과 Dumpvars
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 76번째.
파형은 시간에 따른 신호 변화의 시각적 표현입니다. 파형은 시뮬레이션 중에 신호(clk, a, b, out 등)가 어떻게 변하는지 보여줍니다. 가로축은 시간을 나타내고, 세로축은 신호 값(0, 1, X, Z)을 나타냅니다.
$dumpfile과 $dumpvars는 GTKWave와 같은 파형 뷰어에서 볼 수 있는 파형 파일(VCD 파일)을 생성하는 데 사용되는 시스템 태스크입니다. VCD는 Value Change Dump의 약자입니다. 이것은 시뮬레이션 동안의 모든 신호 변화를 기록하는 파일입니다. 이 파일을 파형 뷰어에서 열어 신호를 시각적으로 확인할 수 있습니다.
$dumpfile
$dumpfile은 생성할 파형 파일의 이름을 지정합니다.
구문:
$dumpfile("filename.vcd");예시:
$dumpfile("my_waveform.vcd");이것은 my_waveform.vcd라는 이름의 파일을 생성합니다.
$dumpvars
$dumpvars는 파형 파일에 기록할 신호를 지정합니다.
구문:
$dumpvars(level, module_name);| 매개변수 | 의미 |
|---|---|
level | 덤프할 계층 수준의 수 (0 = 모든 수준) |
module_name | 신호를 덤프할 모듈 |
참고: 계층 구조(Hierarchy)는 다른 모듈 내부에 있는 모듈을 의미합니다. 0을 사용하면 최상위 모듈과 그 내부의 모든 모듈에서 모든 신호를 덤프하며, 1은 최상위 모듈의 신호만 덤프합니다.
일반적인 사용법
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
end$dumpfile("dump.vcd")→dump.vcd라는 이름의 파일을 생성합니다$dumpvars(0, testbench)→testbench모듈 및 모든 하위 모듈의 모든 신호를 덤프합니다
테스트벤치(Testbench)를 포함한 예제
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
$display("Creating waveform file...");
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
$finish;
end
endmoduleDumpvars 레벨 예시
| 레벨 | 덤프되는 내용 |
|---|---|
0 | 모듈 및 모든 하위 모듈의 모든 신호 |
1 | 지정된 모듈의 신호만 (하위 모듈 제외) |
챌린지
파형 파일을 생성하기 위해 누락된 $dumpfile 및 $dumpvars 문을 추가하세요.
수행할 작업:
waveform.vcd라는 이름의 파일을 생성하도록$dumpfile을 추가합니다.testbench모듈의 모든 신호를 덤프하도록$dumpvars를 추가합니다.
치트 시트
initial 블록 내에서 $dumpfile과 $dumpvars를 사용하여 GTKWave와 같은 도구에서 볼 수 있는 VCD (Value Change Dump) 파형 파일을 생성합니다:
initial begin
$dumpfile("dump.vcd"); // VCD 파일을 생성합니다
$dumpvars(0, testbench); // testbench 및 하위 모듈의 모든 신호를 덤프합니다
end$dumpvars(level, module_name) 레벨:
0— 모듈 및 모든 하위 모듈의 모든 신호1— 지정된 모듈의 신호만 (하위 모듈 제외)
직접 해보기
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: "waveform.vcd"를 생성하기 위해 $dumpfile 추가
// TODO: testbench의 모든 신호를 덤프하기 위해 $dumpvars 추가
// 힌트: $dumpvars(0, testbench);
if ($test$plusargs("vcd")) begin
$display("VCD file created successfully");
end
$display("Simulation running...");
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$display("Simulation complete. Open waveform.vcd");
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.