时序约束学习拓展(一):偏移和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的建立时间余量。