weiqi7777

时序分析之建立时间学习(一)

0
阅读(3504)

         看了摩尔吧的关于时序分析的视频,对时序分析有了真正的理解。。。之前都不知道怎么分析时序分析,看完这视频后,有了大彻大悟的感觉。

      

         时序分析的关键是保持时间和建立时间。

         链接:

                        http://www.moore8.com/courses/160#/course/160/lecture/1615

     

        对于建立时间:

       建立时间是指在时钟上升沿,数据在寄存器输入端数据要保持稳定的最小时间。即在时钟上升沿到达之前,数据至少要稳定多长时间。如果数据稳定的时间不满足建立时间,那么打入寄存器的数据就可能不正确,出现亚稳态现象。

以下图为例分析:

                                     clip_image001

      在clk1时刻,data1数据打入FF1,通过寄存器本身延迟Tcell和后面的组合逻辑的最大延时,成为data2数据。在clk2时刻,data2数据打入FF2,但是data2数据必须要在clk2时刻之前至少稳定Tsetup时间,这样才不会使打入的输入不正确,使得FF2输出为亚稳态。而clk1到clk2的时间为一个时钟周期,即Tperiod

      所以有上面的不等式:

                         Tsetup <= Tperiod – Tcell – Tlogic(longest)

      这里为什么要用Tlogic(longest),因为这个组合逻辑的时间不是固定的,会根据输入的不同而延时不同,但是延时会介于最小延时和最大延时之间。但是在分析建立时间时,必须要用组合逻辑的最大延时,这样才会保证分析的建立时间是正确的。因为最大延时是电路发生最坏情况下,所会产生的延时。如果最坏情况下,建立时间满足,那整个电路不管在什么情况下,建立时间都会满足。

       有了建立时间Tsetup的公式,但是怎么衡量我们的电路建立时间是否满足了。这个时候,就有一个参数来衡量,就是建立时间裕度。

       就是图中的第二个公式。

                   Slack = Tperiod – Tlogic(longest) – Tcell – Tsetup

       其实就是将第一个不等式的左边移到右边。如果slack大于0,说明建立时间是满足的,否则建立时间不满足。

      

        以上分析,是认为时钟是没有偏移的。即到达FF1和FF2的时钟是同一时刻的。但是实际电路中,达到FF1和FF2的时钟是不同时的,即存在时钟延时。

如下图:

                              clip_image002

         到达FF2的时钟要比到达FF1的时钟要延迟一个latency。这样分析,就与上面有点不一样的。可以这样考虑,因为clk2比clk1延迟一个latency,那就可以理解clk1到clk2时间比原来的Tperiod多了一个latency。所以公式就变为

                          Tsetup <= Tperiod + Tlatency – Tcell –Tlogic(longest)

         即时钟延迟对建立时间其实是有改善的。因为增加了Tlatency的时间。

         这时,那么建立时间裕度的公式就变为了

                           Slack = Tperiod + Tlatency – Tcell – Tlogic(longest)

         如果为正的,说明建立时间时满足的,否则是不满足的。

        

         其实,时钟延迟不一定是正的,也可能是负的。即clk2时钟比clk1时钟先达到。这种情况下,就用uncertainty来表示时钟的偏移。即uncertainty可能是正的,也可能是负的。不过分析的时候,是分析最坏的情况,即uncertainty为负的情况。因为一旦最坏情况下,建立时间是满足的话,那么不管什么情况下,那电路的建立时间是满足的。

                          clip_image003             

如上图所示:

            此时认为的Tuncertanity是负值。那就可以这么认为,clk1时钟到clk2时钟延迟一个Tuncertanity,那就可以理解clk1时钟到clk2时钟比原来的Tperiod少了一个Tuncertanity的时间。

            那此时建立时间的公式就是:

                          Tsetup <= Tperiod – Tuncertainty – Tcell – Tlogic(longest)

            可以看出,负的时钟延迟对建立时间是有削弱的,因为减少了Tuncertainty的时间。

            这时,那么建立时间裕度的公式就变为了

                          Slack = Tperiod – Tuncertainty– Tcell – Tlogic(longest)

            如果为正的,说明建立时间时满足的,否则是不满足的。

           

            以上分析都是分析的是寄存器到寄存器,但是在输入端的时候,只有一个寄存器,此时的建立时间应该怎么分析了。

                                                   clip_image004

              如上图,只有一个寄存器。

              和之前分析的方法是一样的。只不过之前分析的Tcell,寄存器的输出延时换成了Tinput_delay而已。分析方法是一样。

              结果就是上面两个公式了。。

          

              了解了,建立时间,接下来就知道怎么去进行时序约束了。