setup time 与 hold time.docx
- 文档编号:4011773
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:93
- 大小:12.18MB
setup time 与 hold time.docx
《setup time 与 hold time.docx》由会员分享,可在线阅读,更多相关《setup time 与 hold time.docx(93页珍藏版)》请在冰豆网上搜索。
setuptime与holdtime
SetupTime与HoldTime
版权声明:
转载时请以超链接形式标明文章原始出处和作者信息及本声明
第一章DC概论之一setuptime与holdtime
ic代码的综合过程可以说就是时序分析过程,dc会将设计打散成一个个路经,这些路经上有cell延迟和net延迟,然后dc会根据你加的约束,来映射库中符合这种延迟以及驱动的器件。
从而达到综合的目的。
dc的所有时序约束基础差不多就是setuptime和holdtime。
可以用下面的图片说明:
所谓setuptime即建立时间,也就说数据在时钟到来之前保持稳定所需要的时间,
holdtime即保持时间,也就是说在时钟到来之后数据需要保持稳定的时间。
在深入建立时间和保持时间之前。
先了解下dc中的路经以及startpoint ,endpoint。
所谓startpoint就是:
1.inputport(顶层设计的输入端口)
2.clockpinofsequentialcell(触发器的clockpin)
所谓的endpoint就是:
1outputport(顶层设计的输出端口)
3.datapinof sequentialcell(触发器的datapin)
了解startpoint和endpoint,就可以方便的了解dc是如何将设计打散成路经,一个设计中基本的路经分为4种,如下图:
∙path1:
inputporttodatapinofsequentialcell
path2:
inputporttooutputport
path3:
clockpintodatapinofnextsequentialcell
path4:
clockpintooutputport
所有的设计也就这四种类型的路径。
另外一种就是带反馈的,也就是本身的clockpintodatapin 。
有了路径的概念之后,我们可以分析更复杂的setuptime和holdtime。
dc中对于建立时间的分析是基于路径的最大延迟;而对于保持时间的分析是基于路径的最小延迟。
看下面一个例子:
这个是给定setuptime和holdtime的案例,要求算出最小时钟周期。
同理也可以给你一个周期和setuptime和holdtime,计算时间裕度。
我们假设时钟周期是20,每个触发器的cell延迟是1,触发器的建立时间是1,保持时间是0.5,分析下列图中的建立时间和保持时间的slack。
看到设计,首先要分析路径,找出最长和最短路径,因为dc的综合都是根据约束而得到最短和最长路径来进行器件选择的。
所以接下来将图中的所有路径标出。
因为没有前级(input_delay)和后级电路(output_delay),我们只分析图中给出的路径,如下图:
∙对于红色路径:
Td=Tcell+Td4+Td5+Td6=1+4+3+1=9
对于黄色路径:
Td=Tcell+Td4+Td5+Td6+Td8=1+4+3+1+2=11
对于粉色路径:
Td=Tcell+Td1+Td2+Td3=1+2+3+2=8
对于路色路径:
Td=Tcell+Td7+Td2+Td3=1+2+3+2=8
所以Tlongest=11,Tshortest=8
对于setuptime的slack:
Tclk-Tlongest-Tsetup=20-11-1=8
对于holdtime的slack:
Tshortest-Thold=8-0.5=7.5
对于setuptime和holdtime的slack的计算,可以体会下面的示意:
∙对照第一副示意图与此比较,建立时间看D2,保持时间看D1,因为同时把Tl和Ts放在一个图例中,看起来可能有些误解:
)
有空会继续讨论setuptime和holdtime,下次讨论将包括clockskew和inputdelay,outputdelay在其中。
第二章DC概论二之fanout与skew
∙Dc综合是基于路径,每个路径上都有Cell和net,所以基于路径的综合就是计算路径上的delay和rc(dc是使用互连线模型进行估算)。
在了解delay和rc的计算时,我们要先了解一下一个cell对于drive(前级)和driven(后级)所用到的模型是什么。
如下图,一个buffer,从前级看过来是一个load(capacitance,想获得这个load,可以通过load_ofbuffer/a获得),从后级看来是一个drive(resistance)。
电路的的驱动能力是上一级的1/R,即电阻的倒数,驱动能力大,说明看过去的电阻小,也说明这个器件比较大(大器件有较大的驱动能力)。
电路的负载能力是下一级的load(即电容)总和,负载能力大,说明能驱动下级的期间就很多。
大器件是大电容,小电阻,而小器件是小电容,大电阻。
理解这些,对于dc综合以及后端apr版图都有很好的操作。
∙对于cell的延迟,dc是根据input_transition和out_load对应的查找表来计算的。
对于net的延迟,dc是根据wire_load_model中的fanout_length得到互联线的resistance,capacitance,结合上一级的outtransition的计算得到,而上以及的outputtransition是根据inputtransition和outputload查表得到的。
。
例如:
Wire_load(small){
Resistance :
0.2;
Capacitance :
1.0;
Area :
0;
Slop :
1.0;
Fanout_length(1,0.022);
Fanout_length(2,0.046);
Fanout_length(3,0.070);
Fanout_length(4,0.095);
}
比如现在扇出是2,
∙根据fanout_length(2,0.046)可以知道这个互连线的长度是0.046,然后再根据capacitance,resistence可以得出这个互连线的电容为:
0.046x1.0,互连线电阻为:
0.046x0.02。
如果扇出是5,在查找表中没有找到fanout_length为5的項,互连线长度将会是=fanout_length(4,0.095)+(5-4)*slop=0.095+1*1.0=1.095
得出了rc就可以计算出信号线的延迟
实际的互联线如下:
∙无论如何,要记住的就是dc是基于路径分析的(怎么划分路径请参考另一篇:
cell延迟和net延迟,而cell延迟是根据input_transition和out_lod得出的,net延迟是根据fanout_length,resistance,capacitanc得出的。
驱动和电阻成反比,负载和电容成正比。
由上面可以知道fanout影响到load(capacitance),transition,delay。
了解了上面,我们来理解下dc中对design建模,所用到的一些跟fanout有关的参数。
Dc中的约束,其实就是给chip设计一个环境,比如驱动这个chip输入端口的cell,或者这个chip输出端口驱动了那些单元或者端口接入了哪些负载,以及这个芯片的工艺,电压,温度,等等。
。
。
对于一个cell来说,输出端口具有max_fanout属性,输入端口有fanout_load属性。
fanout_load是说连接这一个pin等价于多少个fanout。
可以直接理解成nfanoutperload,更简单的理解为nnetperpin:
这个pin相当于n个net。
一般库中输入pin的fanout_load为1,输出pin的fanout_load为0.
便于理解:
max_fanout=max_net,fanout_load=netsperpin
∙例如将一个AND2作为design的驱动cell(set_driving_cell),这样就把AND2的max_fanout属性加在了输入端口上(即用max_fanout约束了输入端口)。
如果一个AND2的输出端口max_fanout是5,输入端口fanout_load是2。
一个buffer输入端口的fanout_load是3。
那么这个AND2的输出端可以接2个AND2,或者可以接一个buffer,或者可以接一个buffer和一个AND2。
如上图所示,则会引起DC产生DRC错误。
因为输入端口的fanout_load=2XAND2+buffer=7,超过了AND2的max_fanout2.如果使用了系统提供的set_max_fanout5[all_inputs],将会忽略set_driving_cell中cell的max_fanout属性,而使用set_max_fanout属性
如果将一个AND2作为design的负载,那么这个输出端口上的fanout_load属性将会为2,即如果连接这个输出端口,则相当于使用了2个net.dc中一般的做法是set_fanout_load[expr[get_attributeslow/and2/afanout_load]*xxx][all_outputs],来设置输出端口的fanout_load属性,即设置了输出端口等效几根net。
这样dc就可以根据这些设置,选择优化端口处的器件,以及时序。
下面讲下fanout与delay,看如下一个例子:
∙到buffer的net延迟是2,buffer延迟是1,fanout为1时net延迟为3,每增加一个扇出,net延迟增加2.如果一个信号经过这个扇出网络后,那么延迟为:
2+1+(3+(8-1)×2)=20;
如果把扇出结构优化成如下形式:
∙那么信号经过这个网络后,延迟为:
2+1+2+1+(3+(4-1)×2)=15.
那么延迟减少了5。
接下来讲一下skew,既然知道了fanout对于delay的影响,下面看一个例子:
∙由于时钟到每个触发器的互连线长短不一样,造成信号到达clockpin的时间也不一样,触发器也不会同时翻转。
Skew的定义就是最长路径减去最短路径的值。
根据时钟域以及路径关系,skew可以分为globalskew,localskew,interclockskew。
Globalskew是指,同一时钟域,任意路径的最大skew。
Localskew是指,同一时钟域,任意2个有逻辑关联关系的路径最大skew。
interClockskew是指,不同时钟域之间路径的最大skew
∙另外还有一个usefulskew。
本来打算在setuptime和holdtime中讲解。
这里先大概说下
如下图:
时钟周期为10ns,各时钟路径延迟如下:
可以看到有一条路径的slack为-1,说明这条路径违规。
可以看到与这条路径相关的skew是T3-T2=-1ns。
下面我们利用usefulskew向前面一个slack比较充裕的路径(slack=2ns)借点time,来修正现在这条路径。
如下图:
∙经过usefulskew,修正了原来的violator。
这就是usefulskew的作用,可以向前,或者向后接time来修正violato
第三章DC概论三之setuptime与holdtime之二
前面一篇讲了基本的建立时间和保持时间以及时序路径划分。
在这篇开始之前,先介绍一下很经典而且会时常用到的用来讲解的一个电路图,如下。
这篇文章的讲解也会给予这个电路图,讲解的时候我把电路图分割成需要的部分:
)
∙既然我们知道了建立时间和保持时间的含义,这篇主要是根据工厂提供的标准单元库中时序器件的建立时间和保持时间来预估我们的约束对设计的影响,是否满足时序要求,简单点就是说,时序有没有violator。
set_input_delay:
input_delay是设置外部信号到达输入端口的时间,dc会用它来计算留内内部逻辑的空余时间是多少。
∙之所以让ClkA和Clk的时钟周期不一致,主要是用来说明上图中黄色部分的。
黄色部分的确认是很重要的。
这是DC用来确定时间余量(slack)的关键。
如上图所示,黄色部分已经确实是最小相位差。
那么根据input_delay时间以及库中触发器的setup建立时间,可以知道留给内部逻辑的延迟时间是红色部分Tmin-Tinput_delay-Tsetup。
综合过程中,dc会优化Logic2的时序,以使他达到时序要求。
同样set_output_delay是设置输出端口到数据采集处的延迟。
如下图:
DC会根他来计算留给内部逻辑的时间。
这里还是要强调一下不同频率的问题:
)
介绍完了input_delay和output_delay,以及skew
在分析时间余量之前再介绍下时钟的latency。
∙Latency分为sourcelantency和一般的latency。
Sourcelatency指的是时钟源到时钟端口的延迟。
Latency指的是时钟端口到内部时序器件的时钟管脚的延迟。
一般只考虑latency即可。
再看下latency对于内部逻辑的影响.下图是不考虑latency的情况:
∙内部逻辑延迟的限度为T2-T1-Tinput_delay-Tsetup。
当考虑了latency的时候。
D1上的clock会变成时序图中的红色部分
∙那么留给内部逻辑的最大延迟为:
T2’(T2+Tlatency)-T1-Tinput_delay-Tsetup。
会发现留给内部逻辑的延迟会变大,那么会给DC更大的空间来综合。
同样如果ClakA上面如果也设置了Latency在分析slack的时候也要算进去。
顺便介绍一下时钟的jitter,如下图
∙正常的时钟到来时蓝色的时序图。
但是由于无法预知的因素,时钟可能提前(粉色)或者延迟(红色)到来,这就是jitter。
提前到来充为setupjitter,延迟到来充为holdjitter。
DC中把skew和jitter合成一个uncertainty。
用set_clock_uncertainty来设置。
下文中提到的skew指的是合体,即uncertainty。
Uncertainty分为setup和hold,顾名思义,如上图理解即可。
第四章DC概论四之setuptime与holdtime之三
∙下面开始正式分析时间余量slack。
其实有了上面的知识,只要稍微说明下大家都会很明白。
在介绍slack之前,我们要先了解一下要求时间(requiredtime)和达到时间(arrivetime)的概念以及计算方法。
如果没有特殊说明,黑色clock代表没有影响因素的理想时钟,红色(粉色)clock代表收到latency影响的时钟。
蓝色clock代表同时受到latency和skew(uncertainty)影响的时钟。
对于建立时间(setuptime)的到达时间和要求时间。
在分析前,记住,建立时间是分析路径中的考虑到各种最不利因素的最大延迟,打个比方:
∙前面一级用尽最大程度向后推(最大的延迟),本级就近打力气向前顶(最大不确定因素)。
然后看中间有没有漏气(slack为负,时序违规)。
1, 输入端口到时序器件的数据端口。
∙上图中
要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup
到达时间=T1+Tlantency+Tinput_delay+Tlogic2
2, 时序器件的输出管脚到输出端口
∙上图中:
要求时间=T2+Tlatency-Toutput_delay-Tuncertainty_setup
到达时间=T1+Tlatency+Tcell+Tlogic5
3.时序器件到时序器件
∙上图:
要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup
到达时间=T1+Tlatency+Tcell+Tlogic
4,输入端口到输出端口
∙如上图:
要求时间=T2+Tlatency-Tuncertainty_setup-Toutput_delay
到达时间=T1+Tlatency+Tinput_delay+Tlogic
我们再来看下保持时间,保持时间的到达时间和建立时间的到达时间是一样的。
只是保持时间的要求时间不一样而已.
保持时间类似于龟兔赛跑:
∙系统要求时间就是尽可能的向后,而线上信号延迟时间还要比要求时间向后,如果延迟时间追上了,就没问题,追不上问题就有了。
说明:
红色和粉色表示受latency影响,蓝色表示受uncertainty影响。
1.输入端口到时序器件的数据端口。
∙到达时间:
Tarrive=T1+Tlatency+Tinput_delay+Tlogic
要求时间:
Trequire=T2+Tlatency+Tuncertainty_hold+Thold
2.时序器件的输出管脚到输出端口
∙到达时间:
Ta=T1+Tlatency+Tcell+Tlogic
要求时间:
Tr=T2+Tlatency+Tuncertainty_hold+Thold-Toutput_delay
3时序器件到时序器件
∙到达时间:
Ta=T1+Tlatency+Tcell+Tlogic
要求时间:
Tr=T2+Tlatency+Tuncertainty_hold+Thold
4,输入端口到输出端口
∙到达时间:
Ta=T1+Tlatency+Tinput_delay+Tlogic
要求时间:
Tr=T2+Tlatency+Tuncertainty_hold+Thold-Toutput_delay
Slack计算:
对于建立时间:
Slack=要求时间-到达时间
对于保持时间
Slack=到达时间-要求时间
第五章dc概论之多周期路径multicycle_path续1
在设置multicycle_path的过程中,一定要注意到底startclock是多周期,还是endclock是多周期。
这关系到时序分析。
默认情况下,set_multicycle_path对建立时间的分析是设置endclock为多周期,对保持时间分析师设置startclock为多周期。
即:
set_multicycle_path-setup2-froma-tob
等价于
set_multicycle_path-setup2-end-froma-tob
set_multicycle_path-hold1-froma-tob
等价于
set_multicycle_path-hold1-start-froma-tob
了解multicycle的,应该都知道设置setup的周期是X,那么设置hold的周期为X-1。
下面的设置我们也会按照这样默认的规矩来设置。
下面再分析一次快时钟采集慢时钟:
假设我们已经知道3*clk1>delay>2*clk1
那么,如果我们不仔细思索,大概会写成如下:
set_multicycle_path-setup3-fromclk1-toclk2
set_multicycle_path-hold2-fromclk1-toclk2
下面我们扩展成默认写法:
set_multicycle_path-setup3-end-fromclk1-toclk2
set_multicycle_path-hold2-start-fromclk1-toclk2
那么我们看下时序分析:
粉色setup检查,红色hold检查
这里我们会发现,和我们预计的不太一样,问题就出在工具的默认设置上。
这里我们不看setup的check,这个和我们想要检查的一样。
我们看下hold的设置:
set_multicycle_path-hold2-start-fromclk1-toclk2
我们来了解下start,这个start说明startclock是多周期的。
dc默认a点作为hold的check点。
这里又有默认的start,所以就产生上图的holdcheck。
如何才能让dc做我们想要的check呢?
改成下面形式:
set_multicycle_path-setup3-end-fromclk1-toclk2
set_multicycle_path-hold2-end-fromclk1-toclk2
分析结果:
B点setup检查,A点hold检查
我们再看一下慢采快。
同样,假设我们已经知道3*clk1>delay>2*clk1
那么,同样,如果我们不仔细思索,大概会写成如下:
set_multicycle_path-setup3-fromclk1-toclk2
set_multicycle_path-hold2-fromclk1-toclk2
扩展成默认写法:
set_multicycle_path-setup3-end-fromclk1-toclk2
set_multicycle_path-hold2-start-fromclk1-toclk2
那么我们看下时序分析:
B点setup检查,A点hold检查
分析和快采慢一样。
修改成:
set_multicycle_path-setup3-start-fromclk1-toclk2
set_multicycle_path-hold2-start-fromclk1-toclk2
分析如下:
B点setup检查,A点hold检查
第六章DC概论六之multicycle_path
∙在讲多周期路径之前,先看下单频率
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- setup time hold