第一章:时序分析基础
什么是建立时间与保持时间?
做芯片设计,这两个概念是躲不开的。说白了,它们决定了数据能不能被正确锁存。
建立时间(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的流程,我一般分这几步走:
- 读入设计:把综合后的网表、寄生参数文件、标准单元库读进来
- 设置约束:告诉工具时钟频率、输入输出延迟、时序例外等
- 分析路径:工具自动识别所有时序路径,计算建立时间和保持时间
- 生成报告:输出违例路径列表,包括路径延迟、违例量、关键节点
- 迭代修复:根据报告修改设计,重新分析直到收敛
我记得第一次用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的时序报告——嗯,那可是个技术活。