Verilog TestBench教程
1. Verilog Testbench 的结构
TestBench文件中,包括了很多不可综合的Verilog代码,这些代码可以用于生成测试激励,并且用于检查待测模块是否满足了设计的要求。
激励模块用于生成测试信号,输出检测模块用于检测输出结构是否与设计预期结构相同。对于复杂的TestBench,激励模块和输出检查模块可以放在其他的文件中,对于结构简单的TestBench可以将全部内容放到一个文件里。
为了能够直观观察仿真波形,我们可以利用Vivado等IDE提供的仿真工具,也可以利用开源工具icarus verilog
和GTKwave
进行仿真。此外还有在线工具EDA Playground
可裨用户进行仿真工作。
2. 实例化待测模块(DUT)
写作Verilog Testbench文件的第一步是创建一个用于仿真的顶层模块。我们希望我们的Testbench的可以完完全全自动完成整个测试过程,所以我们的顶层模块是一个没有信号输入与信号输出的模块。
module example_tb();
//信号定义
endmodule
第二步需要实例化一个待测模块
<module_name> # (
// If the module uses parameters they are connected here
.<parameter_name> (<parameter_value>)
)
<instance_name> (
// Connection to the module ports
.<port_name> (<signal_name>),
.<port_name> (<signal_name>)
);
//实例化主要分为两个部分一个是参数设置,一个是端口映射。
//第一个首先写出设计模块名字,之后一个括号,内部是参数名和参数值格式位.<parameter_name> (<parameter_value>)参数的括号后没有分号
//再次是dut实例名字
//其次是端口的映射,格式为.<port_