来源| 杰瑞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——