testbench.v02 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. `timescale 1ns/1ps
  2. module testbench;
  3. // 1. 声明变量(纯 Verilog)
  4. reg clk;
  5. reg reset_n;
  6. wire [31:0] pc_out;
  7. integer fd; // 文件描述符
  8. reg [8*80:1] dump_path; // 用 reg 数组模拟字符串
  9. // 实例化被测设计
  10. top uut (
  11. .clk(clk),
  12. .reset_n(reset_n),
  13. .pc_out(pc_out)
  14. );
  15. // 2. 生成时钟
  16. initial begin
  17. clk = 0;
  18. forever #5 clk = ~clk; // 100MHz 时钟
  19. end
  20. // 3. 波形生成和错误处理
  21. initial begin
  22. // 初始化路径(用字符串拼接模拟)
  23. dump_path = "/tmp/wave.vcd"; // Verilog 中直接赋值 reg 数组
  24. // 尝试创建文件
  25. fd = $fopen(dump_path, "w");
  26. if (fd == 0) begin
  27. $display("ERROR: Cannot open ", dump_path, " for writing!"); // 字符串拼接
  28. $finish;
  29. end
  30. $fclose(fd);
  31. // 初始化波形记录
  32. $dumpfile(dump_path);
  33. $dumpvars(0, testbench);
  34. $display("Waveform will be saved to ", dump_path); // 字符串拼接
  35. // 复位和仿真控制
  36. reset_n = 0;
  37. #100 reset_n = 1;
  38. #1000 $finish;
  39. end
  40. endmodule