第一章:时序分析基础

什么是建立时间与保持时间?

做芯片设计,这两个概念是躲不开的。说白了,它们决定了数据能不能被正确锁存。

建立时间(Setup Time):时钟有效沿到来之前,数据必须提前稳定下来的最短时间。如果数据来得太晚,触发器就可能采到错误的值。

保持时间(Hold Time):时钟有效沿到来之后,数据必须继续保持稳定的最短时间。如果数据变化太快,同样会采错。

我刚开始做后端时,总觉得这两个概念太理论。直到有一次,一个项目在post-sim阶段发现寄存器输出总是不对。查了三天,最后发现是保持时间违例——数据路径太短,比时钟还快。嗯,从那以后我再也不敢小看保持时间了。

核心公式(记住这个):

建立时间检查:Tclk + Tskew > Tcq + Tcomb + Tsetup
保持时间检查:Tcq + Tcomb > Thold + Tskew

其中:Tclk是时钟周期,Tskew是时钟偏斜,Tcq是触发器输出延迟,Tcomb是组合逻辑延迟,Tsetup/Thold是触发器的建立/保持时间要求。

为什么芯片会跑不快?

这个问题,我经常被刚入行的同事问起。其实原因很集中:

  • 路径太长:组合逻辑级数太多,信号传播慢
  • 负载太重:一个门驱动太多扇出,上升/下降时间变慢
  • 线延迟大:长走线带来的RC延迟,在先进工艺下越来越严重
  • 时钟偏斜:时钟到达各触发器的时刻不一致,压缩了有效时间窗口
  • 电压温度影响:低电压、高温下,晶体管开关速度会变慢

我个人习惯,遇到芯片跑不快的问题,先看最差情况下的关键路径。你想想看,一条路径慢了,整个芯片的频率就被它拖累。这就是所谓的「木桶效应」。

避坑指南:我曾经在一个28nm的项目中,发现芯片在低温下反而跑不快。查了半天,原来是温度反转效应(Temperature Inversion)在作怪。先进工艺下,低温不一定是好事,这点要特别注意。

STA的基本概念与流程

静态时序分析,说白了就是检查你的芯片能不能跑在目标频率上。它不需要输入激励向量,而是穷举所有可能的路径,计算每条路径的延迟是否满足时序要求。

STA的流程,我一般分这几步走:

  1. 读入设计:把综合后的网表、寄生参数文件、标准单元库读进来
  2. 设置约束:告诉工具时钟频率、输入输出延迟、时序例外等
  3. 分析路径:工具自动识别所有时序路径,计算建立时间和保持时间
  4. 生成报告:输出违例路径列表,包括路径延迟、违例量、关键节点
  5. 迭代修复:根据报告修改设计,重新分析直到收敛

我记得第一次用PrimeTime时,被它生成的报告吓到了——密密麻麻几千条违例。后来才明白,很多违例其实是假的,比如false path或者multi-cycle path。所以,学会过滤无效违例,是STA的第一步。

一个典型的PrimeTime命令示例:

# 读入设计
read_verilog my_design.v
read_parasitics my_design.spef
read_sdc my_design.sdc

# 设置时钟
create_clock -name clk -period 10 [get_ports clk]

# 检查建立时间
report_timing -delay_type max -nworst 10

# 检查保持时间
report_timing -delay_type min -nworst 10

STA与动态仿真的区别

很多新手会问:有了动态仿真,为什么还要做STA?

我打个比方:动态仿真就像抽查,你只能验证你想到的输入组合;而STA像全面体检,所有路径都检查一遍。动态仿真可能漏掉一些极端情况,但STA不会。

对比项 STA 动态仿真
输入激励 不需要 需要测试向量
覆盖范围 所有路径 有限场景
速度 快(分钟级) 慢(小时/天级)
功能验证 不能 可以
时序验证 全面 不全面

注意:STA不能替代功能仿真。它只检查时序,不检查逻辑功能是否正确。我曾经见过一个设计,STA全过,但功能仿真发现状态机跳转错了——因为综合时优化掉了关键逻辑。所以,STA和功能仿真要配合使用,缺一不可。

STA的PVT corner

芯片在不同工艺、电压、温度下表现不同。STA需要覆盖所有可能的corner:

  • 最差情况(Worst Case):慢工艺、低电压、高温——用于建立时间检查
  • 最好情况(Best Case):快工艺、高电压、低温——用于保持时间检查
  • 典型情况(Typical Case):标称工艺、标称电压、常温——用于一般分析

我个人习惯,在项目初期先用典型corner快速迭代,到后期再跑所有corner做最终签核。这样效率高,也不容易漏掉问题。

好了,第一章的内容就到这里。建立时间和保持时间是STA的基石,理解透了,后面的内容就好办了。下一章我们聊聊如何读懂PrimeTime的时序报告——嗯,那可是个技术活。