SystemVerilog中$timeformat的用法

news2024/10/7 12:23:50

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

【示例】

图片

【仿真结果】 

图片

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

图片

其中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是如何使用的。

【示例】 

图片

【仿真结果】 

图片

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

【示例】 

图片

【仿真结果】 

图片

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

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

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

【示例】 

图片

【仿真结果】 

图片

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/886700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【word密码】设置word只读模式

想要将word文档设置为只读模式,方法有很多,今天小奥超人介绍几个方法给大家。 方法一:文件属性 常见的、简单的设置方法,不用打开word文件,只需要右键选择文件,打开文件属性,勾选上【只读】选…

ROSE75 GAS DM蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值) 软件支持(驱动的详细使用帮助)一些常见问题解答(FAQ)首次使用步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功…

助力金融服务行业转型,NETCLOUD的全方位解决方案!

随着科技的飞速发展和数字化时代的到来,金融行业也面临着前所未有的变革和挑战。在这个信息爆炸的时代,数字化转型已经成为金融行业不可忽视的趋势。从传统的银行、保险到投资管理,无一不受到数字化浪潮的影响。那么,为什么金融行…

Android CameraX适配Android13的踩坑之路

AndroidCameraX适配Android13的踩坑之路 前言: 最近把AGP插件升级到8.1.0,新建项目的时候目标版本和编译版本都是33,发现之前的demo使用Camerax拍照和录像都失败了,于是查看了一下官网和各种资料,找到了Android13的适…

中远麒麟堡垒机 SQL注入漏洞复现

0x01 产品简介 中远麒麟依托自身强大的研发能力,丰富的行业经验,自主研发了新一代软硬件一体化统一安全运维平台一-iAudit 统一安全运维平台。该产品支持对企业运维人员在运维过程中进行统一身份认证、统一授权、统一审计、统一监控,消除了传统运维过程中…

十七、地物识别

描述了使用2D卷积神经网络图像识别的全过程。下载和安装标注工具,对图像进行标注,生成标注后的图像。然后对数据进行增强,划分训练集和测试集。最后通过神经网络建立分类模型,对现有图片进行分类应用。 1、Labelme工具 Labelme工具是语义分割标注工具,在地物类型或建…

《论文阅读14》FAST-LIO

一、论文 研究领域:激光雷达惯性测距框架论文:FAST-LIO: A Fast, Robust LiDAR-inertial Odometry Package by Tightly-Coupled Iterated Kalman Filter IEEE Robotics and Automation Letters, 2021 香港大学火星实验室 论文链接论文github 二、论文概…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——性质——第三节——真假推理

文章目录 第三节 性质—真假推理题—性质—两命题间的关系—①先找矛盾,后找包含—矛盾:“所有A都是B”矛盾“有的A不是B”;“所有A都不是B”矛盾“有的A是B”。—包含:“所有A都是B”→“有的A是B”;“所有A都不是B”…

【k8s】基于Prometheus监控Kubernetes集群安装部署

目录 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 二、部署kubernetes集群 三、部署Prometheus监控平台 四、部署Grafana服务 五、grafana web操作 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 IP地址 主机名 组件 192.168.100.131 k8s-ma…

信息与通信工程面试准备——数学知识|正态分布|中心极限定理

目录 正态分布 正态分布的参数 正态分布的第一个参数是均值 正态分布的第二个参数是标准差SD 所有正态分布的共同特征 标准正态分布:正态分布的特例 中心极限定理 理解定义 示例# 1 示例# 2 知道样本均值总是正态分布的实际含义是什么? 正态分…

Python发送QQ邮件

使用Python的smtplib可以发送QQ邮件,代码如下 #!/usr/bin/python3 import smtplib from email.mime.text import MIMEText from email.header import Headersender 111qq.com # 发送邮箱 receivers [222qq.com] # 接收邮箱 auth_code "abc" # 授权…

流媒体服务-传输延时(SEI插帧)

什么是延时 很多小伙伴认为,当推流端和拉流端显示的时间不一致,即为延时。 其实这种看法是比较片面的,不同的播放器,对同一路流进行测试,可能会得到不同的结果。 一般来说,延时为以下几个部分的累加组成 …

最近抖音很火的情侣飞行棋

最近抖音很火的情侣飞行棋 最近抖音很火的情侣飞行棋,这款情侣飞行棋提供了丰富的游戏玩法,可以为情侣、朋友或家人带来欢乐的游戏体验。扫码进行体验识别 无论是在家中,还是在聚会、旅行等场合,都可以轻松启动该网站&#xff0c…

为何千万别学网络安全专业(网络安全小白避坑的建议解析)

前言: 近年来,随着国家对网络安全的战略关注和新基建的持续投入,网络安全专业成为一个热门话题。然而,好专业不一定就能找到好工作,对于想从事网络安全专业的小白们,需要持谨慎态度,避免走一些…

案例:用户登录/注册

文章目录 技术框架说明登录案例1.需求分析2.环境准备2.1 前端页面2.2 创建数据表及对应的实体类2.3 导入mybatis坐标,MySQL坐标2.4 配置文件及接口 3. 用户名密码校验4. 前端配置5.Servlet编写 注册案例1.需求分析2.配置用户接口3. 测试添加用户4. 前端配置5. servl…

【概念理解】STM32中的sprintf()函数

sprintf()函数 这个函数在 stdio.h中;可以将格式化的数据写入到一个字符串缓冲区中。 int sprintf(char *str, const char *format, ...);str:指向字符数组的指针,即用于存储格式化后字符串的缓冲区。format:格式化字符串&#…

通过nvm切换nodejs版本

下载: 1.下载nvm地址: https://github.com/coreybutler/nvm-windows/releases 下载该安装包,下载后无需配置就可以使用,十分方便。 简单说明一些包: nvm - noinstall.zip : 这个是绿色免安装版本&#…

c++ std::shared_ptr的线程安全问题(race condition)

有 3 个 shared_ptr 对象 x、g、n; 两个工作线程: void main(){shared_ptr g(new Foo); // 线程之间共享的 shared_ptr shared_ptr x; // 线程 A 的局部变量 shared_ptr n(new Foo); // 线程 B 的局部变量std::thread([&]{x g; }).detach();std::thread([&…

分布式 - 消息队列Kafka:Kafka 消费者的消费位移

文章目录 01. Kafka 分区位移02. Kafka 消费位移03. kafka 消费位移的作用04. Kafka 消费位移的提交05. kafka 消费位移的存储位置06. Kafka 消费位移与消费者提交的位移07. kafka 消费位移的提交时机08. Kafka 维护消费状态跟踪的方法 01. Kafka 分区位移 对于Kafka中的分区而…

每日一题——移动零

移动零 题目链接 思路——双指针 如果可以开辟额外的空间,那这题十分好做。我们开辟和nums同样大小的空间,将遍历数组,将非零元素从头放置,将零从后往前放置,这样就可以将所有的零放到后面,同时保证非零元…