入门:STA 到底在检查什么?

参考资料:Static Timing Analysis for Nanometer Designs: A Practical Approach(汉化版)。

关于作者:一天三顿饭,22 岁,芯片实现工程师。

如果你翻我的履历,大概会觉得这人不太安分:画过歌手专辑封面,做过仿生人,碰过脑机接口,写过股票量化交易系统,打过电赛,搞过全栈开发,给剧团设计过机器人。然后 22 岁这年,跑来做了芯片。

不是心血来潮。上面每一件事,起因都是同一句:“这东西怎么工作的?我想搞明白。”芯片是目前为止最难、也最让我上头的一件事。

这个系列是我读 Static Timing Analysis for Nanometer Designs 的学习笔记。不逐章翻译,不搬运图表,用我自己的案例和理解把 STA 讲清楚。因为我也在学,所以我知道哪里最容易卡住。

目标读者是刚接触数字后端、STA 或 SDC 的学生和初级工程师。默认读者知道什么是时钟、触发器、组合逻辑,但不清楚 STA 工具运行后到底做了什么、报告中的数字代表什么含义。

STA 不检查逻辑功能

你写了一段 Verilog,功能仿真全绿,综合布线一把过,烧到板子上——电路行为时好时坏,有时候正常,有时候莫名其妙出错。

不是你逻辑写错了。是时序没对上。

STA,全称 Static Timing Analysis,检查的就是这件事:数据能否在触发器要求的时间窗口内稳定到达,并被可靠采样。

注意 STA 不检查的事:加法器算没算错、状态机跳没跳对——这些逻辑功能对不对,归仿真和形式验证管。STA 只管一件事:逻辑结果有没有按时送到下一级。

可以把 STA 理解成一个只认时间的交通警察:他不关心你开的是什么车、里面坐了什么人,他只问你有没有在绿灯亮起之前停到指定位置。

为什么叫“静态”时序分析?

这里的“静态”不是说电路不工作,也不是说时钟不跳变。它指的是:STA 不需要向设计施加一组具体输入激励,也不需要让信号随仿真时间逐周期推进

STA 读取门级网表、标准单元库、寄生参数和 SDC 约束后,直接沿着所有相关时序路径计算数据最早和最晚的到达时间,再完成 setup、hold 等检查。它分析的是电路的结构和时序模型,而不是某一组测试向量下的波形。

与之相对,时序仿真需要输入测试向量:先施加一组激励,观察电路响应;再换一组激励,继续观察。它能同时验证功能和被激活路径的时序,但覆盖范围取决于测试向量是否足够全面。

一句话概括:时序仿真是在“播放”电路的行为;STA 是根据电路结构和约束,直接推导相关路径能否按时工作。

从一条最简单的路径开始

考虑下面这条同步时序路径:FF1 发射数据,经过组合逻辑和连线,到达 FF2。两个触发器由同一个时钟驱动。

在这里插入图片描述

在某个时钟沿,FF1 发射数据。数据经过 FF1 的 clock-to-Q 延迟、组合逻辑和连线,最后到达 FF2.D。下一个采样时钟沿到来时,FF2 要把 D 端的数据锁存下来。

这里的 FF1 称为 launch flip-flop,FF2 称为 capture flip-flop。STA 的工作,就是对这样的路径计算数据到达时间,并和接收端允许的时间进行比较。

数据不能太晚:setup 检查

触发器在采样沿到来之前,需要数据已经稳定一小段时间,这段时间叫 setup time。

打个比方:考试 9:00 开始,但要求提前 10 分钟进场。你 8:55 到了,没问题;你 9:05 才到,对不起,考场不让进了。setup time 就是这"提前 10 分钟"——数据必须在时钟沿到来之前稳定下来,晚了这一拍的数据就丢了。

数据太晚到达,接收触发器就可能错过本周期应采集的数据。

