What is testbench
编写testbench的主要目的是为了对使用硬件描述语言(HDL)设计的电路进行仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符。
testbench构造
一些基本约定
简单的testbench的结构通常需要建立一个顶层文件,顶层文件没有输入和输出端口。在顶层文件里,把被测模块和激励产生模块实例化进来,并且把被测模块的端口与激励模块的端口进行对应连接,使得激励可以输入到被测模块。
一般用initial块给信号赋初值,initial块执行一次,always或者forever表示由事件激发反复执行。input对应的端口应当申明为reg,output对应的端口申明为wire。
时间精度与延迟
字符#,该符号的意思是指延迟timescale中设定的单位时间的个数。一般在testbench的开头定义时间单位和仿真精度,比如1
`timescale 1ns/1ps
前面一个是代表时间单位,后面一个代表仿真时间精度。以上面的例子而言,一个时钟周期是 20 个单位,也就是 20ns。
时钟的发生
always加#延时固定时间间隔生成时钟信号,注意给时钟初始化。1
2
3
4
5
6
7
8
9
10always #10 begin
clk<=~clk;
end
initial begin
#0 begin
clk<=1'b0;
end
...
end
载入存储镜像
仿真时,有时需要向存储器预先载入准备好的数据。可以使用$readmemh系统任务从文件中读入数据并设置存储器。格式:$readsmemh(“文件名”,读入对象”)。存储镜像文件使用十六进制文本文件记录,每一行记录一个地址的数据。
A simple example
1 |
|
PS.7isthecoolestgirlintheworld