0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SystemVerilog中的$timeformat是做什么的?

sanyue7758 来源:硅芯思见 2023-08-16 09:41 次阅读

在SystemVerilog中,输出信息显示时间时,经常会在输出信息格式中指定“%t”格式符,一般情况下“%t”输出的格式都是固定的,但是这样固定的输出显示的时间可能有时会让用户看起来感觉比较诧异,例如下面的示例。

【示例】

7a6b708a-3b80-11ee-9e74-dac502259ad0.png

仿真结果】

7a89797c-3b80-11ee-9e74-dac502259ad0.png

示例中,设置的timescale是“10ns/1ps”,在$monitor中将$realtime返回的时间通过格式符“%t”输出,但是此时显示的时间数值很大,并且没有单位,这可能会让用户不知所措,例如在sig为“11”时,此时显示的时间为12343,但是这个数字的单位是什么,$relatime本身返回的值并不是这里的12343,示例中显示的结果为什么与$realtime返回值不同呢,这是为什么呢?其实这主要是因为“%t”的输出格式受了任务$timeformat(注意是任务不是函数与!)的影响,虽然这里没有显式的调用$timeformat,但是其默认值还是会影响到“%t”显示的时间值,即“%t”默认显示的时间是按照当前module的timescale设置的精度作为单位的,并且默认情况下显式的时间后是没有时间单位字符串的,所以此时就可以理解为什么“%t”在sig为“11”时显示的时间是12343了,这是因为这个此时显示的数字的单位是1ps。其实在SystemVerilog中,通过$timeformat可以约束“%t”显示的时间格式,其中具体参数对应关系如下图。

7ab40d7c-3b80-11ee-9e74-dac502259ad0.png

其中units_number 是 0 到-15 之间的整数值,表示打印的时间值如下表:

Unit Number Time Unit Unit Number Time Unit
0 1 s -8 10 ns
-1 100 ms -9 1 ns
-2 10 ms -10 100 ps
-3 1 ms -11 10 ps
-4 100 us -12 1 ps
-5 10 us -13 100 fs
-6 1 us -14 10 fs
-7 100 ns -15 1 fs

precision_number 是在打印时间值时,小数点后保留的位数,其默认值为0。

suffix_string 是在时间值后面打印的后缀字符串,其默认值为空字符串。

MinFieldWidth 是时间值字符串与后缀字符串合起来的这部分字符串的最小长度,若这部分字符串不足这个长度,则在这部分字符串左侧补空格,直到总长度达到设置的值,如果总字符串比设置的值大,将按照字符串实际长度输出,其默认值为20。

下面我们通过一个示例进一步理解下$timeformat是如何使用的。

【示例】

7addaa88-3b80-11ee-9e74-dac502259ad0.png

【仿真结果】

7af8f978-3b80-11ee-9e74-dac502259ad0.png

示例中,通过$timeformat指定了“%t”输出时间的格式,“-9”表示要显示的时间是按照“1ns”为单位得到的,“3”表示显示的时间中小数部分的位数,“HaHaHa”为时间字符串之后的后缀字符串,这个字符串一般指定为时间的单位,最后一个参数“2”表示“%t”显示的整个字符串长度的最小值,因为此时的时间字符串和后缀字符串的长度大于设置的最小值,所以此时按照实际字符串长度显示,当然也可以把这个字符串最小长度的值设置的大于实际字符串长度,如下例。

【示例】

7b136f24-3b80-11ee-9e74-dac502259ad0.png

【仿真结果】

7b35e3f6-3b80-11ee-9e74-dac502259ad0.png

示例中,通过$timeformat设置了显示时间字符串的最小长度为13,仿真结果可以看出,实际字符串的长度没有13个字符串那么长,所以此时字符串按照左对齐,并在字符串左侧补空格直到字符船总长度达到$timeformat设置的字符串的最小长度要求为止。另一方面,$timeformat设置了显示时间保留小数点后的位数为2,所以时间显示的最终结果保留了2位小数,同时需要注意,此处进行两位小数保留时会进行四舍五入操作。

通过上述几个示例,如果我们期望“%t”显示的时间值与当前仿真时间一致,那么需要给$timeformat设置对应合适的参数或者在输出时间时在格式字符串中不要指定“%t”,而是直接将其位置空留出来,这样输出的数据将完全取决于用户使用的时间函数

