tianfei1201

不一定是最完美的,但会是最细致的!My email:tianfei@ict.ac.cn

导航

setup time and hold time

Posted on 2012-12-17 18:51  tianfei1201  阅读(735)  评论(0)    收藏  举报

DC 概论之一 setup time 与 hold time
2010-06-16 08:34:41   来源:   评论:0 点击:1284

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在其中。
 


前面一篇讲了基本的建立时间和保持时间以及时序路径划分。在这篇开始之前,先介绍一下很经典而且会时常用到的用来讲解的一个电路图,如下。这篇文章的讲解也会给予这个电路图,讲解的时候我把电路图分割成需要的部分:)

 

既然我们知道了建立时间和保持时间的含义,这篇主要是根据工厂提供的标准单元库中时序器件的建立时间和保持时间来预估我们的约束对设计的影响,是否满足时序要求,简单点就是说,时序有没有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(上篇:http://bb2hh.blogbus.com/logs/20563101.html

在分析时间余量之前再介绍下时钟的latency。

 

Latency分为source lantency 和 一般的latency。

Source latency 指的是时钟源到时钟端口的延迟。

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。提前到来充为setup jitter,延迟到来充为 hold jitter。

 

DC中把skew和jitter合成一个uncertainty。用set_clock_uncertainty来设置。

下文中提到的skew指的是合体,即uncertainty。

Uncertainty分为setup和hold,顾名思义,如上图理解即可。

有了上篇的知识http://bb2hh.blogbus.com/logs/20756952.html,

下面开始正式分析时间余量slack。其实有了上面的知识,只要稍微说明下大家都会很明白。

在介绍slack之前,我们要先了解一下要求时间(required time)和达到时间(arrive time)的概念以及计算方法。

 

 

如果没有特殊说明,黑色clock代表没有影响因素的理想时钟,红色(粉色)clock代表收到latency影响的时钟。蓝色clock代表同时受到latency和skew(uncertainty)影响的时钟。

 

对于建立时间(setup time)的到达时间和要求时间。

 

在分析前,记住,建立时间是分析路径中的考虑到各种最不利因素的最大延迟,打个比方:

 

前面一级用尽最大程度向后推(最大的延迟),本级就近打力气向前顶(最大不确定因素)。

然后看中间有没有漏气(slack为负,时序违规)。

输入端口到时序器件的数据端口。

 

上图中

要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup

到达时间=T1+Tlantency+Tinput_delay+Tlogic2

时序器件的输出管脚到输出端口

 

上图中:

要求时间=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=到达时间-要求时间