时序分析基础:静态时序分析(STA)原理、时序弧、延迟计算模型

各位同学,咱们今天聊聊静态时序分析。说白了,STA就是检查你的芯片能不能在目标频率下稳定工作。我刚开始做设计那会儿,总觉得这步是后端的事,跟我RTL工程师没关系。直到有一次,一个项目流片回来,芯片在实验室里死活跑不到预期频率……嗯,从那以后,我再也不敢小看STA了。

静态时序分析(STA)原理

静态时序分析,核心思想很简单:穷举所有路径,检查时序是否满足。它不像动态仿真那样需要输入激励,而是把所有的时序路径都算一遍。

我个人习惯把STA比作「体检」。你想想看,体检不会模拟你跑步、吃饭、睡觉的所有场景,而是直接测你的心率、血压、血脂这些关键指标。STA也一样,它不关心电路的功能对不对,只关心信号能不能在规定时间内到达。

STA的核心三要素:

  • 建立时间(Setup Time):数据必须在时钟沿到来之前稳定下来。这个时间不够,寄存器就可能采到错误的值。
  • 保持时间(Hold Time):数据必须在时钟沿之后保持稳定一段时间。这个时间不够,数据可能被「冲走」。
  • 时钟偏斜(Clock Skew):时钟到达不同寄存器的时刻有差异。这个差异会吃掉你的时序裕量。

我在项目中遇到过最典型的案例:一个模块在综合后时序报告全是绿的,但布局布线后一堆保持时间违例。为什么?因为时钟树综合后,时钟偏斜变大了,把原本的裕量吃掉了。所以,STA一定要在布局布线后重新跑一遍,这个坑我替你们踩过了。

时序弧(Timing Arc)

时序弧这个概念,刚接触时觉得挺玄乎。其实它就是描述信号从输入到输出经过的延迟路径。每个标准单元(比如与门、或门、触发器)都有自己的一组时序弧。

举个例子,一个二输入与门,它的时序弧包括:

  • 从输入A到输出Y的上升沿延迟
  • 从输入A到输出Y的下降沿延迟
  • 从输入B到输出Y的上升沿延迟
  • 从输入B到输出Y的下降沿延迟

嗯,这里要注意:同一个输入到输出的上升和下降延迟可能不一样。我在一个项目中就吃过这个亏——以为所有路径延迟对称,结果发现一个信号的上升沿比下降沿快了0.2ns,导致保持时间违例。

我的小技巧:写RTL时,尽量让关键路径上的信号翻转方向一致。比如,能用同一个时钟沿采样的信号,尽量都用上升沿或都用下降沿,别混着用。这样时序弧的延迟特性更统一,STA分析也更准确。

时序弧还分两种:

  • 组合时序弧:从组合逻辑的输入到输出,延迟是固定的。
  • 时序时序弧:从时钟到输出,或者从数据到时钟(建立/保持时间检查),这些跟时钟有关。

说白了,STA工具就是沿着这些时序弧,一条路径一条路径地算过去。路径越长,延迟越大,时序越紧张。

延迟计算模型

延迟怎么算?总不能每个晶体管都去仿真吧?那太慢了。所以业界搞了几种模型,用来快速估算延迟。

线性模型(Linear Model)

线性模型是最简单的。它假设延迟跟负载电容成正比,跟输入转换时间也成正比。公式大概长这样:

Delay = D0 + K1 * Input_Slew + K2 * Load_Capacitance

其中D0是固有延迟,K1和K2是系数。这个模型在早期工艺(比如0.18um以上)还挺准的。但到了深亚微米工艺,非线性效应越来越明显,线性模型就不太够用了。

我记得刚入行时,用的还是0.35um工艺,线性模型算出来的延迟跟实际流片结果差不到5%。但到了28nm以下,线性模型误差能到30%以上。所以现在主流工艺基本不用线性模型了。

非线性模型(Non-Linear Model)

非线性模型,也叫查表模型(Look-Up Table)。它把延迟和输出转换时间都做成二维表格,横轴是输入转换时间,纵轴是输出负载电容。

举个例子,一个反相器的延迟表可能长这样:

输入转换时间 \ 输出负载 10fF 50fF 100fF
0.1ns 0.15ns 0.22ns 0.31ns
0.5ns 0.28ns 0.35ns 0.44ns
1.0ns 0.45ns 0.52ns 0.61ns

STA工具会根据实际的输入转换时间和负载电容,在表格里插值算出延迟。如果落在表格外面,就做外推。这种模型精度高得多,也是目前的主流做法。

注意:非线性模型虽然准,但有个坑——表格的边界条件。我曾经遇到一个案例,某个路径的输入转换时间特别快,只有0.05ns,但表格的最小值是0.1ns。工具外推出来的延迟比实际大了20%。后来我手动加了一组更快的输入转换时间数据,问题才解决。所以,一定要检查你的.lib文件里表格的覆盖范围,别让工具在外推区域瞎猜。

知识体系结构图

下面这张图,是我自己总结的STA知识体系。你看一眼,心里就有谱了:

静态时序分析(STA)知识体系 STA原理 建立时间 / 保持时间 时钟偏斜(Clock Skew) 时序弧(Timing Arc) 组合时序弧 / 时序时序弧 延迟计算模型 线性模型(早期工艺,误差大) 非线性模型(查表法,主流) 核心:穷举所有路径,检查时序裕量

这张图把STA的核心脉络理清楚了。从上到下,先理解STA是干什么的,再掌握三个核心要素,最后搞清楚延迟是怎么算的。你把这个框架记在脑子里,后面学时序约束和优化就轻松多了。

我的经验之谈:学STA别死记硬背公式。你只要记住三件事:

  1. 路径延迟 = 单元延迟 + 互连线延迟。单元延迟查表,互连线延迟靠RC提取。
  2. 建立时间检查看最慢路径,保持时间检查看最快路径。
  3. 时钟偏斜是把双刃剑——对建立时间不利,但对保持时间有利(反过来也成立)。

这三句话,够你应付90%的STA问题了。

好了,这一章的内容就到这儿。记住,STA不是后端工程师的专利,我们做RTL的也要懂。你想想看,如果RTL写出来的代码本身就有一堆长路径,后端再牛也优化不回来。所以,从RTL阶段就开始考虑时序,才是最高效的做法。

可可精品资料库