赞
踩
Bench有平台之意,所以Testbench就是测试平台的意思。
任何一个被测模块,都有输入和输出,此模块是否合格的判断依据,就是在满足输入要求的情况下,能否得到符合预期的输出。我们把被测模块称作UUT(Unit Under Test)。
Vivado提供了Simulator(仿真)功能,用户可以通过编写仿真文件,根据UUT 顶层输入/输出接口的设计要求,产生测试激励信号输入到被测模块UUT,同时对被测模块的输出进行捕捉,监视顶层输出接口,观察输出是否符合预期。整个流程就像把一个模块放到一个测试平台上验证一样,只不过在这里平台是一个文件,Testbench文件,一种模拟实际环境输入激励和输出校验的“虚拟平台”。
可见,Testbench文件的作用是:1、产生输入接口的测试激励;2、监视输出接口。
Testbench文件也采用Verilog语言编写,不需要输入输出,所以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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。