14-Verilog for Verification

Verilog for Verification

1.引言

  • Testbench也是一个模块(module...endmodule)

  • Testbench没有输入和输出,因为它是一个闭环,自己产生激励,灌给module,module输出响应,testbench会捕捉响应,进行比较,自己在自己内部形成闭环

  • 完成对待测设计的例化,测试代码的封装,提供测试激励,收集测试结果

  • 无需综合,行为级描述优先

module module_name_tb;
  //测试代码
endmodule

2.变量声明

  • 给待测设计的输入端口提供激励
  • 通过待测实际的输出端口收集激励
  • 提供激励的信号:reg类型信号进行声明,便于在initial和always中进行赋值
  • 收集激励的信号:reg或wire,多数情况下使用wire
  • 也可以使用logic变量进行声明
// 名称关联的方式
apd_slave U_apb_slave(
  .pclk (pclk),
  .prestn (prestn),
  .paddr (paddr),
  .psel (psel),
  .pwrite (pwrite),
  .penable (penable),
  .pwdata (pwdata),
  .prdata (prdata)
);

3.激励

3.1 时钟产生

  • forever语句,必须写在initial中
  • forever后面执行多条语句,加begin end
// clock generate
initial begin 
  pclk = 0;
  forever
  begin
    #10 pclk = ~pclk;   // 时钟周期是20个时间单位
  end 

3.2 reset信号

  • 低电平有效
  • 在某个时间点将reset置为0
reg rst_n;
initial begin
  rst_n = 1'b0;  // 复位信号置为低电平
  #45;
  rst_n = 1'b1;  // 延迟45个时间单位之后,将复位撤销
end

3.3 产生激励

  • wait(条件表达式),条件表达式为真的时候解除等待
initial begin
  ......
  wait(rst_n = 1'b1);
  wait(sim_start)
  ......
end
  • @(posegde clk) ...
initial
begin
  .....
  wait(rst_n = 1'b1);
  wait(sim_start);
  @(posedge pclk);
  a = 1'b1;
end


initial
begin
  .....
  wait(rst_n = 1'b1);
  wait(sim_start);
  @(posedge pclk);
  #3;               // 寄存器d到q端的延迟
  a = 1'b1;
end
  • function是不能有延迟信息语句的
  • task是可以具有延迟信息语句的
  • 将读写操作封装成task
task apb_write(input [31:0] addr,input [31:0] wdata);
begin

end
endtask

task apb_read(input [31:0] addr,output [31:0] rdata);
begin

end
endtask

reg [31:0] memory [1024:0]

FILE0 = $open("block90");
for(address=32'h0,address<32'h80;address=address+1)
  $fwriteh(FILE0,32'hFFFFFFFF,"\n")
$fclose(FILE0)

$readmemh("block0",memory);

3.4 dump 波形

`ifdef VPD_ON
  initial begin
    $vcdpluson();
  end
`endif

3.5 显示激励

3.6 结束仿真

3.7 预编译

3.8 include


4.实例

4.1 设计代码

4.2 验证流程

4.3 APB Slave testbench

  • testbench中输入定义为reg,输出定义为wire
  • 例化模块
  • 产生时钟和复位
  • 产生激励,产生激励的时候要给模块的输入一定的初始值,不给初始值就会产生x态









posted @ 2023-03-08 22:55  Icer_Newer  阅读(56)  评论(0编辑  收藏  举报