来源| 杰瑞IC验证(ID:Jerry_IC) |原创作者| 老黄鸭
废话不多说,踏踏实实讲技术。
Timescale,想必大家都不会陌生,它在我们的工程项目中扮演了一个很重要的角色,我们的testbench或者rtl都要依赖于timescale来承载一些与时间相关的事情。
我们先来看看在工程里面我们是怎么使用timescale的。
一般来说,我们的每个testbench都有自己所定义的timescale,比如在tb_top的开头定义了`timescale 1ns/1ps
这代表什么呢?
首先,1ns表示的是我们时间的基本单位,有人要问了,这个基本单位指的是什么?
这里为了更清楚的说明,我们举个简单的例子:
上图的28行可以看到#5,这又是啥意思?
大家应该都很熟悉,也就是阻塞5个时间点。这个时间点也就是我们的ns,这个就是我们的基本单位(timeunit)。
然后我们再来看看第二个参数1ps,这个是时间精度(timeprecision),假如我们把刚刚的#5换成#5.001,这个语句会不会阻塞5.001ns呢?
答案想必大家都知道了,是的,会和我们预期的那样。
那#5.0001呢?
这个时候末尾的0.0001将会被忽略,因为1ns==1000ps,这个100fs已经小于1ps了,所以#5.0001四舍五入之后等同于#5。
黄鸭哥这里顺带提句,对于#5.001这种写法不是很推荐,这是verilog的写法,SystemVerilog里推荐写成#5.001ns,这样可读性会更好。
有人这个时候可能会想到timeunit和timeprecision间的关系了,黄鸭哥这里要说下,SystemVerilog上没有明确规定这俩之间的关系,只是强调了timeprecision必须小于等于timeunit。
这种写法对于编译器是非法的,会报error:
所以我们一定要注意:
timeunit一定要比timeprecision大 !
timeunit一定要比timeprecision大 !
timeunit一定要比timeprecision大 !
说了半天我们一直在解释timescale的基本用法,这个时候有人会说了,这些太简单了,我们都会,能不能来点干的,这个时候黄鸭哥会反问一句了:
你知道这个timescale的作用范围吗?
你知道关于`timescale与timeunit,timeprecision间的优先级关系吗?
你知道timescale的debug方法吗?
你知道timescale涉及的仿真加速的方法吗?
要是你们都知道的话那黄鸭哥恭喜你们,你们的工程经验还是很丰富的,你是个niubility的工程师。
如果你们还存在疑问,那可以多等几天,下周黄鸭哥告诉你timescale的高级领域。
黄鸭哥不是在偷懒,只是在整理文笔。
日积月累,进步从一点一滴开始,加油!!我们下期再见~
——The End——
往期回顾