Verilog-HDL-如何编写TESTBENCH

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 输出时会自动换行。

$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

相关文档
最新文档