如何正确计算Setup Slack与Hold Slack?求解算法及概念困惑
建立裕量(Setup Slack)与保持裕量(Hold Slack)的理解与计算
一、概念难掌握是正常的
时序分析中的建立/保持裕量是FPGA/ASIC设计里的核心难点之一,尤其是刚接触的开发者,因为它需要结合时钟行为、器件固有延迟、布线延迟多个维度理解,不是单纯的数学公式,觉得难完全正常。
二、核心概念本质
- 建立时间(Setup Time):目标寄存器的时钟沿到来前,数据必须提前稳定的最小时间,保证寄存器能正确采样到数据。
- 保持时间(Hold Time):目标寄存器的时钟沿到来后,数据必须继续稳定的最小时间,防止寄存器采样到错误数据。
- 裕量(Slack):实际满足的时间与要求的最小时间的差值,正数表示时序满足,负数表示存在时序违规。
三、正确计算方法(结合Intel Quartus定义)
1. 建立裕量(Setup Slack)
公式:Setup Slack = Data Required Time (Setup) - Data Arrival Time
拆解每个参数:
- Data Arrival Time(数据到达时间):从源寄存器的触发时钟沿开始,数据走到目标寄存器数据端的总时间:
源时钟沿时间 + Tco(源寄存器输出延迟,寄存器时钟触发到数据输出的延迟) + T_logic(组合逻辑延迟) + T_wire(路径布线延迟)
- Data Required Time (Setup)(建立要求时间):目标寄存器时钟沿到来前,数据必须到达的最晚时间:
目标时钟沿时间 - Tsu(目标寄存器建立时间) - Clock Skew(时钟偏斜,源时钟到目标时钟的延迟差,若源时钟晚到目标,偏斜为正,会减小需求时间)
2. 保持裕量(Hold Slack)
公式:Hold Slack = Data Arrival Time - Data Required Time (Hold)
拆解每个参数:
- Data Arrival Time(数据到达时间):同Setup计算中的数据到达时间(因为是同一条数据路径)
- Data Required Time (Hold)(保持要求时间):目标寄存器时钟沿到来后,数据必须保持稳定的最早时间:
目标时钟沿时间 + Th(目标寄存器保持时间) + Clock Skew(时钟偏斜,若源时钟晚到目标,偏斜为正,会增大需求时间)
四、计算结果不匹配的常见原因
- 忽略时钟偏斜(Clock Skew):实际设计中,源、目标寄存器的时钟到达时间不可能完全同步,这个差值会直接影响需求时间,手动计算容易遗漏。
- 器件参数取值错误:Tco、Tsu、Th这些参数是器件手册里的固有值,不同型号FPGA差异很大,手动计算如果用了近似值,会和工具结果不符。
- 未考虑时序约束:如果设计中设置了多周期路径、伪路径,或者跨时钟域约束,Quartus会根据约束调整分析逻辑,手动计算没考虑这些就会出错。
- 路径范围选错:工具分析的是具体的时序路径(比如从某寄存器到另一寄存器),手动计算如果选错了起点/终点,结果自然对不上。
内容的提问来源于stack exchange,提问作者King Fire
相关产品推荐
相关产品推荐