最后,在一个模块中可以设置多个$timeformat,一个$timeformat生效后会持续到下一个$timeformat,如下例。

【示例】

7b4f7b9a-3b80-11ee-9e74-dac502259ad0.png

【仿真结果】

7b736d34-3b80-11ee-9e74-dac502259ad0.png

示例中,通过仿真结果可以看到第7行设置的$timeformat仅影响到了第8行“%t”的显示,并没有影响到第12行“%t”的显示,第7行设置的$timeformat在遇到第11行设置的$timeformat之后就退出了历史舞台,所以第12行“%t”显示的格式按照第11行设置的$timeformat显示了。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82998
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20135
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8160

原文标题:SystemVerilog中的$timeformat是干啥的

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问Linear Lab Tool具体是做什么的

    请问Linear Lab Tool具体是做什么的呢?
    发表于 01-05 12:52

    labview帧列表是做什么的,不明白?

    labview帧列表是做什么的,不明白?
    发表于 03-15 10:21

    请问培训生是做什么的

    技术员培训生工程师培训生这些职位是做什么的·····以后怎么发展······
    发表于 02-18 01:24

    请问IIO软件是做什么的

    IIO软件是做什么的?刚接触AD9361,SD卡的系统带的软件,可我看了半天,不知道具体该怎么设置波形,还有设置好的波形是输出波形,还是输入波形啊?
    发表于 08-03 06:58

    bootloader程序是用来做什么的?与startup程序有区别么?

    想请教一个问题,MCU的bootloader程序是做什么的?与在KEIL写的startup程序有区别么?另外ISP升级又与bootloader有什么关系?求大侠赐教
    发表于 01-08 10:55

    请问MiniFly提供的固件是为了做什么的

    萌新刚入门,对固件的了解还不是很深。之前玩开发板,没接触过固件,所以不明白除了烧写firmware主程序,bootload和.bin文件是为了做什么的?求求大神赐教
    发表于 07-26 01:42

    stm32的这些时钟都是做什么的

    请问一下stm32的这些时钟都是做什么的,有什么区别呢,什么时候改用哪个?SYSCLK,HCLK,PCLK,麻烦大家帮忙指点一下,谢谢!
    发表于 05-27 04:35

    Native是用来做什么的

    PDK的mos管类型的Native是用来做什么的
    发表于 01-18 06:46

    请教一下大神这个运放是做什么的

    请教一下大神这个运放是做什么的??
    发表于 03-15 11:30

    SOHO一族,SOHO一族是做什么的?

    SOHO一族,SOHO一族是做什么的?  随着中国加入世贸组织,互联网信息化高速发展带来的机遇,加之传统外贸企业的固疾逐步推生出一个
    发表于 03-22 10:08 4456次阅读

    台积电是做什么的_台积电跟富士康谁厉害

    本文主要介绍了台积电是做什么的、台积电发展历史和台积电股份构成。其次介绍了富士康的相关概念,最后说明了目前台积电富士康联发科已经成三大巨头。
    发表于 01-08 10:16 65.4w次阅读

    数据库工程师是做什么的

    每当我给别人介绍我的职位是数据库工程师的时候,别人都会用疑惑的眼睛看着我。总会抛出一个问题:数据库工程师是做什么的
    的头像 发表于 08-27 09:00 8986次阅读

    程序员到底是做什么的

    很多人问程序员是是做什么的?或者问IT是做什么的?对于非IT行业的人很难有时间慢慢解释清楚,下面我结合自己的理解谈一谈吧。
    的头像 发表于 02-12 16:17 9042次阅读

    什么是汽车芯片 汽车芯片是做什么的

    什么是汽车芯片?汽车芯片是做什么的?芯片是一种半导体元件,汽车芯片是控制汽车安全行驶的电子器件,汽车芯片主要分为功能芯片、功率半导体、传感器三大类,即微控单元,主要负责算力。
    的头像 发表于 12-16 11:52 1.3w次阅读

    ip地址是做什么的

    如果你现在正在看我的这篇文章,那说明你已经连接上了互联网。说到互联网,你一定听说 ip 地址这个概念,你知道 ip 地址是做什么的吗?与之而来的还有公网 ip ,私网 ip ,你知道有什么区别吗?
    的头像 发表于 09-16 10:03 1867次阅读