假设:

  • 时钟周期为 2.00 ns
  • FF2 的 setup time 为 0.10 ns
  • FF1 的 clock-to-Q 延迟为 0.15 ns
  • 组合逻辑和连线延迟为 1.60 ns

先忽略时钟偏斜和不确定度。数据到达时间为:

arrival time = 0.15 + 1.60 = 1.75 ns

数据最晚允许到达的时间为:

required time = 2.00 - 0.10 = 1.90 ns

所以 setup slack 为:

setup slack = required time - arrival time
            = 1.90 - 1.75
            = 0.15 ns

slack 大于等于 0,说明满足 setup;slack 小于 0,说明数据来晚了,发生 setup 违例。setup 分析因此要使用数据路径的最大延迟

把上面这些关系画在一张时序波形图上,就是下面这样——setup 和 hold 的窗口、arrival time 和 required time 的关系一目了然:

在这里插入图片描述

数据也不能太早:hold 检查

另一个常见误区是:只要数据越快到达越好。实际上,数据也不能在采样沿后过早变化。

采样沿到来后,触发器内部还要完成锁存和状态再生的过程。若 D 端立即发生变化,内部电路可能难以确定应锁存旧值还是新值,严重时会进入亚稳态。因此,采样沿之后,数据仍需保持稳定至少一个 hold time。

还是考试那个比方:9:00 开考,但交卷铃响之后你不能立刻冲出教室——老师得把卷子收走、确认无误。你提前跑了,卷子可能被风吹掉,等于白考。hold time 就是这个"收卷时间"——时钟沿之后,数据必须再稳一会儿,不能马上变。

假设:

  • FF1 的最小 clock-to-Q 延迟为 0.05 ns
  • 数据路径最小延迟为 0.03 ns
  • FF2 的 hold time 为 0.10 ns

则数据最早到达时间为:

earliest arrival time = 0.05 + 0.03 = 0.08 ns
hold slack = 0.08 - 0.10 = -0.02 ns

这里的 hold slack 是 -0.02 ns,也就是 20 ps 的 hold 违例。任何负 slack 都表示不满足时序;项目可能会有额外裕量或报告显示精度的约定,但不能把小的负值当作 STA 已通过。

hold 分析要使用数据路径的最小延迟,因为跑得最快的数据最容易破坏采样沿刚刚锁存的旧数据。

STA 依据什么做判断?

要完成上述计算,STA 至少需要四类输入:

  • 门级网表:定义有哪些单元,以及单元之间如何连接。
  • 标准单元库(.lib:提供单元延迟、压摆、setup、hold 等模型。
  • 寄生参数(.spef:描述布局布线后的电阻、电容,决定连线延迟。
  • 时序约束(SDC):定义时钟、IO 延迟、时钟关系和路径例外。

可以把它记成一句话:网表定义路径,库定义单元,SPEF 定义连线,SDC 定义检查规则。

小结

带走三句话:

  1. STA 不查逻辑对错,只查数据有没有按时送到。
  2. 晚了查 setup,关注最慢路径;早了查 hold,关注最快路径。数据不能迟到,也不能早退。
  3. slack 为正 = 时序过,slack 为负 = 有违例。负 0.01 ps 也是负,不通过就是不通过。

后面的文章会在这条 FF1 → FF2 路径上逐步叠加:时钟偏斜、PVT、OCV、SDC——每加一层,都是对这套基本计算规则的扩展。


下一篇:为什么 STA 不能替代仿真?

你可能会想:既然 STA 又快又全,是不是可以不用跑仿真了?

错了。真的有人这样干过,然后芯片回片后发现:复位顺序是错的,跨时钟域的数据丢了一地,不定态 X 在电路里到处传播——这些 STA 统统看不见。

下一篇就讲清楚:STA 的边界在哪里,哪些问题你必须靠仿真来兜底。”以为 STA 过了就能流片”是新人最容易踩的坑,下一篇帮你绕过去。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