时序路径与延迟的基本概念
在数字芯片设计中,“是否按时完成计算”是时序分析的核心问题。静态时序分析(STA)通过扫描整个电路的路径拓扑,验证所有可能的数据传播路径是否在时钟周期限制内完成。而延迟,是衡量这条路径能否“及时抵达”的时间成本。
时序路径分类
一条时序路径(Timing Path)是从一个触发器(或输入端)出发,经过组合逻辑,抵达另一个触发器(或输出端)的数据传播通路。根据起点和终点的不同,路径可以分为以下几类:
路径类型 | 起点 | 终点 | 作用 |
---|---|---|---|
输入到寄存器路径 | Primary Input | DFF(D) | 数据进入芯片的延迟验证 |
寄存器到输出路径 | DFF(Q) | Primary Output | 芯片输出响应时间分析 |
输入到输出路径 | Primary Input | Primary Output | 组合逻辑完整性检查 |
寄存器到寄存器路径 | DFF(Q) | DFF(D) | 组合逻辑中的关键路径分析重点 |
时钟路径 | 时钟源 | DFF(CK) | 用于计算时钟偏移(skew)与建立时间约束 |
在静态时序分析中,时钟路径的建模方式随着设计阶段的推进而发生变化。在时钟树综合(Clock Tree Synthesis, CTS)之前,时钟信号通常被视为理想信号(ideal clock),其延迟由设计者在时序约束文件(SDC)中通过 create_clock
和 set_clock_latency
等命令进行显式设定,此时工具不会考虑实际的时钟布线拓扑。
而在 CTS 完成之后,时钟网络结构已经明确,工具会通过 set_propagated_clock
命令将时钟切换为“真实传播”(propagated clock)模式,此时 STA 工具将使用布线提取得到的寄生参数(电阻、电容)来计算每个寄存器时钟引脚的真实延迟。这一切为时钟偏移(clock skew)、建立/保持时间分析提供了基础。
在所有时序路径中,寄存器到寄存器(Flip-Flop 到 Flip-Flop)路径是时序收敛(Timing Closure)的核心关注对象。这类路径的有效时钟周期由起始与终止寄存器接收到时钟信号的时间差决定(即考虑了 skew 和 latency)。其数据路径延迟(门延迟 + 互连延迟 + slew 效应)必须小于该有效周期,才能满足 setup 要求。因此,这些路径的最大延迟直接决定了设计能够支持的最高工作频率。
延迟的构成
时序路径上的延迟可以拆分为两个主要部分:
-
Cell Delay(门延迟)
每个标准单元(如与门、或门、反相器等)内部的传播延迟。它依赖于输入边沿速度(slew)和门的输出负载电容。 -
Net Delay(网络延迟)
信号在布线(net)中传输时受到金属线电阻、电容的影响。这个部分在先进工艺下尤为关键,甚至可能大于门延迟。
延迟不仅是一个标量值,而是包含上升沿延迟(rise delay)和下降沿延迟(fall delay)两种,STA 工具会分别跟踪两种传播方向。
Slew 与 Capacitance 的作用
除了传播延迟,STA 中还需要分析两个重要“动态参数”:
-
Slew(边沿速率):信号从低到高或从高到低的过渡速度。Slew 过慢可能导致下一阶段门电路无法正确识别输入,从而引起 setup violation。
-
Load Capacitance(负载电容):连接在某个门输出上的总电容,包括目标门输入电容和布线寄生电容。它影响输出 slew,并影响上游门的延迟。
Slew 和 Cap 是一对循环依赖的参数,STA 工具通常使用递推或迭代方法计算两者的平衡值。
Setup 与 Hold 限制
延迟计算的目标,是验证是否满足两类最基本的时序约束:
-
Setup Time Constraint(建立时间约束)
数据必须在时钟沿到来之前“稳定一段时间”,否则触发器可能采样错误数据。分析时计算路径最大延迟。
T l a u n c h + T c k 2 q + T d p < t c a p t u r e + T c y c l e + T s e t u p T_{launch} + T_{ck2q} + T_{dp} < t_{capture} + T_{cycle} + T_{setup} Tlaunch+Tck2q+Tdp<tcapture+Tcycle+Tsetup -
Hold Time Constraint(保持时间约束)
数据在时钟到达之后,必须继续保持稳定一段时间。否则新数据可能穿透并引起错误。分析时计算路径最小延迟。
T l a u n c h + T c k 2 q + T d p > T c a p t u r e + T h o l d T_{launch} + T_{ck2q} + T_{dp} > T_{capture} + T_{hold} Tlaunch+Tck2q+Tdp>Tcapture+Thold
上述两个条件是 STA 检查的根本标准。路径延迟越大,越容易违背 Setup;延迟越小,越容易违背 Hold。
最慢路径与最快路径
在设计中,最慢路径(Worst Negative Slack, WNS) 决定芯片能否达到目标频率;最快路径(小于 hold 时间) 决定数据是否稳定。因此,STA 工具往往报告:
- WNS (Worst Negative Slack):最严重的 Setup 违规路径
- TNS (Total Negative Slack):所有违反路径的累计时间
- FEP (Failing Endpoints):违例路径终点数量
延迟建模基础
在静态时序分析(STA)中,延迟建模是整个分析的物理基础。只有准确地计算出信号从起点传播到终点的时间,我们才能判断该路径是否满足 setup 与 hold 要求。
延迟建模的目标是:用数学模型精确刻画每个门电路与互连线对信号传播速度的影响。这部分通常由数字后端 EDA 工具自动完成,但理解其本质,有助于我们更好地掌握 STA 的行为。
延迟的分类
STA 工具将路径上的总延迟划分为两个部分:
类型 | 定义 | 影响因素 |
---|---|---|
Cell Delay | 信号通过一个标准单元(如门)所需时间 | 输入边沿速度(Slew)、负载电容(Cap) |
Net Delay | 信号在布线网络上传播所需的时间 | 电阻、电容、拓扑结构、缓冲器插入 |
这两个部分共同决定信号传播的速度。更进一步,Cell Delay 是非线性查表(Lookup Table)或复合电流源模型(CCS)等计算,而 Net Delay 通常基于 RC 网络模型估算。
Lookup Table 模型(NLDM)
现代 STA 工具采用标准单元库(liberty 文件)中提供的非线性延迟模型(NLDM,Non-Linear Delay Model),其本质是:
用一个二维查找表来描述 Cell 的延迟与输出上升/下降沿速率(Slew) 如何随着输入 Slew 和输出负载 Cap 的不同而变化。
通常一个标准单元的延迟表结构如下:
cell_fall(Timing_7_7) {
index_1 ("0.00117378,0.00472397,0.0171859,0.0409838,0.0780596,0.130081,0.198535");
index_2 ("0.365616,1.893040,3.786090,7.572170,15.144300,30.288700,60.577400");
values ("0.0217822,0.0253224,0.0288237,0.0346827,0.0448323,0.0636086,0.100366", \
"0.0233179,0.0268545,0.0303556,0.0362159,0.0463659,0.0651426,0.101902", \
"0.0296429,0.0331470,0.0366371,0.0425000,0.0526603,0.0714467,0.108208", \
"0.0402311,0.0440292,0.0477457,0.0538394,0.0641187,0.0829203,0.119654", \
"0.0511250,0.0554077,0.0595859,0.0662932,0.0771901,0.0963434,0.133061", \
"0.0625876,0.0673198,0.0719785,0.0794046,0.0910973,0.110757,0.147656", \
"0.0748282,0.0800098,0.0851434,0.0933663,0.106111,0.126669,0.163872");
}
每张二维表的行表示输入 slew,列表示输出负载 cap,表项是延迟或输出 slew。
STA 工具根据输入条件进行双线性插值(Bilinear Interpolation)获得实际值。
Composite Current Source(CCS)
随着工艺节点进入纳米级,NLDM 模型在精度上的局限性逐渐显现:
- 无法准确建模串扰(Crosstalk)对延迟和边沿的影响
- 忽略了非线性短路电流、波形形状等动态效应
- 不能精确处理多个门同时开关引起的信号干扰
为此,STA 工具与标准单元库逐渐引入了 Composite Current Source(CCS)模型,这是一种基于波形的延迟建模方法。CCS 通过记录单元在特定输入激励下的驱动电流随时间变化的曲线 I ( t ) I(t) I(t),结合负载电容模型,通过对电流进行积分可得到输出电压波形 V ( t ) V(t) V(t)。工具再根据该电压波形穿越门限电压的实际时刻,来反推出对应的延迟(delay)和边沿速率(slew)。这种建模方式不再依赖查表插值,而是通过模拟驱动电流作用于 RC 网络的真实响应,具备更高的精度与鲁棒性。详情可参考这篇文章:复合电流源 (Composite Current Source)。
与 NLDM 相比,CCS 模型在精度上有显著提升,特别适用于考虑串扰效应、长线驱动及深逻辑门链路径的时序分析。在多门同时翻转或高耦合布线结构下,CCS 的波形建模能力更能准确反映时序行为。目前主流工艺厂商和 STA 工具(如 PrimeTime)均已广泛支持该模型。不过,CCS 的代价在于模型文件体积更大,仿真计算更复杂,且标准单元库的生成成本相应提高。
在当前 STA 延迟建模实践中,NLDM 模型仍具广泛应用,但在先进工艺节点(如 FinFET、7nm 以下)以及对时序精度要求较高的场景下,CCS 等基于波形的建模方式已成为更优选择。深入理解 CCS 模型,有助于设计人员掌握现代 EDA 工具在时序分析中的建模深度与限制。
RC 延迟
Net Delay 的建模比门延迟更为复杂,因为它依赖于布线后的拓扑结构和寄生参数(Parasitics)。
π 模型
最基础的建模方式是将一段互连看作电阻与电容的组合,例如:
这称为π 型 RC 网络。通过解析拉普拉斯域的瞬态响应,可以得到近似的传播延迟。详情可以参考文献 “Gate Delay Estimation With Library Compatible Current Source Models and Effective Capacitance”
Elmore Delay
Elmore 延迟是一个一阶近似的解析表达式,非常适合树状 RC 网络,计算简单。对一个 RC 树,其某个节点的 Elmore 延迟公式为:
t
e
l
m
o
r
e
=
∑
i
R
i
C
i
t_{elmore}=\sum_i R_i C_i
telmore=i∑RiCi
其中:
R
i
R_i
Ri为路径上每个分支的串联电阻,
C
i
C_i
Ci为该节点以下所有电容的总和。
该模型被广泛用于布局布线初期估计,也被用作有效电容(effective capacitance)计算的基础。
Slew 与 Cap 的迭代建模
由于 Cell Delay 依赖于输入 Slew 和输出 Cap,而 Cap 又来自下一级门电路输入电容与网络寄生,Slew 又被上一级门驱动,这形成了一个循环依赖的问题。
STA 工具采用以下策略:
- 初始设置一个默认 Slew 与 Cap
- 沿路径前向传播 Slew,反向传播 Cap
- 通过 NLDM 插值更新每一级的延迟与输出 Slew
- 迭代直到收敛(差值 < 阈值)
这种自洽模型是现代 STA 能够分析百万门规模设计的基础。
Arnoldi 延迟
在复杂 SoC 设计中,长连线、大扇出路径以及强耦合互连普遍存在,传统 NLDM 表驱动方式难以准确建模这些场景下的延迟与边沿。因此,现代 STA 工具引入了基于系统响应的高阶建模方法,其核心思想是将门级输出驱动电路抽象为一个线性 R-C 网络,利用矩阵近似方法推导输出电压波形,从而获得更准确的 delay 与 slew。
Arnoldi方法是 Krylov 子空间技术的一种,能通过构造正交基逼近系统矩阵 A = G − 1 C A=G^{-1}C A=G−1C的主导特征,从而保留原始电路的主要动态特性。该方法在频域中构建极点-残差模型,进而近似输出电压波形 V ( t ) V(t) V(t),常用于有效电容(Ceff)估算和延迟计算,具有更高的稳定性和精度,尤其适合高扇出或耦合复杂路径的建模需求。
Arnodi 降阶
在许多电路时序分析问题中,我们需要处理大型线性动态系统,其形式通常为:
C
d
v
d
t
+
G
v
(
t
)
=
b
u
(
t
)
C \frac{dv}{dt} + Gv(t) = bu(t)
Cdtdv+Gv(t)=bu(t)
其中
C
C
C为电容矩阵,
G
G
G为电导矩阵,
v
(
t
)
v(t)
v(t)为电压节点向量,
b
b
b为激励向量。
为求解或逼近该系统的频域响应,我们常将其变换为状态空间形式进行延迟建模。在构造krylovv子空间时,最有利的方法是构造正交基。arnoldi方法是求解正交向量的经典方法,其基础是由W.E.Anoldi于1951年提出的Krylov子空间。
下图展示了经典的 Arnoldi 算法流程,用于在 Krylov 子空间中构建一组正交基:
在静态时序分析中,延迟主要由负载的 RC 网络(决定。对这样的网络,我们可以构建系统矩阵:
A
=
G
−
1
C
A = G^{-1}C
A=G−1C
Arnoldi 算法可以从激励向量
𝑏
𝑏
b 出发,构建 Krylov 子空间,从而逼近原始系统在频域(或时域)的响应。这样不仅可以显著降低计算复杂度,还可以捕捉系统的主要动态行为。
std::optional<MatrixXd> Arnoldi(const MatrixXd& A,const VectorXd& u, int k) {
constexpr double eplison = 1e-19;
auto size = A.rows();
MatrixXd v(size, k + 1);
MatrixXd h(k + 1, k);
VectorXd w(size);
v.col(0) = u / (u.norm());
for (int j = 0; j < k; ++j) {
w = A * v.col(j);
for (int i = 0; i <= j; ++i) {
h(i, j) = v.col(i).transpose() * w;
w = w - h(i, j) * v.col(i);
}
h(j + 1, j) = w.norm();
if ( std::abs(h(j + 1, j) - 0.0) < eplison ) {
return std::nullopt;
}
v.col(j + 1) = w / h(j + 1, j);
}
return v;
}
参考文献
- Asymptotic waveform evaluation for timing analysis
- Advanced Model Order Reduction Techniques in VLSI Design
- An Efficient Method for Fast Delay and SI Calculation Using Current Source Models
- Gate Delay Estimation With Library Compatible Current Source Models and Effective Capacitance