认识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模板。

//定义模块的仿真时的时间单位和时间精度
`timescale 1ns / 1ps

module vtf_pll_test();//不需要声明端口;

// Inputs,被测模块UUT的输入设置为reg
	reg sys_clk;
	reg rst_n;
// Outputs,被测模块UUT的输出设置为wire
    wire clk_out;
    
// Instantiate the Unit Under Test (UUT),例化被测模块uut
	pll_test uut (
		.sys_clk(sys_clk), 		
		.rst_n(rst_n), 
		.clk_out(clk_out)
	);

    //起始语句,只执行一次,初始化变量,产生复位信号
	initial begin
		// Initialize Inputs,初始化uut的输入信号,复位
		sys_clk = 0;
		rst_n = 0;
		// Wait 100 ns for global reset to finish,等待全局复位完成,时间为100个时间单位,
		#100;
          rst_n = 1; 
		#20000;// 等待20000个时间单位,
		$display("stop");//在命令行显示字符串
       $stop;//系统函数,结束仿真
	 end

	//always后面没有@,代表永远循环执行;没有@的always语句不可综合,产生时钟信号
	//如果有@,后面一定要加时钟,代表时钟边沿来到的时候顺序执行begin end里面的语句。
	//没有begin...end限制,只执行其下面一个语句  
    always #10 sys_clk = ~ sys_clk;   //20ns一个周期,产生50MHz时钟源

endmodule

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duanzw102

有钱的捧个钱场,没钱的捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值