1. STA基础概念:什么是静态时序分析,为什么需要STA,STA在芯片设计流程中的位置

1.1 静态时序分析到底是什么?

静态时序分析,说白了就是检查你的芯片能不能跑在目标频率上。

我刚开始做设计时,总觉得这步可有可无。直到有一次流片回来,芯片死活上不了高频……嗯,从那以后我再也不敢跳过STA了。

静态时序分析是一种穷举式的时序验证方法。它不需要输入激励,而是遍历所有可能的路径,检查每条路径上的信号传播时间是否满足约束。

你想想看,一个几千万门的芯片,如果靠动态仿真一条条路径去跑,跑到猴年马月也跑不完。但STA不一样,它一次性把所有路径都检查了。

核心要点:STA验证的是「数据从起点到终点,能不能在规定时间内到达」。

1.2 为什么我们需要STA?

这个问题我问过很多新人。他们的第一反应是:「为了确保芯片能工作啊。」

对,但不全对。

我个人的理解是,STA存在的意义有三个方面:

  • 保证功能正确:时序违规会导致数据采样错误,芯片直接罢工
  • 保证性能达标:你的芯片标称1GHz,结果只能跑800MHz,这谁受得了?
  • 保证良率:工艺角、温度、电压变化下,芯片依然能稳定工作

我曾经接手过一个项目,前端设计人员拍着胸脯说时序没问题。结果STA一跑,setup violation上千条。你猜怎么着?他们用的约束根本不对。所以啊,STA不是可有可无的,它是芯片设计的最后一道防线。

个人经验:我建议在RTL阶段就开始做初步的STA评估,不要等到后端布局布线完了再跑。那时候发现问题,改起来成本太高了。

1.3 STA在芯片设计流程中的位置

芯片设计流程大致是这样的:

阶段 STA的作用 我的建议
RTL设计 初步时序评估 用综合后的网表跑一次,心里有个底
逻辑综合 检查综合后时序 这里要仔细看,综合工具不一定靠谱
布局规划 评估floorplan影响 重点关注长线延迟
时钟树综合 检查时钟偏差 skew超标的话,后面很难救
布线 最终时序签收 这是最后的机会,务必跑全corner
签收 STA sign-off 所有violation必须清零

你看,STA贯穿了整个后端流程。它不是最后才做的事情,而是每一步都要做。

我记得有一次,在布局阶段发现了一条关键路径的时序特别差。当时我建议调整floorplan,把两个模块放近一些。项目经理觉得麻烦,说「后面布线再优化吧」。结果呢?布线阶段花了三倍的时间去修这条路径,最后还是没修干净。从那以后,我坚持每个阶段都要跑STA,发现问题尽早处理。

1.4 STA的两个核心检查

STA主要做两件事:setup检查和hold检查。

  • Setup检查:数据必须在时钟沿之前稳定下来。说白了就是「别迟到」。
  • Hold检查:数据必须在时钟沿之后保持稳定。说白了就是「别早退」。

这两个检查缺一不可。setup不满足,芯片跑不快;hold不满足,芯片根本没法跑。

避坑指南:我曾经遇到过一个案例,setup全部满足,但hold violation一大堆。原因是时钟树做得太激进,skew太大。所以做STA时,setup和hold要一起看,不能只看一个。

1.5 STA的输入输出

做STA需要哪些东西?我列一下:

  • 网表:综合或布局布线后的电路连接
  • 约束文件:SDC,告诉工具你的时钟、输入输出延迟等
  • 工艺库:标准单元的延迟信息
  • 寄生参数:SPEF,包含互连线的电阻电容

输出呢?就是一份时序报告。里面会告诉你哪些路径违规了,违规了多少。

我个人的习惯是,拿到时序报告后先看最差的几条路径。如果最差的路径都只差一点点,那问题不大。如果最差的路径差了很多,那就要考虑是不是约束有问题,或者设计本身就有缺陷。

1.6 小结

静态时序分析不是什么高深莫测的东西。它就是一把尺子,量一量你的芯片能不能在目标频率下正常工作。

做STA这么多年,我最大的体会是:不要等到最后才跑STA。越早发现问题,改起来越轻松。这个道理,很多新人要吃过亏才能明白。

下一章,我会讲STA的基本流程和工具链。到时候咱们再细聊。