Systemverilog中时间单位以及相关系统函数

本文介绍了Systemverilog中与时间相关的系统函数,包括$time、$stime、$realtime和`timescale的使用。在仿真过程中,这些函数可能影响到日志打印的时间显示。$time和$stime返回时间单位的整数倍,$realtime返回浮点型时间值。`timescale用于设定时间单位和精度,而$printtimescale则用于查看当前模块的时间单位和精度设置。在遇到仿真日志时间不匹配的问题时,可以检查`timescale的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Systemverilog中有一些与时间相关的系统函数在TB打印log的时候会使用到,在打印log时间的时候,如果与我们预期的不一致,可以在这方面找原因。下面列出相关的系统函数
$time
$stime
$realtime
`timescale
$printtimescale

$time: 返回module 64bit 整数时间单位,这里的时间单位做一下说明,比如 `timescale 10ns/1ns , 时间单位就是10ns

`timescale 10ns/1ns
module  test;
     logic a;
     parameter p=1.55;
     initial begin
     #p    a=1;
     $display($time,"a is %b",a);
     #p    a=0;
     $display($reatime,"a is %b",a);
     end
endmodele
//最终的结果
2:  a is 1
3:  a is 0

这里第一次#p=1.55(1.55 X 10ns,实际是1.6 X10,有时间精度),取整2
这里第二次#p=1.55(3.2X 10ns), 取整3
所以$time返回的的是时间单位的整数倍(四舍五入取整)

$stime:返回的是32bit unsigned 整数,规则与上面的 $time一样

$realtime:返回的是real类型的单位时间,(注意时间精度即可)

`timescale 10ns/1ns
module  test;
     logic a;
     parameter p=1.55;
     initial begin
     #p    a=1;
     $display($reatime,"a is %b",a);
     #p    a=0;
     $display($reatime,"a is %b",a);
     end
endmodele
//最终的结果
1.6:  a is 1
3.2:  a is 0

`timescale:
$printtimescale: 这与时间单位 和时间精度相关(time unit time precision)

`timescale 10ns/1ns
module  test;
     logic a;
     parameter p=1.55;
     initial begin
     $printtimescale();
     #p    a=1;
     $display($reatime,"a is %b",a);
     #p    a=0;
     $display($reatime,"a is %b",a);
     end
endmodele
//结果
10ns/1ns
1.6:  a is 1
3.2:  a is 0

在实际的工程中,打印log与自己预期不一致的情况多与time unit ,time precision有关,可以使用$printtimescale来显示当前module的设置
$printtimescale(hierarchical_identifier)可以显示指定层次的time unit ,time precision
$printtimescale()显示当前scope的time unit ,time precision

别的系统函数timeunit timeprecision可以用来设置时间单位和时间精度

$timeformat [ ( units_number , precision_number , suffix_string , minimum_field_width ) ] ;这个函数用来控制%t的打印格式
units_number://时间数值 -9代表ns
precision_number://时间精度 3代表小数点后有3位的精度
suffix_string: //打印的时间单位
minimum_field_width://数值宽度

注:在SV中,从standard 标准准,timeunit 和timeprecision只能使用与moduel,program,package,interface等scope中,不能在class中使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值