Verilog-HDL-如何编写TESTBENCH
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
08:292
主要内容
Verilog 对验证的支持
系统函数和系统任务
如何编写模块的TESTBENCH
08:293
系统任务和系统函数
是Verilog中预先定义好的,用于调试和编译预处理的任务或函数。
以$开头,用于控制和检测仿真模拟过程
主要有:
(1)用于获取仿真时间的系统函数
(2)支持文本输出(检测信号、显示信号)的系统任务
(3)用于文件输入、输出操作的系统任务
(4)用于暂停和退出仿真的系统任务
(5)用于产生随机数的系统任务
08:29
4获取当前仿真时间的系统函数
$time,$realtime,$stime:返回当前仿真时间。
$time返回一个64位的整数时间值,
$realtime返回的结果是实数时间值,是更为精确的仿真时间 $stime返回一个32位整数时间值。(对大于232的
时间,返回模232的值。使用它可以节省显示及打
印空间。)
这些函数的返回值使用调用模块中`timescale 定义的模块仿真时间尺度为单位
08:295
例
..\..\verilog_example\Dec2x4.v
..\..\verilog_example\Dec_Test.v # At time 0, input is 0,0,0, output is,xxxx # At time 4, input is 0,0,0, output is,1111# At time 10, input is 0,0,1, output is,1111# At time 13, input is 0,0,1, output is,0111# At time 20, input is 1,0,1, output is,0111# At time 23, input is 1,0,1, output is,0101# At time 26, input is 1,0,1, output is,1101# At time 30, input is 1,1,1, output is,1101# At time 33, input is 1,1,1, output is,1100# At time 36, input is 1,1,1, output is,1110# At time 40, input is 0,1,1, output is,1110# At time 44, input is 0,1,1, output is,1011# At time 50, input is 0,0,1, output is,1011
# At time 54, input is 0,0,1, output is,0111
08:296
Verilog 支持的文本输出的系统任务显示任务:用于仿真模拟期间显示信息。
$display
$write
$strobe
$monitor
08:297
$display
$display输出参数列表中信号的当前值。
语法:$display([“format_specifiers”,]
$display ($ time, “%b \t %h \t %d \t %o”, sig1, sig2, sig3, sig4);
$display ($ time, “%b \t”, sig1, “%h \t”, sig2, “% d \t”, sig3, “%o”, sig4); $display 支持二进制、八进制、十进制和十六进制。缺省基数为十进制。
$display (sig1, sig2, sig3, sig4);
$displayb (sig1, sig2, sig3, sig4);
$displayo (sig1, sig2, sig3, sig4);
$displayh (sig1, sig2, sig3, sig4);
显示格式符
08:299
显示格式符
如没有特定的参数格式说明,$display ,$write ,
缺省值格式为十进制。$displayb ,$writeb;//二进制
$displayo ,$writeo;//八进制
$displayh ,$writeh;//十六进制
例
$display(“signal1=%b,signal2=%h ”,signal1, signal2);$write(“signal1=%b,signal2=%h\n ”, signal1, signal2);
08:2910
$write
打印任务$write $write 与$display 相同,不同的是不会自动换行。$write($time, “%b \t %h \t %d \t %o\t/n ”,sig1, sig2, sig3, sig4);
$write 缺省为十进制。
$writeb
$writeo
$writeh
08:2911$strobe
选通任务$strobe
$strobe(/$strobeb /$strobeo /$strobeh)选通监视,提供一种显示数据的机制,在所有同一时间单元内赋值语句执行完毕后才执行。
定义使用时的参数定义与$display有相同的参数列表格式
不同的是:$display显示的变量值是执行到该语句时变量的值,而$strobe显示的是执行该语句的仿真时刻的所有语句执行完后的结果。(<=)
例..\verilog_example\strobe_use.v