systemverilog中输入输出系统任务和函数(一)——显示相关的任务


前言

在systemverilog中提供了许多输入输出的系统任务和函数,本文主要介绍以下这些显示相关的任务。

  • $display | $displayb | $displayh | $displayo
  • $write | $writeb | $writeh | $writeo
  • $strobe | $strobeb | $strobeh | $strobeo
  • $monitor | $monitorb | $monitorh | $monitoro | $monitoroff | $monitoron

一、显示相关的任务

1.1 $display | $displayb | $displayh | $displayo

$display 十进制显示。
$displayb 二进制显示。
$displayh 十六进制显示。
$displayo 八进制显示。

示例1:

module disp;
initial begin
$display("\\\t\\\n\"\123");
end
endmodule

仿真输出:

\ \
"S

示例2:

module disp;
logic [31:0] rval;
pulldown (pd);
initial begin
rval = 101;
$display("rval = %h hex %d decimal",rval,rval);
$display("rval = %o octal\nrval = %b bin",rval,rval);
$display("rval has %c ascii character value",rval);
$display("pd strength value is %v",pd);
$display("current scope is %m");
$display("%s is ascii value for 101",101);
$display("simulation time is %t", $time);
end
endmodule

仿真输出:

rval = 00000065 hex 101 decimal
rval = 00000000145 octal
rval = 00000000000000000000000001100101 bin
rval has e ascii character value
pd strength value is StX
current scope is disp
e is ascii value for 101
simulation time is 0

示例3:

module printval;
logic [11:0] r1;
initial begin
r1 = 10;
$display( "Printing with maximum size - :%d: :%h:", r1,r1 );
$display( "Printing with minimum size - :%0d: :%0h:", r1,r1 );
end
endmodule

仿真结果:

Printing with maximum size - : 10: :00a:
Printing with minimum size - :10: :a:

示例4:

Format Value     Displays
%d     32'd10    : 10:
%0d    32'd10    :10:
%h     32'd10    :0000000a:
%0h    32'd10    :a:
%3d    32'd5     : 5:
%3d    32'd100   :100:
%3d    32'd1234  :1234:
%3h    32'h5     :005:
%3h    32'h100   :100:
%3h    32'h1234  :1234:
%s     "abc"     :abc:
%3s    "a"       : a:
%3s    "abc"     :abc:
%3s    "abcdef"  :abcdef:

1.2 $write | $writeb | $writeh | $writeo

$write 十进制显示。
$writeb 二进制显示。
$writeh 十六进制显示。
$writeo 八进制显示。
$write和$display的用法一致。
$write和$display的区别是,$display后边会自动增加一个回车,而$write后边没有回车。

1.3 $strobe | $strobeb | $strobeh | $strobeo

$strobe 十进制显示。
$strobeb 二进制显示。
$strobeh 十六进制显示。
$strobeo 八进制显示。
$strobe和$display的用法一致。
$strobe和$display的区别是,当$strobe 被调用的时刻所有活动都完成了,才打印文本,这包括所有阻塞性和非阻塞性赋值的作用。
在写仿真结果时请尽量使用$strobe 少用$display 或$write ,这保证了选通的线网和寄存器被写入稳定的值。
示例:

initial
begin
a = 0;
$display(a);          // displays 0
$strobe(a);           // displays 1 ...
a = 1;                   // ... 因为这条语句
end

1.4 $monitor | $monitorb | $monitorh | $monitoro | $monitoroff | $monitoron

当启动一个带有一个或多个参数的$monitor任务时,仿真器则建立一个处理机制,使得每当参数列表中变量或表达式的值发生变化时,整个参数列表中变量或表达式的值都将输出显示。

示例:

$monitor($time,,"rxd=%b txd=%b",rxd,txd)

在多模块调试的情况下,许多模块中都调用了$monitor,因为任何时刻只能有一个$monitor起作用,因此需配合$monitoron与$monitoroff使用,把需要监视的模块用$monitoron打开,在监视完毕后及时用$monitoroff关闭,以便把$monitor 让给其他模块使用。$monitor与$display的不同处还在于$monitor往往在initial块中调用,只要不调用$monitoroff,$monitor便不间断地对所设定的信号进行监视。

1.5 $display | $strobe | $monitor区别

用$display()系统任务来显示当前变量的值。
用$strobe()系统任务来显示用非阻塞赋值的变量值。
用$monitor()监控和输出参数列表中的表达式或变量值。


总结

本文主要介绍systemverilog中,显示相关的任务。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值