FPGA系统设计的仿真验证之: 仿真测试文件(Testbench)的设计方法
印信号的ASCII值
initialbegin
$timeformat(-9,1,ns,12);//设置输出时钟格式
$display(TimeClkRstLdSftRgDataSel);//显示输入的字符串
$monitor(%t%b%b%b%b%b%b,//设置输出信号的格式
$realtime,clock,reset,load,shiftreg,data,sel);//指定输出的信号
end
$display是将函数内部双引号中的字符串输出在终端中。而$monitor则不同,因此它的输出是事件驱动的。在例子中,$monitor信号列表中的$realtime信号变化会触发终端显示事件的发生,该信号被设计者对应到仿真时间中,每次$monitor的触发将会把信号列表中的信号值显示在终端中。
$monitor语句中的“%”用于定义信号列表中信号的输出格式。例如,%t将信号按照时间格式输出,%b将信号按照二进制格式输出。另外,VerilogHDL语言还提供了其他的输出格式,比如%h为十六进制输出,%d为十进制输出,%o为八进制输出等。更为详细的格式输出定义可以参看Verilog参考手册。
7.5.3测试常用语句
常用的Verilog测试用结构语句,比如$monitor、$display和$time在上面已经介绍过了。下面再来介绍一些其他的常用语句。
1.force/release
force和release语句可以用来强制对执行过程中的寄存器或网络型信号量赋值。这两条语句共同完成一个强制赋值的过程。当一个被force的信号被release以后,这个信号将会保持当时的状态直到下一个赋值语句产生为止。
下面举个例子来说明这两条语句的使用。
moduletestbench;
...
initialbegin
reset=1;//在仿真时间零点将reset激励为1
forceDataOut=101;//在仿真时间零点强制使DataOut为101,并保持
#25reset=0;//在仿真绝对时间25将reset激励为0
#25releaseDataOut;//在仿真绝对时间50释放
//DataOut值将保持直至下一个对它的赋值语句
...
end
endmodule
2.assign/deassign
assign/deassign语句与force/release语句相类似,不过assign/deassign语句只能对设计中的寄存器型信号赋值。它们常常被用来设置输入值。
下面是这两个语句的例子。
moduletestbench;
...
initialbegin
reset=1;//绝对时间零点对reset赋值1
DataOut=101;
#25reset=0;//绝对时间25对reset赋值0
releaseDataOut;
...
end
initialbegin
#20assignreset=1;//此条语句覆盖之前的赋值语句(即绝对时间零点的赋值)
#25reset=0;//绝对时间45对reset赋值0
#50releasereset;//绝对时间95释放reset信号
endmodule
3.timescales
timescale语句用于定义测试文件的单位时间,同时也对仿真的精度有影响。它的语法定义如下:
‘timescalereference_time/precision
其中,reference_time是单位时间的度量,precision决定了仿真的推进延迟精度,同时也设置了仿真的推进步进单位。下面是timescale语句的使用范例:
‘timescale1ns/1ps//度量参考为1ns,精度为1ps
moduletestbench;
...
initialbegin
#5reset=1;//5个仿真时间延迟,相当于5×1ns=5ns的仿真时间
#10reset=0;
...
end
initialbegin
//display语句将在每一个仿真推进步进中执行,也就是1ps执行一次
$display(“%d,Reset=%b”,$time,reset);
end
endmodule
应该注意的是,如果仿真中使用了时间延迟值,那么仿真的精度应大于最小的延迟值。例如仿真中使用了9ps的仿真时间延迟,那么仿真的推进步进精度必须为1ps来保证9ps的延迟。
4.ReadingMemoryInitializationFiles
VerilogHDL提供了$readmemb和$readmemh命令来读取ASCII文件,用于初始化memory的内容。这两个语句可以用于初始化FPGA中由IPCore生成的存储器宏模块,例如RAM、ROM等。
下面是利用这个语句对Xilinx的实例(design_instance)进行初始化的例子。
$readmemb(“design.mif>”,design_instance);
其中,mif文件是Xilinx的CoreGenerator建立的对存储器进行初始化的文件。用户也可以自己编写这个文件的内容。
仿真验证 仿真测试文件 FPGA Testbench 相关文章:
- FPGA系统设计的仿真验证之: FPGA设计仿真验证的原理和方法(06-05)
- FPGA系统设计的仿真验证之: 功能仿真和时序仿真的区别和实现方法(06-05)
- 说说FPGA系统的仿真和测试(02-27)
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 基于FPGA的快速并行FFT及其在空间太阳望远镜图像锁定系统中的应用(06-21)