静态时序分析(STA)中,除了传播延迟和转换时间,还有几个核心概念对于确保数字芯片设计的正确性和性能至关重要。理解这些概念能帮助你更全面地把握STA,从而设计出时序更稳健的电路。
| 概念名称 | 核心关注点 | 主要影响/作用 |
|---|---|---|
| 建立时间 (Setup Time) | 时钟事件前,数据必须稳定的最小时间 | 确保数据能被正确捕获,影响最大工作频率 |
| 保持时间 (Hold Time) | 时钟事件后,数据必须稳定的最小时间 | 防止新数据过早覆盖当前数据,确保采样稳定性 |
| 时钟偏斜 (Clock Skew) | 同一时钟信号到达不同时序元件的时间差 | 直接影响时序余量,可能引起建立或保持时间违例 |
| 时钟抖动 (Clock Jitter) | 时钟边沿与其理想位置的时间偏差 | 增加时序不确定性,影响高速设计的时序收敛 |
| 时序余量 (Slack) | 所需时间与到达时间之差(正表示满足,负表示违例) | 衡量时序是否满足的直接指标,指导优化方向 |
| 多周期路径 (Multicycle Path) | 需要超过一个时钟周期完成数据传输的路径 | 合理放松时序约束,避免对长路径的过约束优化 |
| 伪路径 (False Path) | 电路中实际不存在或无需时序检查的路径 | 减少不必要的时序分析和优化,提高工具效率 |
| 片上变异 (OCV) | 同一芯片内因工艺、电压、温度差异导致的延迟变化 | 使时序分析更悲观严谨,确保设计在极端条件下的可靠性 |
时序路径分类
STA的分析基础是时序路径(Timing Path)。根据起点和终点的不同,时序路径主要分为以下几类:
| 路径类型 | 起点 | 终点 | 分析重点 |
|---|---|---|---|
| 输入到寄存器路径 | 主输入端口 (Primary Input) | 时序单元的数据输入引脚 (DFF/D) | 验证信号从芯片端口进入后,能否在时钟有效前稳定 |
| 寄存器到寄存器路径 | 时序单元的输出引脚 (DFF/Q) | 时序单元的数据输入引脚 (DFF/D) | 分析同步逻辑间的延迟,通常决定系统最高工作频率 |
| 寄存器到输出路径 | 时序单元的输出引脚 (DFF/Q) | 主输出端口 (Primary Output) | 验证信号经过内部逻辑后,能否在规定时间内输出到引脚 |
| 输入到输出路径 | 主输入端口 (Primary Input) | 主输出端口 (Primary Output) | 分析纯组合逻辑路径的延迟 |
| 时钟路径 | 时钟源 (Clock Source) | 时序单元的时钟引脚 (DFF/CK) | 计算时钟延迟、偏斜,为建立和保持时间分析提供基础 |
建立时间与保持时间
这是STA中最基本且关键的两种时序检查,直接关系到触发器能否正确采样数据。
建立时间 (Setup Time):指在时钟信号有效边沿到来之前,输入数据必须保持稳定的最短时间。建立时间违例通常是因为数据路径延迟过长,无法在时钟捕获沿前准备好。
保持时间 (Hold Time):指在时钟信号有效边沿到来之后,输入数据必须继续维持稳定的最短时间。保持时间违例通常是因为数据路径延迟过短,新数据变化太快干扰了当前数据的捕获。
建立时间和保持时间共同定义了触发器数据输入端的稳定采样窗口。
时钟特性:偏斜与抖动
在非理想的现实世界中,时钟信号并不完美,其特性直接影响时序分析。
时钟偏斜 (Clock Skew):指同一个时钟信号到达芯片内部不同触发器时钟端的时间差异。偏斜可能由时钟路径上的缓冲器(Buffer)延迟和走线延迟差异引起。时钟偏斜会直接“吃掉”时序余量,过大的偏斜可能导致建立或保持时间违例。
时钟抖动 (Clock Jitter):指时钟边沿与其理想位置存在的随机时间偏差。抖动可以看作时钟周期的不稳定性,它会增加时序分析的不确定性。在STA中,抖动通常是时钟不确定性(Clock Uncertainty) 的一个组成部分。
时序余量:Slack
Slack是衡量时序是否满足要求的直接指标。它表示信号到达时间与要求时间的差值。
正Slack:表示时序满足要求,且还有多少富余时间。
负Slack:表示时序违例,设计必须修改以消除负Slack。
最差负Slack (WNS, Worst Negative Slack):所有时序路径中最严重的违例值,是关注的重点。
总负Slack (TNS, Total Negative Slack):所有违例路径的Slack之和,衡量时序违例的总体严重程度。
时序例外
时序例外(Timing Exceptions)用于告诉STA工具不要对某些路径进行默认的时序检查,或需要采用不同的检查方式。
多周期路径 (Multicycle Path):用于约束那些需要多个时钟周期才能稳定下来的数据路径。例如,一个复杂的算法单元可能需要3个周期完成计算,其输出到下游寄存器的路径就可以设置为多周期路径(例如set_multicycle_path 3 -setup)。这避免了工具对其进行不必要的单周期时序优化,节省资源。
伪路径 (False Path):用于标识那些物理存在但逻辑上不可能或无需关心其时序的路径。例如,跨时钟域的路径(在没有同步器的情况下,其时序由异步协议保证,而非同步时序)、测试逻辑的功能路径等。设置伪路径(set_false_path)可以避免工具在这些路径上浪费优化精力。
片上变异
片上变异(On-Chip Variation, OCV)是指在同一颗芯片上,由于制造工艺的微观起伏、局部电压差异以及温度分布不均等因素,导致不同位置的相同单元或互连线具有不同的延迟特性。OCV分析通过在STA中引入降额因子(Derating Factor),对单元延迟和线延迟进行加大(对于最大延迟分析) 或减小(对于最小延迟分析),从而在时序分析中考虑这种工艺波动带来的影响,使分析结果更悲观、更可靠。
多时钟域时序验证
现代SoC设计通常包含多个时钟域。验证这些不同时钟域之间接口的时序是一项复杂任务,关键在于定义时钟关系:
同步时钟:如果两个时钟同源且存在确定的整数倍频关系,则它们之间的路径可以进行时序分析。需要正确定义这些时钟的周期和相位关系。
异步时钟:如果两个时钟来源不同或没有确定的相位关系(例如来自两个不同的晶振),则它们之间的时序路径不能用传统的STA方法验证。对于异步时钟域,必须使用专门的同步器(如两级触发器) 来处理数据传递,而STA的作用是验证同步器本身的建立/保持时间是否满足。
总结与建议
静态时序分析是一个深度和广度都很可观的领域。这些关键概念相互关联,共同构成了芯片时序sign-off的基础。
对于深入探索,建议你:
动手实践:理论学习结合EDA工具(如Synopsys PrimeTime)的实际操作,通过查看时序报告来理解这些概念的具体体现。
阅读文档:仔细阅读Foundry提供的标准单元库(.lib)文档,理解其中对时序弧、建立/保持时间等参数的定义和建模方式。
研究算法:若感兴趣,可以进一步了解STA背后的算法,如图搜索算法用于路径分析,以及更先进的统计静态时序分析(SSTA) 如何应对工艺波动带来的挑战。
2877