47 行
1.1 KiB
Plaintext
47 行
1.1 KiB
Plaintext
`timescale 1ns/1ps
|
|
|
|
module testbench;
|
|
// 1. 声明所有变量
|
|
reg clk;
|
|
reg reset_n;
|
|
wire [31:0] pc_out;
|
|
integer fd;
|
|
string dump_path = "/tmp/wave.vcd"; // SystemVerilog 支持直接赋值
|
|
|
|
// 实例化被测设计
|
|
top uut (
|
|
.clk(clk),
|
|
.reset_n(reset_n),
|
|
.pc_out(pc_out)
|
|
);
|
|
|
|
// 2. 生成时钟
|
|
initial begin
|
|
clk = 0;
|
|
forever #5 clk = ~clk;
|
|
end
|
|
|
|
// 3. 波形生成和错误处理
|
|
initial begin
|
|
// 尝试创建文件
|
|
fd = $fopen(dump_path, "w");
|
|
if (fd == 0) begin
|
|
string err_msg = $sformatf("ERROR: Cannot open %s for writing!", dump_path); // SystemVerilog 格式化
|
|
$display("%s", err_msg);
|
|
$finish;
|
|
end
|
|
$fclose(fd);
|
|
|
|
// 初始化波形记录
|
|
$dumpfile(dump_path);
|
|
$dumpvars(0, testbench);
|
|
$display("Waveform will be saved to %s", dump_path); // 部分工具支持 %s
|
|
|
|
// 复位和仿真控制
|
|
reset_n = 0;
|
|
#100 reset_n = 1;
|
|
#1000 $finish;
|
|
end
|
|
|
|
endmodule
|