目录

一.概念

二.建立时间余量(裕量)setup  slack

三.保持时间余量(裕量)hold  slack


一.  概念

建立时间:时钟上升沿到来之前数据保持稳定的时间

保持时间:时钟上升沿到来之后数据保持稳定的时间

Launch是启动沿,Latch是锁存沿。

可以认为建立时间的Launch与Latch相差1个时钟周期,保持时间的Launch与Latch相差0个时钟周期(对齐)。

二.  建立时间余量(裕量)setup  slack

其中的Tcycle是源时钟周期,Tclk1和Tclk2分别是时钟源到一级寄存器和二级寄存器的时钟网络延迟,Tco是数据在寄存器内部传输的延迟,Tdata是线路上组合逻辑的延迟,Tsu是建立时间大小,我们需要保证建立时间余量大于零。

  

普通的公式:其中Latch Edge设为Tcycle,Launch Edge 设为 0


                 setup  slack = DATA Required Time - DATA Arrival Time

                    =(Latch Edge+ Tclk2 - Tsu)- (Launch Edge+Tclk1+Tco+Tdata)

= (Tcycle + Tclk2 - Tsu)- (Tclk1+Tco+Tdata)


需要求得最小的setup slack,故有

                setup slack(min) = (Tcycle + Tclk2(min) - Tsu)- (Tclk1(max)+Tco+Tdata)

考虑到以及CPR(Clock Pessimsm Removal ),CPR是指在考虑clk1和clk2路径上有共同的common部分,那么有

 CPR = Tcommon(max)- Tcommon(min)

所以setup slack(min)公式中的Tclk2(min) - Tclk1(max)是不够精确的,还需要考虑到common是共有的,

              正确的数值       [Tclk2(min)-Tcommon(min)] - [Tclk1(max)-Tcommon(max)]

              我们计算的数值 Tclk2(min) - Tclk1(max)

二者相减正好  等于  CPR = Tcommon(max)- Tcommon(min),所以我们计算的结果还需要加上一个CPR的数值来补偿才是正确的建立时间余量。

再考虑时钟不确定性延迟clock uncertainly ,它会使得一个时钟周期不是一个完整的时钟周期,假设由于抖动会缩短一个周期的时间(比如10ns变成9ns)

有最后的公式


setup slack(min) = DATA Required Time - DATA Arrival Time

=[Tcycle -clock uncertainly time + Tclk2(min) - Tsu+ CPR]

                             - [Tclk1(max)+Tco+Tdata]


三.  保持时间余量(裕量)hold  slack

普通的公式:其中Latch Edge设为0,Launch Edge 设为 0


              hold slack = DATA Arrival Time - DATA Required Time

        = (Launch Edge+Tco+Tdata)-(Latch Edge+ Tclk2 - Tsu) 

                                 = (Tclk1+Tco+Tdata) -( Tclk2 + Th)


需要求得最小的hold slack,故有

                hold slack(min) = (Tclk1(min)+Tco+Tdata) -( Tclk2(max) + Th)

考虑到以及CPR(Clock Pessimsm Removal ),CPR是指在考虑clk1和clk2路径上有共同的common部分,那么有

        CPR = Tcommon(max)- Tcommon(min)

所以hold slack(min)公式中的Tclk1(min) - Tclk2(max)是不够精确的,还需要考虑到common是共有的,

              正确的数值       [Tclk1(min)-Tcommon(min)] - [Tclk2(max)-Tcommon(max)]

              我们计算的数值 Tclk1(min) - Tclk2(max)

二者相减正好  等于  CPR = Tcommon(max)- Tcommon(min),所以我们计算的结果还需要加上一个CPR的数值来补偿才是正确的建立时间余量。

再考虑时钟不确定性延迟clock uncertainly ,它会使得一个时钟周期不是一个完整的时钟周期,假设由于抖动会缩短一个周期的时间(比如10ns变成9ns)

有最后的公式


              hold slack(min)=DATA Arrival Time - DATA Required Time

                                        = [Tclk1(min)+Tco+Tdata]

            -  [Tclk2 (max)+ Th + clock uncertainly time-CPR]


所以建立时间和保持时间都需要一个CPR大小的补偿。


[1] 《FPGA时序约束与分析 吴厚航》

[2]  尤老师b站视频

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