50 lines
1.2 KiB
Plaintext
50 lines
1.2 KiB
Plaintext
`timescale 1ns/1ps
|
||
|
||
module testbench;
|
||
// 1. 声明变量(纯 Verilog)
|
||
reg clk;
|
||
reg reset_n;
|
||
wire [31:0] pc_out;
|
||
integer fd; // 文件描述符
|
||
reg [8*80:1] dump_path; // 用 reg 数组模拟字符串
|
||
|
||
// 实例化被测设计
|
||
top uut (
|
||
.clk(clk),
|
||
.reset_n(reset_n),
|
||
.pc_out(pc_out)
|
||
);
|
||
|
||
// 2. 生成时钟
|
||
initial begin
|
||
clk = 0;
|
||
forever #5 clk = ~clk; // 100MHz 时钟
|
||
end
|
||
|
||
// 3. 波形生成和错误处理
|
||
initial begin
|
||
// 初始化路径(用字符串拼接模拟)
|
||
dump_path = "/tmp/wave.vcd"; // Verilog 中直接赋值 reg 数组
|
||
|
||
// 尝试创建文件
|
||
fd = $fopen(dump_path, "w");
|
||
if (fd == 0) begin
|
||
$display("ERROR: Cannot open ", dump_path, " for writing!"); // 字符串拼接
|
||
$finish;
|
||
end
|
||
$fclose(fd);
|
||
|
||
// 初始化波形记录
|
||
$dumpfile(dump_path);
|
||
$dumpvars(0, testbench);
|
||
$display("Waveform will be saved to ", dump_path); // 字符串拼接
|
||
|
||
// 复位和仿真控制
|
||
reset_n = 0;
|
||
#100 reset_n = 1;
|
||
#1000 $finish;
|
||
end
|
||
|
||
endmodule
|
||
|