Verilog编写Testbench详细教程【1】:常用系统函数

Verilog 的系统任务和系统函数主要用于仿真。本节介绍常用的系统任务和系统函数。这些系统任务和系统函数提供了各种功能,比如实时显示当前仿真时间($time)、显示信号的值($display$monitor)及控制模拟的执行过程暂停仿真($stop)、结束仿真($finish)等。

系统任务和系统函数有以下一些共同的特点:系统任务和系统函数一般以符号“$”开头,如$monitor$readmemh 等;

在使用不同的 Verilog 仿真工具(如 VCS、Verilog-XL、ModelSim 等)进行仿真时,这些系统任务和系统函数在使用方法上可能存在差异,应根据使用手册来使用;一般在 initial或 always 过程块中调用系统任务和系统函数;用户可以通过编程语言接口(PLI)将自己定义的系统任务和系统函数加到语言中,以进行仿真和调试。

下面介绍常用的系统任务和系统函数,多数仿真工具都支持这些任务和函数,且基本能够满足般的仿真测试需要。

1.$display 与 $write

$display$write 是两个系统任务,两者的功能相同,都用于显示模拟结果,其区别是$display 在输出结束后能白动换行,而$write 不能。

$dispaly$write的使用格式为

$dispaly("格式控制符",输出变量名列表);
$write("格式控制符",输出变量名列表);

比如

$display($time,,,"a=%h,b=%h,c=%h",a,b,c);

该语句定义了信号显示的格式,即以十六进制格式显示信号a,b,c的值,两个相邻的都好“,,”表示加入一个空格。

格式控制符及其说明如表所示:

格式控制符 说明
%h或%H 以十六进制形式显示
%d或%D 以十进制形式显示
%o或%O 以八进制形式显示
%b或%B 以二进制形式显示
%c或%C 以ASCII字符形式显示
%v或%V 显示net型数据的驱动强度
%m或%M 显示层次名
%s或%S 字符串形式输出
%t或%T 以当前的时间格式显示

也可用display显示字符串,比如

$display("I am great!\n");

该语句表示直接输出引号中的字符串,其中\n是转义字符,表示换行。Verilog定义的转义字符如表所示:

转义字符 说明
\n 换行
\t Tab键
\ 符号\
" 符号“
\ddd 八进制数ddd对应的ASCII字符
%% 符号%

2.$monitor 与 $strobe

$monitor$strobe$display$write 一样,也属于输出控制类的系统任务,$monitor$strobe 都提供了监控和输出参数列表中字符或变量的值的功能,其使用格式为:

$monitor("格式控制符",输出变量名列表);
$strobe("格式控制符",输出变量名列表);

此处的格式控制符、输出变量名列表与$display$write中定义的完全相同。

比如:

$monitor($timem,"a=%b,b=%h",a,b);

每次a或b信号的值发生变化,都会激活上面的语句,并显示当前仿真时间、二进制格式的a信号和十六进制格式的b信号。

可将$monitor 想象为一个持续监控器,一旦被调用,就相当于启动了一个实时监控器,如果输出变量名列表中的任何变量发生了变化,则系统将按照$monitor 语句中所规定的格式将结果输出一次。而$strobe 相当于选通监控器,$strobe 只有在模拟时间发生改变,并且所有的事件都已处理完毕后,才将结果输出。$strobe更多地用来显示用非阻塞方式赋值的变量的值。

比如

$monitor($time,,,"a=%d,b=%d,c=%d"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可知可知不可知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值