Verilog里timescale指令

简介

在verilog里反引号开始的语句都是编译指令,编译指令是用于指示编译器如何综合我们的程序,它不会被综合到硬件里,只是起到指示作用,timescale是用于仿真的编译指令,它只能用于testbench,也就是tb文件,它的主要作用是定义仿真环境中的时间精度。

单位

它有两个时间刻度单位分别是time_unittime_precision
time_unit
时间单位,任何与时间相关的语句都会使用该精度,例如时间延迟语句#1, unit定义为1ns,那么#1就代表1ns,如果定义为1ps,那么#1就代表1ps,如果定义为100ns,那么#1就代表100ns
time_precision
精度控制,用于控制仿真的时间精度,也就是最小时间精度,可以理解为最小步长时间刻度
下面举个例子:
unit是1ns, precision也是1ns,那么时序语句#1.23,由于精度是1ns,所以1.23ns会被精度转换为2nsprecision可以理解为时间单位的颗粒度,如果它是ps也就意味着可以精确到皮秒,一句话概括就是precision定义的是unit的精度
precision的单位不能大于unit (可以等于),因为它主要是定义unit精度如果它的单位大于unit就不正确了,因为精度不能大于原时间单位,否则就无法表示精度,仿真综合也会失败。
可以用钟表来进行简单比喻,例如钟表的单位是时,精度到分,那么在钟表上可以看到几小时几分,如果是秒的话那么可以看到几小时几分几秒,也就是时间刻度

Tips
一般情况下verilog限制precision是unit的1的10幂次

示例

100ns延迟

`timescale 1ns / 1ns

#100

12.70ns延迟

`timescale 1ns / 1ps

#12.70

12.50ns延迟

这里的精度被设置为了500ps,而500ps是0.5ns,所以步长精度最小是0.5ns,由于写成了12.70,这里步长为0.70ns,比0.50ns多了20ns,那么会按这20ns取整,而20ns不满足四舍五入条件,它不站50ns的一半,所以会被忽略掉,这里的12.70会被取舍为12.50ns

`timescale 1ns / 500ps

#12.70

取舍计算方法

可以使用下面的公式来计算你的延迟是不是会被取舍:
以12.70ns为例,首先将12.70转换为精度单位12.70ns=12700ps,例如精度是500ps:
12700/500=25.4,不是整数也就意味着精度无法表示就会被取舍,但如果是5ps的话12700/5=2540,整数可以表示,也就意味着不会被取舍

精度计算方法

与取舍类似,先将单位转换为对应精度单位,以为例1ns / 1ps
1ns转换为ps是1000ps
在用单位除去精度:
1000ps / 1ps = 1000ps
在计算1的倒数得到时间刻度:
1 / 1000ps = 0.001
由此可以得出最小步长可以为0.001,只要在精确到小数点后三位的任意时间单位都可以被表示。

注意事项

precision也关系到仿真的时间颗粒度,precision不是精度越高越好,与你的电路时序有关,例如在仿真I2C、UART这类低速总线一般可以设置大一点,因为这类低速总线不需要那么高的精度,精度越高意味着仿真时间越久颗粒越细仿真软件会进行多次迭代,例如单位是1ns,精度是1ps,也就意味着1ns里要进行1000次仿真采样。
这里的采样次数可以用取舍的计算公式计算,采样次数越多代表仿真迭代次数越多,但是可以查看的时间刻度越细,但是仿真时间会越高,所以精度与仿真时间成正比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值