时序约束学习拓展(一):偏移和Slack

已知:(来自单刀)

Setup Slack = Data Required Time – Data Arrival Time,

即Setup Slack = (latch edge + Tclk2 - Tsu ) – (launch edge + Tclk1 + Tco +Tdata )

= (latch edge - launch edge) +(Tclk2 - Tclk1 )- (Tsu  + Tco +Tdata)

=  Tperiod  + Tskew - (Tsu  + Tco +Tdata)。

Hold Slack = Data Arrival Time - Data Required Time,

即Hold Slack = (latch edge + Tclk1 + Tco +Tdata)  - (latch edge + Tclk2 + Th)

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

= (Tco +Tdata - Th) - Tskew 。

根据上文有(1)和(2)两式:

  • 建立时间裕量:Setup Slack = Tperiod  + Tskew - (Tsu  + Tco +Tdata)----(1)
  • 保持时间裕量:Hold Slack = (Tco +Tdata - Th) - Tskew  ----(2)

根据上文有(1)和(2)两式:

  • 建立时间裕量:Setup Slack = Tperiod  + Tskew - (Tsu  + Tco +Tdata)----(1)
  • 保持时间裕量:Hold Slack = (Tco +Tdata - Th) - Tskew  ----(2)

其中,Tperiod 是时钟周期;Tskew 是寄存器之间的时钟偏差,产生的原因是时钟到达不同的寄存器的时钟端口有延迟;Tsu 与 Th分别是寄存器的建立时间要求和保持时间要求,这是寄存器的固有属性,只和FPGA的型号相关;Tco 是从寄存器的输入端口到输出端口所需要的延时时间,同样是寄存器的固有属性;Tdata是寄存器之间的组合逻辑和走线延迟等之和,这与具体设计有关,平时我们大多都是通过减少Tdata来使得时间裕量为正,以此实现设计的时序收敛。

Tskew实际上是一个可以被忽略掉的较小值(走了全局时钟树),所以把它去掉,再对 (1)和(2)两式做变形(Slack>0需被满足),然后有(3)和(4)两式 

  • Tperiod >(Tsu + Tco +Tdata)----(3)
  • (Tco +Tdata ) > Th ----(4)

(3)式子中的(Tsu  + Tco +Tdata)代表数据从源寄存器到目的寄存器所消耗的时间,

即(Tsu + Tco +Tdata)< Tperiod 表示数据从源寄存器的采样时刻传到目的寄存器的采样时刻,不能超过一个时钟周期。

如果数据传输超过一个时钟周期,那么就会导致目的寄存器器开始采样的时候,从源寄存器出发的数据还没有传过来。

对于(4)式可以两边同时加上Tsu  ,得到(5)式:

  • (Tco +Tdata + Tsu  ) > (Th + Tsu)   ----(5)

(5)式子中的(Tsu  + Tco +Tdata)代表数据从源寄存器到目的寄存器所消耗的时间,(Th + Tsu)是建立时间和保持时间之和,即寄存器的采样窗口时间

那么(Tsu + Tco +Tdata) > Th + Tsu表示数据从源寄存器的采样时刻传到目的寄存器的采样时刻,至少要大于寄存器的采样窗口。

假如数据传输时间不大于采样窗口,则意味着数据的传输是特别快的,有可能目的寄存器开始采样时,源寄存器的采样仍没有结束,如果这个时候输入端数据有变化,那么不仅源寄存器处于亚稳态,目的寄存器也将处于亚稳态!

所以,数据传输延时既不能太大以至于超过一个时钟周期,也不能太小以至于小于触发器采样窗口的宽度。

这就是静态时序分析的物理意义了。

时钟偏移和Slack

但实际上Tperiod来自于LATCH EDGE - LATCH EDGE;

如果他们的时钟相位存在偏斜,例如:右移了45°,那么LATCH EDGE - LATCH EDGE其实是9/8个Tperiod;

也就是额外多出了1/8个Period的建立时间余量。

 

posted @ 2024-04-15 16:57  NoNounknow  阅读(5)  评论(0编辑  收藏  举报