静态时序分析 STA 入门:不仿真,怎么把亿万条路径全算一遍
更新时间:2026-09-05。本文是「集成电路大类 · 芯片设计」入门层(beginner)第十六篇新正文。时序为什么不满足 讲了 setup/hold 和关键路径的直觉,但留了个问题:芯片里有亿万条时序路径,怎么保证每一条都来得及?靠仿真加激励是覆盖不全的。答案是 STA(Static Timing Analysis,静态时序分析),工具如 PrimeTime、Tempus。它是时序签核(sign-off)的标配。
本文要回答的问题
- 为什么不能靠仿真把时序问题都找出来?
- STA「不仿真」凭什么能检查所有路径?它怎么算?
- 「到达时间」「需求时间」「slack」是什么,怎么判读?
- PVT corner(工艺/电压/温度)和 STA 有什么关系?
一、为什么仿真管不了时序
仿真(见 仿真是什么)需要施加输入激励,电路里没被激励激活的路径根本不会被触发。要想靠仿真覆盖亿万条路径、且让每条都在最坏情况下被触发,几乎不可能。而且门级时序仿真极慢。
STA 换了个思路:它不施加任何激励、不管逻辑功能,而是纯粹从「拓扑结构 + 延迟」出发,把所有可能的时序路径都静态地算一遍。 因为不依赖输入向量,它能穷举全部路径,且速度快得多——这正是签核要的「无一遗漏」。
二、STA 怎么算:时序图 + 累加延迟
STA 工具先把电路看成一张时序图:节点是引脚,边是「经过一个门」或「走过一根线」,每条边带上延迟。然后从「启动触发器」出发,沿组合逻辑把延迟逐级累加,得到数据到达终点的到达时间(arrival time);再根据时钟周期和触发器 setup/hold 算出需求时间(required time)。两者一比就是 slack:
- setup slack =(时钟周期 − setup 要求)− 数据到达时间。≥0 表示数据在下一沿之前算稳了;<0 是建立违例(路径太慢)。
- hold slack = 数据最早到达时间 − hold 要求。≥0 表示数据不会快到冲掉同一沿的旧值;<0 是保持违例(见 时序为什么不满足,hold 与频率无关、必须修)。
工具把所有路径按 slack 排序,最差的那条就是关键路径,工程师集中火力修它。
三、STA 检查四类时序路径
不只是「触发器到触发器」,STA 覆盖芯片里所有起止组合:
| 路径类型 | 起点 → 终点 | 说明 |
|---|---|---|
| 寄存器→寄存器 | 触发器 Q → 触发器 D | 最常见、数量最大,setup/hold 主战场 |
| 输入→寄存器 | 芯片输入端口 → 触发器 D | 受外部输入延迟约束 |
| 寄存器→输出 | 触发器 Q → 芯片输出端口 | 受外部输出延迟约束 |
| 输入→输出 | 输入端口 → 输出端口(纯组合穿过芯片) | 也要在周期内穿过 |
这些约束(时钟频率、输入/输出延迟、false path、多周期路径等)都写在 SDC 约束文件里,STA 据此计算。
四、PVT 角:在最坏情况下也要过
门延迟不是固定值,它随**工艺(Process)、电压(Voltage)、温度(Temperature)**变化,合称 PVT corner:
- 慢角(slow corner):工艺慢、电压低、温度高 → 门最慢,setup 最容易违例,用它签 setup;
- 快角(fast corner):工艺快、电压高、温度低 → 门最快,数据冲得最猛,hold 最容易违例,用它签 hold。
所以签核要在多个 corner、多种工作模式下都跑 STA(多角多模 MMMC),保证芯片在「最坏的慢」和「最坏的快」两端都不出错。这也是为什么 布局布线 后要用提取出的真实 RC 延迟反复跑 STA 收敛。
五、STA 和仿真怎么分工
- STA:管「时序/性能」——每条路径来不来得及,穷举、快速、不验功能;
- 功能仿真/形式验证:管「逻辑对不对」——数据算得对不对,但不管快慢;
- 两者互补:功能对但时序不过,芯片在高频下照样出错;时序过但功能错,结果也不对。流片前二者都要绿(见 芯片设计全流程)。
六、这一篇在知识体系里的位置
- 还没建立 setup/hold、关键路径直觉 → 先读 时序为什么不满足;
- 想看真实延迟从哪来、布线后怎么收敛 → P&R 入门、时序分析上手;
- 想知道约束怎么写、SDC/关键路径报告怎么读 → 逻辑综合上手;
- 想知道频率和功耗/供电的关系 → 芯片功耗从哪来、低功耗设计直觉。
总结
一句话总结:静态时序分析 STA 不靠施加激励仿真,而是把电路展开成带延迟的时序图,对每一条触发器到触发器(以及输入/输出端口)路径,累加「触发器时钟到 Q + 各门延迟 + 线延迟」得到到达时间,再按时钟周期和 setup/hold 算出需求时间,二者之差就是 slack——slack≥0 通过、<0 报违例并按最差值定位关键路径;因为它不依赖输入向量,所以能穷举亿万条路径且速度快,弥补了仿真覆盖不全又太慢的短板;签核还要在多个 PVT 角下进行(慢角门最慢、最易 setup 违例,快角门最快、最易 hold 违例),与「管功能对不对」的仿真/形式验证分工互补,时序和功能双双通过才能流片。