1、时序收敛概述

什么是时序收敛?

时序收敛,说白了就是你的芯片设计在签核前,所有路径的时序都满足了约束要求。嗯,我换个更直白的说法——你设计的电路,在目标频率下能稳定工作,不出错。

我个人习惯把时序收敛理解成「所有信号都按时到达」。数据从起点出发,经过组合逻辑,到达终点寄存器,整个过程必须在时钟周期内完成。如果信号跑快了,叫保持时间违例;跑慢了,叫建立时间违例。这两种情况,芯片都会出问题。

核心定义:时序收敛 = 所有时序路径的建立时间(setup)和保持时间(hold)都满足约束要求,且无任何时序违例。

我在项目中遇到过不少新手,觉得时序收敛就是跑个STA,看到没红字就完事了。其实没那么简单。时序收敛是一个反复迭代、不断优化的过程,从综合、布局、时钟树综合到布线,每一步都可能引入新的时序问题。

为什么签核前必须收敛?

这个问题,我问过自己很多次。你想想看,芯片流片一次少说几十万,先进工艺更是上千万。如果因为时序没收敛导致芯片功能失效,那损失可就大了。

具体来说,有这几个原因:

  • 功能正确性:时序违例会导致数据采样错误,芯片功能直接失效。我曾经见过一个项目,因为一条路径的setup违例只有5ps,结果芯片在高频模式下完全无法工作。
  • 良率保障:签核时的时序分析会考虑工艺、电压、温度(PVT)的波动。如果连最差情况下的时序都收敛了,量产时的良率才有保障。
  • 可靠性:时序余量不足的芯片,随着老化、温度变化,可能在使用一段时间后出现故障。嗯,这可不是我们想要的。

注意:签核前的时序收敛不是「差不多就行」,而是必须「严格满足」。我曾经吃过亏,觉得差几个皮秒问题不大,结果流片回来芯片在高温下就罢工了。从那以后,我再也不敢对时序余量打折扣了。

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

静态时序分析(STA)在整个芯片设计流程中,扮演着「守门员」的角色。它不是一个独立的步骤,而是贯穿始终的验证手段。

我画了一张图,帮你理清STA在流程中的位置:

STA在芯片设计流程中的位置 RTL设计 逻辑综合 布局布线 签核 STA STA STA 签核STA 反馈优化 反馈优化 反馈优化 STA贯穿整个后端流程,每个阶段都需要进行时序检查

从这张图你可以看到,STA不是只在最后签核时才做。实际上,从综合阶段开始,我们就要跑STA。为什么呢?因为越早发现问题,修复成本越低。

我记得有个项目,综合阶段STA跑出来有几百条违例。团队觉得反正后面布局布线会优化,就没太在意。结果到了布线阶段,那些违例不但没消失,反而更严重了。最后不得不花两周时间重新综合,项目延期了一个月。嗯,这个教训挺深刻的。

STA的基本流程

STA的流程,我总结成几个关键步骤:

  1. 读入网表:把综合或布局布线后的门级网表读进来。
  2. 读入约束:包括时钟定义、输入输出延迟、false path等。
  3. 读入库文件:标准单元库的时序模型,包括不同PVT条件下的延迟信息。
  4. 时序计算:工具自动计算每条路径的延迟,检查setup和hold。
  5. 生成报告:输出违例路径、时序余量等信息。

小技巧:我个人习惯在跑STA之前,先检查一下约束文件。很多时序问题其实都是约束写错了导致的。比如时钟定义不对,或者忘了设false path。花5分钟检查约束,能省下后面几小时的debug时间。

时序收敛的常见误区

做时序收敛这么多年,我见过不少常见的误区:

误区 真相
STA跑一次就够了 每个设计阶段都要跑STA,而且签核前要在多个PVT条件下跑
时序余量越大越好 余量太大意味着面积和功耗浪费,合理的余量才是目标
只看setup不看hold hold违例同样致命,尤其是先进工艺下hold问题更突出
签核STA用默认设置就行 签核STA需要根据工艺和项目要求,仔细配置分析条件

我曾经接手过一个项目,前工程师只跑了典型条件下的STA,觉得没问题就签核了。结果流片回来,芯片在高温低压下完全不能工作。后来一查,是hold违例。嗯,从那以后我每次签核前都会跑至少三个corner:最慢、最快、典型。

小结

时序收敛是芯片设计从「能工作」到「可靠工作」的关键一步。它不是一个简单的检查动作,而是一个贯穿整个后端流程的迭代优化过程。STA作为验证手段,帮助我们及时发现并修复时序问题,确保芯片在目标频率下稳定运行。

记住一句话:时序收敛做得越早、越彻底,流片成功的概率就越高。别等到签核前才发现问题,那时候改起来可就费劲了。

可可精品资料库