首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >IC验证之“Timescale”使用小谈(二)

IC验证之“Timescale”使用小谈(二)

作者头像
IC验证
发布于 2020-06-30 06:20:05
发布于 2020-06-30 06:20:05
2.4K0
举报
文章被收录于专栏:杰瑞IC验证杰瑞IC验证

来源| 杰瑞IC验证(ID:Jerry_IC)

|原创作者| 老黄鸭

上期我们聊了timescale的简单用法,这一期我们一起再进阶一下~

1

timescale怎么打印?

有时候,我们需要知道我们的module,interface或者class中用到的timescale对应的单位和精度,这个时候我们怎么办呢?

有什么办法可以获取到这个信息吗?

有的小伙伴可能会想到说,我们可以加打印啊,比如在我们的环境中加入打印:

然后通过打印信息和波形来推断出时间单位和精度,看似可行,但是仔细推敲起来这种方法还是漏洞百出的,因为此时打印出来的时间对应的精度为global timeprecision,而不是local timeprecision !!(这个点后文中会说明)

那么到底怎么打印才比较好呢?

其实,很简单,SystemVerilog就给我们提供了一个内置函数:$printtimescale,此函数将会给我们打印出所在module、interface、program、package和class对应的timeunit和timeprecision,例如:

我们看看仿真的结果:

这个就是$printtimescale这个函数的输出格式。

上面的例子中,$printtimescale函数没有输入的参数?它支持输入参数吗?

其实是支持的,它的参数可以明确指定为module的例化名!!

我们这就来一起看看:

如上代码打出来的是什么结果呢?聪明的你肯定已经有了答案。

对,就是:

黄鸭哥给大家总结一下:

1、`timescale是个编译参数,编译时候起作用

2、在没有定义`timescale的module中,其timescale使用跟它最近的一个且编译顺序上排在前的module中的timescale。

3、如果编译顺序前的module也没有timescale,则使用编译命令输入的default timescale。default timescale就是指我们编译时输入的timescale的编译器命令选项

4、推荐使用SystemVerilog的系统函数$printtimescale来打印timescale信息。这个函数函数可以带参

2

再看timeprecision

前面我们提到一个名词,global timeprecision,这个是什么呢?我们先看一段代码:

大家根据上图想想我们对应的两个display和一个printtimescale都会输出什么样的值呢?

是1ns/1fs?还是1ps/1ps??

是不是有些迷茫和彷徨?

开始怀疑自己对于一个这么简单的时间精度难道都把握不准?

别怕,黄鸭哥慢慢给你剖析!

大家先看看上面的打印结果,自己先思考下原因:

上面这段代码就涉及到黄鸭哥刚才提到的global timeprecision,顾名思义,就是全局时间精度,它是在我们整个仿真里的一个统一的时间精度。

注意了!!!

这是个仿真时起作用的参数,它由我们所有定义的timeprecision里的最小的一个来决定!

跟global相对的就是local timeprecision,它是我们所在module或者文件的timeprecision,生命周期只到此module或者文件,此为编译参数,与仿真无关。

