一、时序分析基础:什么是时序分析?为什么需要时序分析?建立时间与保持时间的概念
1.1 什么是时序分析?
说白了,时序分析就是检查你的芯片能不能在目标频率下稳定工作。
我刚开始做数字设计时,总觉得这步可有可无。直到有一次,一个项目流片回来,芯片在实验室死活上不了高频——明明功能仿真全过了。后来定位才发现,是一条关键路径的建立时间违例了。嗯,从那以后,我再也不敢轻视时序分析了。
时序分析的核心任务,就是验证所有寄存器之间的数据传播路径,是否满足触发器的时序约束要求。它不关心功能对不对,只关心「时间够不够」。
1.2 为什么需要时序分析?
你想想看,一个数字芯片里动辄几百万个触发器。每个触发器都有自己严格的时序要求。如果数据到达得太晚,或者数据变化得太快,都会导致采样错误。
我个人习惯把时序分析的必要性归纳为三点:
- 保证功能正确:时序违例会导致寄存器采到错误数据,功能直接崩溃
- 确定最高频率:通过时序分析,才能知道芯片能跑多快
- 指导优化方向:时序报告会告诉你哪条路径最慢,该从哪里下手改
我在一个AI加速器项目中遇到过这样的情况:综合后的时序报告显示关键路径违例了200ps。如果不做时序分析,直接流片,那这颗芯片基本就废了。后来通过流水线重排和寄存器插入,才把时序修回来。
1.3 建立时间与保持时间
这两个概念,是时序分析的基石。搞不懂它们,后面所有优化都无从谈起。
建立时间(Setup Time)
建立时间,指的是在时钟有效沿到来之前,数据必须提前稳定下来的最短时间。
为什么要有这个要求?因为触发器内部需要一段时间来「锁存」数据。如果数据在时钟沿来临时还在变化,触发器就可能进入亚稳态,采到不确定的值。
我习惯用一个比喻:就像你赶火车,必须在发车前几分钟到达站台。这个「提前到达」的时间,就是建立时间。
保持时间(Hold Time)
保持时间,指的是在时钟有效沿到来之后,数据必须继续保持稳定的最短时间。
数据刚被采样完,不能立刻变掉。触发器内部的锁存结构需要一点时间来「巩固」这个值。如果数据变化得太快,同样会导致采样错误。
还是那个赶火车的比喻:火车发车后,你也不能立刻跳下车,得等火车开稳了才行。这个「发车后保持不动」的时间,就是保持时间。
| 概念 | 定义 | 违例后果 | 常见原因 |
|---|---|---|---|
| 建立时间 | 时钟沿前数据需稳定的最短时间 | 采到旧值或亚稳态 | 路径太长、组合逻辑太多 |
| 保持时间 | 时钟沿后数据需稳定的最短时间 | 采到新值或亚稳态 | 路径太短、时钟偏斜 |
1.4 时序分析的核心逻辑
为了让你更直观地理解时序分析的整体流程,我画了一张图:
1.5 时序分析的两种方式
在实际工程中,时序分析主要有两种方式:
- 静态时序分析(STA):穷举所有路径,不依赖输入激励。速度快、覆盖全,是主流方法
- 动态时序分析:基于仿真波形,只分析被激励到的路径。速度慢、覆盖不全,现在用得少
我个人习惯在综合后和布局布线后,各跑一次STA。综合后的STA用来快速定位逻辑层面的问题,布局布线后的STA才是最终判决。我曾经在一个项目中,综合后STA全过,但布局布线后出现了几十条建立时间违例——因为布线延迟比预估的大了很多。
- 时序分析检查数据能否在时钟周期内稳定传输
- 建立时间:数据必须在时钟沿前稳定
- 保持时间:数据必须在时钟沿后保持稳定
- STA是主流方法,覆盖所有路径