tag 标签: setup/hold

相关博文
  • 热度 16
    2013-8-31 18:01
    1243 次阅读|
    0 个评论
    版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及 本声明 http://www.blogbus.com/bb2hh-logs/20757249.html   注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong  以下根据资料和个人体会整理,如果错误,疑问欢迎请指正,讨论!! 有了上篇的知识http://www.blogbus.com/bb2hh-logs/20756952.html, 下面开始正式分析时间余量slack。其实有了上面的知识,只要稍微说明下大家都会很明白。 在介绍slack之前,我们要先了解一下要求时间(required time)和达到时间(arrive time)的概念以及计算方法。     如果没有特殊说明,黑色clock代表没有影响因素的理想时钟,红色(粉色)clock代表收到latency影响的时钟。蓝色clock代表同时受到latency和skew(uncertainty)影响的时钟。   对于建立时间(setup time)的到达时间和要求时间。   在分析前,记住,建立时间是分析路径中的考虑到各种最不利因素的最大延迟,打个比方: 前面一级用尽最大程度向后推(最大的延迟),本级就近打力气向前顶(最大不确定因素)。 然后看中间有没有漏气(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=到达时间-要求时间
  • 热度 19
    2013-8-31 18:00
    1350 次阅读|
    0 个评论
    版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及 本声明 http://www.blogbus.com/bb2hh-logs/20563101.html    注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong  以下根据资料和个人体会整理,如果错误,疑问欢迎请指正,讨论!! Dc 综合是基于路径,每个路径上都有 Cell 和 net ,所以基于路径的综合就是计算路径上的 delay 和 rc ( dc 是使用互连线模型进行估算)。   在了解 delay 和 rc 的计算时,我们要先了解一下一个 cell 对于 drive (前级)和 driven (后级)所用到的模型是什么。如下图,一个 buffer ,从前级看过来是一个 load ( capacitance,想获得这个 load ,可以通过 load_of buffer/a 获得) , 从后级看来是一个 drive ( resistance )。电路的的驱动能力是上一级的 1/R, 即电阻的倒数,驱动能力大,说明看过去的电阻小,也说明这个器件比较大(大器件有较大的驱动能力)。电路的负载能力是下一级的 load (即电容)总和,负载能力大,说明能驱动下级的期间就很多。 大器件是大电容,小电阻,而小器件是小电容,大电阻。理解这些,对于 dc 综合以及后端 apr 版图都有很好的操作。     对于 cell 的延迟, dc 是根据 input_transition 和 out_load 对应的查找表来计算的。 对于 net 的延迟, dc 是根据 wire_load_model 中的 fanout_length 得到互联线的 resistance , capacitance,结合上一级的out transition 的计算得到,而上以及的output transition是根据input transition和output load查表得到的。。 例如: 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 是基于路径分析的(怎么划分路径请参考另一篇:http://www.blogbus.com/bb2hh-logs/20463915.html),每个路径上有 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。可以直接理解成n fanout per load,更简单的理解为n net per pin:这个pin相当于n个net。一般库中输入pin的fanout_load为1,输出pin的fanout_load为0. 便于理解:max_fanout=max_net,fanout_load=nets per pin 例如将一个 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_fanout 5 , 将会忽略 set_driving_cell 中 cell 的 max_fanout 属性,而使用 set_max_fanout 属性   如果将一个 AND2 作为 design 的负载,那么这个输出端口上的 fanout_load 属性将会为 2,即如果连接这个输出端口,则相当于使用了2个net.dc 中一般的做法是 set_fanout_load *xxx]  ,来设置输出端口的 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 的影响,下面看一个例子:        由于时钟到每个触发器的互连线长短不一样,造成信号到达 clock pin 的时间也不一样,触发器也不会同时翻转。 Skew 的定义就是最长路径减去最短路径的值。   根据时钟域以及路径关系, skew 可以分为 global skew , local skew , interclock skew 。 Global skew 是指,同一时钟域,任意路径的最大 skew 。 Local skew 是指,同一时钟域,任意 2 个有逻辑关联关系的路径最大 skew 。 interClock skew 是指,不同时钟域之间路径的最大 skew            另外还有一个 useful skew 。本来打算在 setup time 和 hold time 中讲解。这里先大概说下 如下图:时钟周期为 10ns ,各时钟路径延迟如下:可以看到有一条路径的 slack 为 -1 ,说明这条路径违规。可以看到与这条路径相关的 skew 是 T3-T2=-1ns 。   下面我们利用 useful skew 向前面一个 slack 比较充裕的路径( slack=2ns )借点 time ,来修正现在这条路径。如下图:     经过 useful skew ,修正了原来的 violator 。 这就是 useful skew 的作用,可以向前,或者向后接 time 来修正 violato
  • 热度 13
    2013-8-31 17:58
    2489 次阅读|
    0 个评论
    转载,请注明作者出处,谢谢~,Author:pythonlong ic代码的综合过程可以说就是时序分析过程,dc会将设计打散成一个个路经,这些路经上有cell延迟和net延迟,然后dc会根据你加的约束,来映射库中符合这种延迟以及驱动的器件。从而达到综合的目的。dc的所有时序约束基础差不多就是setup time 和 hold time。 可以用下面的图片说明: 所谓setup time即建立时间,也就说数据在时钟到来之前保持稳定所需要的时间, hold time 即保持时间,也就是说在时钟到来之后数据需要保持稳定的时间。 在深入建立时间和保持时间之前。先了解下dc中的路经以及start point  ,end point。  所谓start point 就是:1. input port(顶层设计的输入端口) 2.clock pin of sequential cell(触发器的clock pin) 所谓的end point 就是:1 output port(顶层设计的输出端口) 3.data pin of  sequential cell(触发器的data pin) 了解 start point 和 end point,就可以方便的了解 dc是如何将设计打散成路经,一个设计中基本的路经分为4种,如下图: path1: input port to data pin of sequential cell path2: input port to output port path3: clock pin to data pin of next sequential cell path4:clock pin to output port 所有的设计也就这四种类型的路径。 另外一种就是带反馈的,也就是本身的clock pin to data pin  。   有了路径的概念之后,我们可以分析更复杂的setup time 和 hold time 。  dc中对于建立时间的分析是基于路径的最大延迟;而对于保持时间的分析是基于路径的最小延迟。 看下面一个例子:  这个是给定setup time 和hold time 的案例,要求算出最小时钟周期。同理也可以给你一个周期和setup time 和hold time,计算时间裕度。 我们假设时钟周期是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  对于setup time的slack:Tclk-Tlongest-Tsetup=20-11-1=8 对于hold time的slack : Tshortest-Thold=8-0.5=7.5 对于setup time 和 hold time 的slack的计算,可以体会下面的示意: 对照第一副示意图与此比较,建立时间看D2 ,保持时间看D1,因为同时把Tl和Ts放在一个图例中,看起来可能有些误解:)  有空会继续讨论setup time 和hold time,下次讨论将包括clock skew 和input delay,output delay在其中。