一、时序分析基础:什么是STA、为什么需要STA、STA与仿真的区别、时序路径分类

1.1 什么是STA?说白了就是给芯片做「体检」

静态时序分析,英文叫Static Timing Analysis,简称STA。我习惯叫它「静态时序体检」。

什么意思呢?就是把你设计好的数字电路,抽象成一个时序图。然后检查每一条路径上的信号,能不能在规定时间内,从起点跑到终点。

举个例子。你设计了一个寄存器A,它要往寄存器B送数据。时钟上升沿来了,A开始往外吐数据。这个数据经过组合逻辑,到达B的输入端口。B要在下一个时钟上升沿之前,稳稳地采到这个数据。

STA就是干这个事的——它不关心你的电路功能对不对,只关心「时间够不够用」。

核心要点:STA是一种穷举式的时序验证方法。它遍历所有可能的时序路径,检查每条路径是否满足建立时间(setup)和保持时间(hold)的要求。

我在项目中遇到过一件事。有个同事做完综合,STA报了一堆违例。他一看,全是hold违例。他问我:「这玩意儿严重吗?」我说:「严重。hold违例意味着数据跑得太快,把上一拍的数据冲掉了。芯片流回来,大概率是废的。」

嗯,从那以后他再也不敢小看STA了。

1.2 为什么需要STA?——血的教训

你可能会问:「我仿真都过了,为什么还要做STA?」

这个问题,我当年也问过我的导师。他的回答很简单:「仿真跑不完所有情况。」

我们来算一笔账。一个百万门的芯片,时序路径数量是天文数字。你用仿真去覆盖?不可能的。仿真只能覆盖你写的testcase,而STA可以覆盖所有路径。

我总结一下,为什么需要STA:

  • 穷举性:STA检查所有路径,不遗漏任何一条
  • 速度快:比仿真快几个数量级,几分钟跑完
  • 不需要测试向量:你不需要写复杂的testbench
  • 定位精准:直接告诉你哪条路径、哪个cell、违例了多少

我的经验:在项目早期,我建议每做完一次综合就跑一遍STA。哪怕只是看看有没有大的违例。这能帮你提前发现架构层面的问题,避免后期返工。

我曾经接手过一个项目,前端团队说「仿真全过了,没问题」。结果我跑STA,发现一条关键路径违例了1.2ns。1.2ns什么概念?在7nm工艺下,这基本等于芯片废了。后来查原因,是架构设计时没考虑好流水线深度。

所以,STA不是可选项,是必选项。

1.3 STA与仿真的区别——两个不同的维度

很多人搞混STA和仿真。我打个比方你就明白了。

仿真像是「路考」——你开着车,在特定的路线上跑,看能不能通过。你跑过的路线没问题,但没跑过的路线呢?不知道。

STA像是「地图测绘」——把所有可能的路线都画出来,每条路多长、限速多少、有没有红绿灯,全部算清楚。不需要实际开车,就能知道哪条路会堵车。

具体区别,我列个表:

对比项 STA 仿真
验证方式 静态分析,不需要输入激励 动态模拟,需要测试向量
覆盖范围 所有路径,穷举 仅覆盖测试向量涉及的路径
速度 快,分钟级 慢,小时甚至天级
功能验证 不能验证功能 可以验证功能
时序验证 精确,考虑PVT 粗略,依赖testbench
适用阶段 综合后、布局布线后 RTL阶段、综合后

注意:STA不能替代仿真,仿真也不能替代STA。两者是互补关系。我见过有人只做STA不做仿真,结果功能错了都不知道。也见过只做仿真不做STA,流片回来时序全崩。正确的做法是:仿真保功能,STA保时序。

1.4 时序路径分类——搞清楚你的敌人长什么样

STA把时序路径分成四类。你想想看,就像打仗要先搞清楚敌人从哪个方向来一样,做时序分析也要先知道路径的类型。

第一类:输入到寄存器(Input to Register)

信号从芯片的输入端口进来,经过组合逻辑,到达寄存器的数据输入端。这类路径受输入延迟(input delay)约束。

我习惯在项目初期就定好输入延迟的约束。有一次,一个IP的输入延迟设得太松,导致内部时序看起来很好,但实际芯片上电后,外部数据根本采不进来。嗯,这个坑我踩过。

第二类:寄存器到寄存器(Register to Register)

这是最常见的路径。一个寄存器的输出,经过组合逻辑,到达另一个寄存器的输入。这类路径受时钟周期约束。

说白了,这就是你芯片的主干道。大部分时序违例都发生在这里。优化也主要针对这类路径。

第三类:寄存器到输出(Register to Output)

寄存器的输出经过组合逻辑,到达芯片的输出端口。这类路径受输出延迟(output delay)约束。

我记得有个项目,输出延迟设错了。后端工具以为输出端有很长的片外走线,拼命优化内部路径。结果芯片做出来,内部时序很好,但输出信号到不了片外器件。浪费了三个月的迭代周期。

第四类:输入到输出(Input to Output)

信号从输入端口直接经过组合逻辑到达输出端口,中间没有寄存器。这类路径也叫「纯组合路径」。

这类路径在同步设计中很少见。如果你遇到了,要特别小心。因为它不受时钟控制,完全靠组合逻辑的延迟来保证时序。

总结一下:四类路径,对应四种约束。输入到寄存器→input delay,寄存器到寄存器→时钟周期,寄存器到输出→output delay,输入到输出→set_max_delay。搞清楚这个对应关系,STA就入门了一半。

好了,这一章的内容就这些。下一章我会讲时序弧、延迟计算和PVT corner。这些东西是STA的「内功心法」,学会了才能真正看懂STA报告。