走进Prime Time系列 - PT的constraint - 02
文章目录
- pre-layout constranints
- Post-Layout constrain
- pre-layout&post-layout clock constrains区别
- clock source latency
- generated clocks
- keep clock clean
- PVT
本篇文章介绍的详细地介绍在PT中如何下达constrain。
pre-layout constranints
如上图所示,我们需要设置的是
1、时钟周期
2、set_clock_uncertainty 包括了skew和jilter等不确定因素,同意放在uncertainty中
3、set_clock_latency 指的是network delay,也就是时钟线net的延迟。
4、set_input_delay/set_output_delay 也就是数据data到达端口的延迟delay,以及数据输出后,在端口外的延迟delay。
5、set_false_path 指的是不用去分析的false path,比如异步时钟之间,我们不需要去分析。
如上图,也就是时钟3和时钟1之间的,以及时钟2和时钟4之间的path我们都不需要计算。
关于setup的算法如上图所示:
也就是数据必须要要求在clk的capture之前多少ns到达
关于hold的算法如上图所示:
也就是数据到达reg FF2之后,数据需要保持一段时间。
对于异步的clk 3和clk 4我们无法去分析,但是clk1 和clk 2是同步的倍频关系的时钟,我们是可以分析的。
Post-Layout constrain
可以看到在post-layout中,无需再去定义时钟,uncertainty之类的参数,只需要读取sdf,然后通过set_propagated_clock就可以定义时钟。
如上图所示,通过加了选项full_clock,也就是会把latency那一部分也会报告出来。
如下图所示,当加了full_clock之后,从clock的source到reg/CP ,也就是下面红框的部分,也会被报告出来,也就是0.42,即上上图中红色的部分的0.42标记
如下是报告date require time
pre-layout&post-layout clock constrains区别
可以看到,在post-layout中,因为有真实的绕线存在,所以使用set_progated_clock即可。
clock source latency
如下图所示,我们上面定义的只是network latency,但是在外部,比如机台,我们还有source latency,我们也需要设置出来,没法预估。
如下图所示,我们也可以通过report_timing
然后看出是post-layout还是pre-layout
generated clocks
对于CRG,时钟分频器,因为工具不会内部产生clock,它只会认为这是数据,然后去分析timing path。
所以需要告诉PT,这是内部的一个时钟波形。
值得注意的是如果source时钟信息、频率之类的发生改变,那么与之关联的internal clock也会自动改变。
如上图例子,通过update_timing
强制工具刷新1.5ns那一部分,所以最好是在generated clock之后update_timing
keep clock clean
clock gating
我们知道PT是去分析reg/D-->reg/Q
那现在我们要分析的是如下图所示,寄存器FF1/Q—》U1/A1
也就是说需要把U1当成一个寄存器来处理。
如下图所示,我们把Cgate当成一个reg1/Q数据输出,首先我们要求,数据需要在时钟至少0.5ns之前到来,因此建立setup时间,另外我们需要确保数据在时钟下降沿的时刻的hold时间为0.4ns,也就是在下降沿来了之后,数据仍然可以保持0.4ns。
分别对上升沿的setup要求,以及对下降沿的hold要求。
从而保证Cgate的输出是符合下图中的要求的。
如上图描述:
report_clock_gating_check
可以show出所有的clock gating check infomation
使用set_clock_gating_clock
来告诉PT工具,将ICG当成一条timing path去处理。
PVT
在得到sdf之后,然后根据PVT去跑timing
如下图所示,因为有两种不同的timing path,因此在计算的时候,为了保险起见,计算setup的时候,我就用最不利的arrive time以及最不利的require time,然后去计算,两者都是不利的,在这种情况下setup都可以满足,那么当然实际也可以满足。
CRP【clock reconvergence pessimism】
但是上述会出现一个问题,也就是说arrive time我用最差的,require time我也用最差的。但是对于上面的U1 作为common clock and data path
实际上我们计算了两次。
在我计算setup slack的时候,
那么data arrive time 我希望越迟越worst,因此,我选用0.84。
但是对于require time来说,我希望clock越快越worst,因此我选用0.64.
但是实际上,一个cell,不可能说同时取两个不同的值。因此这里需要把这个差值补充上来,这个值的我们称之为CRP【clock reconvergence pessimism】,也就是修复悲观。
set timing_remove_clock_reconvergence_pessimism true
report_timing
如上图所示:我们从report_timing中可以看到,data arrival time 中的clock network delay为1.4 (这个数值1.4是选用的最worst的值,0.8+0.6=1.4)
但是对于data require time来讲,我也会选用最worst的值,因此是1.16(0.64+0.52=1.16)
然后通过clock recovergence adjustment加回来。
走进Prime Time系列 - PT的constraint - 02相关推荐
- 走进Prime Time系列 - PT的Timing exception 03
文章目录 Using Timing Exception multicycle path 本篇文章,介绍的是timing exception Using Timing Exception 有一些path ...
- 走进Prime Time系列 - 走进PT - 01
文章目录 PT是什么 STA Basic Static Timing Analysis Flow timing report 由于项目中需要我去接手STA方面的知识,因此需要赶紧补一下Primetim ...
- 《走进git时代系列一》 你该怎么玩?
首先,这篇分享不是git命令操作大全,不是某代码托管服务的硬广, 只是希望激发仍然在使用中世纪时期版本管理系统的同学们,能够放弃你手里的SVN,转向更先进的思路. 所以,大家不会看到非常多的Comma ...
- 走进COM组件系列(一)
说明: COM组件的接口,都需实现IUnknown接口,实现其中的AddRef,Release,QueryInterface等方法. 每一个接口都拥有自己的唯一标识符,使得其通过这个标识符能够唯一的找 ...
- 走进COM组件系列(三)
前面介绍了,走进COM组件系列(二),在此基础上,我们构建参数在模块之间的传递. 其他内容请浏览COM+分类 首先修改idl文件,在接口方法中加入参数 interface IY : IUnknown ...
- 走进诺奖大师系列:科斯(Ronald H.Coase)
文章来源@管理学季刊 走进诺奖大师系列:科斯(Ronald H.Coase) 受伯烈特教授的邀请在这一系列讲座发表演说之后,我拜读了先前各篇演讲的内容,才发现讲演题目是"我成为经济学者的演化 ...
- 【381天】我爱刷题系列140(2018.02.21)
@(一只心中无码的程序员)专栏 叨叨两句 ~ SQL习题035 1 题目描述 film表 字段 说明 film_id 电影id title 电影名称 description 电影描述信息 CREATE ...
- 【372天】我爱刷题系列131(2018.02.12)
叨叨两句 ~ SQL习题026 1 本题的批量插入数据要求在一条语句内完成,以下有两种方法供参考: 方法一:利用VALUES(value1, value2, ...), (value1, value2 ...
- 【黑金ZYNQ7000系列原创视频教程】02.视频接口mdash;mdash;hdmi编码输出实验
黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36636&extra=page%3D1 爱奇艺地址: http: ...
最新文章
- 微信小程序页面之间数据传递
- 今天分享个用Python爬虫爬取Bilibili弹幕的小例子解析
- 从编程基础到系统设计,这份数据工程师面试宝典全都有 | 资源
- iOS --- DIY文件名批量修改
- android sd大小,android用户的SD卡相同容量是否完全一样的大小
- To B生意的私域流量,你应该知道的10件事儿
- 深入了解scanf() getchar()和gets()等函数之间的区别
- MongoDB的使用技巧(转)
- 用EL表达式显示客户端使用的浏览器
- Git工作笔记003---Git常用命令总结
- 解析mysqlbinlog日志_关于mysql-binlog日志解析框架
- TP-Link C2和C20i产品出现命令注入、DoS等多个漏洞 绿盟科技发布安全威胁通告
- 如何限制计算机游戏,如何禁止玩电脑游戏、屏蔽网络游戏方法
- pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
- 破解百词斩单词数据之旅
- 《REWORK》读记
- 第二届中国大数据安全高层论坛在贵阳举行
- AutoCAD VBA 通过选择集 删除图层上所有对象和图层
- Oracle中国CEO胡伯林:管理就是沟通
- 哪些云主机值得推荐?
热门文章
- 一夜爆火的《羊了个羊》,开发竟这么简单!
- 学计算机是否加速掉发,你的电脑是否经常发生卡顿?让程序员来教你几个提速妙招...
- material-design-icons-iconfont 图标引入
- nest 模拟器_如何使用Nest恒温器根据湿度为房屋降温
- Cty的Linux学习笔记(一)
- Cty的Linux学习笔记(十)
- css实现圆形渐变色边框
- ListView中插广告栏兼DoubleClick For Publishers (DFP) Banner Ads demo
- Android 下载库 TigerDownload Rxjava2,retrofit2
- [笔记]What is HDBaseT