建立时间就是时钟触发事件来临之前,数据需要保持稳定的最小时间,以便数据能够被时钟正确的采样。
保持时间就是时钟触发事件来临之后,数据需要保持稳定的最小时间,以便数据能够被电路准确的传输。
可以通俗的理解为:时钟到来之前,数据需要提前准备好;时钟到来之后,数据还要稳定一段时间。建立时间和保持时间组成了数据稳定的窗口,如下图所示
建立时间约束条件
数据路径:Tcq + Tcomb + Tsu
时钟路径:Tclk + Tskew
数据路径deay:Tcq + Tcomb
下图是一个典型的触发器到触发器之间的数据传输示意图。其中 "Comb" 代表组合逻辑延迟,"Clock Skew" 表示时钟偏移,数据均在时钟上升沿触发。
时钟到来之前,数据需要提前准备好,才能被时钟正确采样,要求数据路径 (data path) 比时钟路径 (clock path)更快,即数据到达时间(data arrival time)小于数据要求时间(data required time)。则建立时间需要满足的表达式为:
Tcq + Tcomb + Tsu <= Tclk + Tskew (1)
各个时间参数说明如下:
- Tcq: 寄存器 clock 端到 Q 端的延迟;
- Tcomb: data path 中的组合逻辑延迟;
- Tsu: 建立时间;
- Tclk: 时钟周期;
- Tskew: 时钟偏移。
对上式进行变换,则理论上电路能够承载的最小时钟周期和最快时钟频率分别为:
最小时钟周期 = Tcq + Tcomb + Tsu - Tskew 最快时钟频率 = 1 / (Tcq + Tcomb + Tsu - Tskew)
保持时间约束条件
时钟到来之后,数据还要稳定一段时间,这就要求前一级的数据延迟(data delay time)不要大于触发器的保持时间,以免数据被冲刷掉。则保持时间需要满足的表达式为:
Tcq + Tcomb >= Thd + Tskew (2)
各个时间参数说明如下:
- Tcq: 寄存器 clock 端到 Q 端的延迟;
- Tcomb: data path 中的组合逻辑延迟;
- Thd: 保持时间;
- Tskew: 时钟偏移。
由式 (1) (2) 可以推导出时钟偏移、组合逻辑延迟及时钟周期的约束。
建议大家只需要记住这 2 个最基本的约束条件表达式,需要求取其他参数约束时,再进行推导,以免各种推导造成记忆混乱。
建立时间与保持时间时序图
一个关于建立时间和保持时间的复杂时序图如下所示。
其中,绿色部分表示建立时间的裕量(margin),蓝色部分表示保持时间的裕量。时间裕量,其实就是电路在满足时序约束的条件下,不等式 (1) 或 (2) 两边时间的差值。
建立时间裕量为:(时钟路径时间)-(数据路径时间) 保持时间裕量为:(数据延迟时间) - (保持时间 + 时钟偏移)
该图只是便于理解建立时间和保持时间约束条件的推导。如果这里会造成记忆混乱,建议不要深究(^_^)。