模拟技术学习
直播中

李超

8年用户 1397经验值
私信 关注
[问答]

怎样去使用Makefile+VCS+Verdi做个简单的Test Bench?

怎样去使用Makefile+VCS+Verdi做个简单的Test Bench?有哪些操作步骤?

回帖(1)

刘凤英

2021-6-18 16:06:46
  1. 创建verilog代码, 包括8位加法器代码和testbench代码。
  adder8.v
  module adder8 (
  input clk,
  input [7:0] a_i,
  input [7:0] b_i,
  output reg [8:0] c_o
  );
  always @ (posedge clk) begin
  c_o 《= a_i + b_i;
  end
  endmodule
  adder8_tb.v
  // TB_SEED is random seed
  `ifndef TB_SEED
  `define TB_SEED 0
  `endif
  module adder8_tb();
  wire [8:0] result;
  reg [7:0] input_0;
  reg [7:0] input_1;
  reg clk;
  // clk2 is delay of clk, is used to verify result
  wire #5 clk2;
  assign clk2 = clk;
  initial begin
  $fsdbDumpfile(“adder8.fsdb”);
  $fsdbDumpvars();
  $display(“TB_SEED is %d”, `TB_SEED);
  clk = 0;
  input_0 = 8‘d0;
  input_1 = 8’d0;
  #10000
  $display(“All test PASS!”);
  $finish;
  end
  // system clk is 50MHz
  always begin
  #10 clk = ~clk;
  end
  //generate random input
  always @ (negedge clk) begin
  input_0 = $random() % 256;
  input_1 = $random() % 256;
  end
  //get verified output
  always @ (posedge clk2) begin
  if ((input_0 + input_1) != result) begin
  $display(“Test failed for %x + %x = %x”, input_0, input_1, result);
  $finish;
  end else begin
  $display(“%x + %x = %x”, input_0, input_1, result);end
  end
  //instantiate adder8
  adder8 dut(
  .clk(clk),
  .a_i(input_0),
  .b_i(input_1),
  .c_o(result)
  );
  endmodule
  2.编写Makefile文件,
  VCS= vcs -sverilog -timescale=1ns/1ns +vpi -l build.log -debug_access+all
  SIMV = 。/simv -l simv.log
  ifndef TB_SEED
  TB_SEED = 1024
  endif
  all: comp run
  comp:
  $(VCS) +define+TB_SEED=$(TB_SEED) +incdir+.
  adder8.v
  adder8_tb.v
  run:
  $(SIMV) +fsdbfile+top.fsdb
  dbg:
  verdi -f file.f -ssf top.fsdb &
  clean:
  rm -rf core csrc simv* vc_hdrs.h ucli.key urg* *.log *.fsdb novas.* verdiLog
  注意:Makefile里面的空格排版位tab键。
  file.f里面内容为:
  adder8_tb.v
  adder8.v
  3.编译项目: Make
  清除项目: Make clean
  查看波形:Make dbg
  编译日志文件为:build .log
  仿真日志文件为:simv.log
  仿真结果为:
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分