当前位置:   article > 正文

认识Testbench仿真激励

认识Testbench仿真激励

一、认识Testbench

       Bench有平台之意,所以Testbench就是测试平台的意思。

      任何一个被测模块,都有输入和输出,此模块是否合格的判断依据,就是在满足输入要求的情况下,能否得到符合预期的输出。我们把被测模块称作UUT(Unit Under Test)。

       Vivado提供了Simulator(仿真)功能,用户可以通过编写仿真文件,根据UUT 顶层输入/输出接口的设计要求,产生测试激励信号输入到被测模块UUT,同时对被测模块的输出进行捕捉,监视顶层输出接口,观察输出是否符合预期。整个流程就像把一个模块放到一个测试平台上验证一样,只不过在这里平台是一个文件,Testbench文件,一种模拟实际环境输入激励和输出校验的“虚拟平台”。

      可见,Testbench文件的作用是:1、产生输入接口的测试激励;2、监视输出接口。

      Testbench文件也采用Verilog语言编写,不需要输入输出,所以Testbench对外无接口,不需要端口声明。

二、最基本的Testbench模板

       TestBench最基本的功能,是例化UUT模块,产生时钟信号clk和复位信号rst。稍微复杂一点,还可以监视UUT模块的输出。下面是一个最基本的Testbench模板。

  1. //定义模块的仿真时的时间单位和时间精度
  2. `timescale 1ns / 1ps
  3. module vtf_pll_test();//不需要声明端口;
  4. // Inputs,被测模块UUT的输入设置为reg
  5. reg sys_clk;
  6. reg rst_n;
  7. // Outputs,被测模块UUT的输出设置为wire
  8. wire clk_out;
  9. // Instantiate the Unit Under Test (UUT),例化被测模块uut
  10. pll_test uut (
  11. .sys_clk(sys_clk),
  12. .rst_n(rst_n),
  13. .clk_out(clk_out)
  14. );
  15. //起始语句,只执行一次,初始化变量,产生复位信号
  16. initial begin
  17. // Initialize Inputs,初始化uut的输入信号,复位
  18. sys_clk = 0;
  19. rst_n = 0;
  20. // Wait 100 ns for global reset to finish,等待全局复位完成,时间为100个时间单位,
  21. #100;
  22. rst_n = 1;
  23. #20000;// 等待20000个时间单位,
  24. $display("stop");//在命令行显示字符串
  25. $stop;//系统函数,结束仿真
  26. end
  27. //always后面没有@,代表永远循环执行;没有@的always语句不可综合,产生时钟信号
  28. //如果有@,后面一定要加时钟,代表时钟边沿来到的时候顺序执行begin end里面的语句。
  29. //没有begin...end限制,只执行其下面一个语句
  30. always #10 sys_clk = ~ sys_clk; //20ns一个周期,产生50MHz时钟源
  31. endmodule

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/250386
推荐阅读
相关标签
  

闽ICP备14008679号