1、首先printtimescale对应的打印信息就是我们对应的`timescale 1ps/1ps,module tb_top的timeunit为1ps,local timeprecision为1ps 。

2、从上图可以看出我们的最小的参与仿真的timeprecision为module test头上对应的1fs,所以global timeprecision也就是1fs,global timepricision为仿真参数。从vcs的打印上我们也能看出对应的global timeprecison,Time:1000100000000fs,对应的仿真时间精度就是fs。

3、结合1和2,tb_top中的第22行display对应的5000就可以很好理解了,#5.0001 == #5ps(此处理解可参考黄鸭哥的timescale的第一期,相当于timeunit和local timeprecision的比例关系,简单的说local timeprecision管的是编译,global timerecision管的是运行,例如#5.0001是在编译时就决定了,tb_top中的第22行$display是在仿真时才决定),5ps == 5000fs,仿真运行到此处时就应该输出cur time is 5000。对于module DQ的第25行的输出也是和3一样的道理,黄鸭哥就不一一细说了。

看到这里小伙伴们不安的小情绪又稳定了下来吧,其实timescale也就那么一回事,它说白了很简单,但是有些细节可能平时工程中我们容易忽略,黄鸭哥希望你们看了这篇文章能更深入理解timescale。

——The End——

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杰瑞IC验证 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IC验证之“Timescale”使用小谈(一)
Timescale,想必大家都不会陌生,它在我们的工程项目中扮演了一个很重要的角色,我们的testbench或者rtl都要依赖于timescale来承载一些与时间相关的事情。
IC验证
2020/06/30
5K0
SystemVerilog中的Process(2)--- 进程的控制
Hello everybody,我们接着上期的Process(1)-产生进程的方式(点击跳转)继续讲解SystemVerilog中对于process的多种控制方式。
IC验证
2020/09/01
4K0
SystemVerilog中的Process(2)--- 进程的控制
关于 Verilog 的 TimeScale
最近做芯片的功耗分析,需要用 PTPX 读入门级仿真写出的 VCD 文件。门级仿真的速度非常慢,所以关注了一下和速度相关的 TimeScale 的东西。
icsoc
2020/07/06
2K0
verilog_移位寄存器_仿真(程序逐句解释)
  之前老是想着学的快点,就直接编译了程序就下载在开发板上跑,后来发现这样不行,因为如果程序有问题,验证和纠错的时间成本太高了(毕竟vivado跑一次花的时间很长),反过来学习仿真,下面是一点心得和体会。
全栈程序员站长
2022/09/13
9900
verilog_移位寄存器_仿真(程序逐句解释)
Verilog HDL仿真常用命令
$display是Verilog中最有用的任务之一,用于将指定信息(被引用的字符串、变量值或者表达式)以及结束符显示到标准输出设备上。其格式如下:
timerring
2023/02/16
9810
Verilog HDL仿真常用命令
自然二进制数与格雷码的相互转换(verilog代码|Testbench|仿真结果)
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:
Loudrs
2023/05/15
4K0
自然二进制数与格雷码的相互转换(verilog代码|Testbench|仿真结果)
SystemVerilog语言简介
SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型、结构、压缩和非压缩数组、 接口、断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。SystemVerilog由Accellera开发,它主要定位在芯片的实现和验证流程上,并为系统级的设计流程提供了强大的连接能力。下面我们从几个方面对SystemVerilog所作的增强进行简要的介绍,期望能够通过这个介绍使大家对SystemVerilog有一个概括性的了解。
FPGA开源工作室
2021/10/12
4.2K0
SystemVerilog语言简介
验证仿真提速系列--认识“时间”与平台速度定量分析
仿真时间(simulation time)
IC验证
2022/02/28
2.4K0
验证仿真提速系列--认识“时间”与平台速度定量分析
systemverilog之Automatic
Function或task的生命期仅见于Verilog语言。Verilog早期仅有静态生命期(static lifetime),无论是function还是task,用来描述硬件,无论调用多少次,同一个Task或者function都是分配一个地址。
数字IC小站
2020/07/01
3.4K0
systemverilog之Automatic
七种常见计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表等|verilog代码|Testbench|仿真结果)
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:
Loudrs
2023/05/22
6.1K0
七种常见计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表等|verilog代码|Testbench|仿真结果)
Ubuntu下Icarus的iverilog+gtkwave的FPGA波形仿真
iverilog+vvp+gtkwave相当于modelsim等波形仿真工具,iverilog+gtkwave完全免费,但是modelsim软件需要破解。
FPGA开源工作室
2019/10/29
2.6K0
Ubuntu下Icarus的iverilog+gtkwave的FPGA波形仿真
SystemVerilog中的Process(1)--- 产生进程的方式
Hello,everybody,本期由黄鸭哥给大家带来验证干货,猜猜这次会给你们带来什么干货呢。
IC验证
2020/07/28
1.9K0
SystemVerilog中的Process(1)--- 产生进程的方式
Vivado联合ModelSim
首先,在modelsim安装路径中新建一个名为vivado2017_4lib(根据自己的需要安装的modelsim和vivado版本自己确定)的文件夹
瓜大三哥
2020/05/09
1.3K0
Vivado联合ModelSim
SystemVerilog验证编写(1)
Testbench的常见组成模块如下,由复位、产生、发送、接收、计分板比对几个模块组成。
数字IC小站
2020/07/01
9200
适用于所有数字芯片工程师的SystemVerilog增强功能
诚然,SystemVerilog的主要目标是实现大型复杂设计的建模和验证。然而,SystemVerilog为Verilog提供了每个工程师都可以也应该利用的增强功能。
tech life
2024/05/09
4330
适用于所有数字芯片工程师的SystemVerilog增强功能
FPGA学习altera系列: 第六篇 二选一多路选择器的设计及仿真测试
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
1.4K0
FPGA学习altera系列: 第六篇 二选一多路选择器的设计及仿真测试
序列发生器(两类序列、三种设计方法和两种发生模式|verilog代码|Testbench|仿真结果)
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:
Loudrs
2023/05/12
4.3K0
序列发生器(两类序列、三种设计方法和两种发生模式|verilog代码|Testbench|仿真结果)
九种移位寄存器原理与设计(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR)
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:
Loudrs
2023/05/16
14.6K0
九种移位寄存器原理与设计(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR)
硬件电路仿真中的VCD格式以及pyvcd模块
之前尝试用CIRCT中的llhd-sim进行了一个简单电路的仿真,但是llhd-sim目前的输出是自定义格式,无法通过gtkwave这样的工具查看仿真结果。本文记录将该格式转换为gtkwave支持的vcd格式的过程。
hunterzju
2021/12/09
2.3K0
硬件电路仿真中的VCD格式以及pyvcd模块
vcs实用技巧
VCS是编译型verilog仿真器,VCS先将verilog/systemverilog文件转化为C文件,在linux下编译生成的可执行文./simv即可得到仿真结果。
数字芯片社区
2022/09/19
3K0
vcs实用技巧
推荐阅读
相关推荐
IC验证之“Timescale”使用小谈(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档