前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IC验证之“Timescale”使用小谈(一)

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

作者头像
IC验证
发布2020-06-30 11:23:01
4.3K0
发布2020-06-30 11:23:01
举报
文章被收录于专栏:杰瑞IC验证

来源| 杰瑞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,这样可读性会更好。

有人这个时候可能会想到timeunittimeprecision间的关系了,黄鸭哥这里要说下,SystemVerilog上没有明确规定这俩之间的关系,只是强调了timeprecision必须小于等于timeunit

这种写法对于编译器是非法的,会报error:

所以我们一定要注意:

timeunit一定要比timeprecision大 !

timeunit一定要比timeprecision大 !

timeunit一定要比timeprecision大 !

说了半天我们一直在解释timescale的基本用法,这个时候有人会说了,这些太简单了,我们都会,能不能来点干的,这个时候黄鸭哥会反问一句了:

你知道这个timescale的作用范围吗?

你知道关于`timescale与timeunit,timeprecision间的优先级关系吗?

你知道timescale的debug方法吗?

你知道timescale涉及的仿真加速的方法吗?

要是你们都知道的话那黄鸭哥恭喜你们,你们的工程经验还是很丰富的,你是个niubility的工程师。

如果你们还存在疑问,那可以多等几天,下周黄鸭哥告诉你timescale的高级领域。

黄鸭哥不是在偷懒,只是在整理文笔。

日积月累,进步从一点一滴开始,加油!!我们下期再见~

——The End——

往期回顾

for循环+fork-join_none结构的坑,你有注意到吗?

$sformatf() / $sformat()函数妙用

$test$plusargs(),$value$plusargs()怎么用?有什么坑?

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档