时序分析基础:建立时间与保持时间、时钟偏斜与抖动、组合逻辑延迟、时序路径分类

各位同学,咱们今天聊点实在的。时序分析,说白了就是检查你的芯片能不能跑在目标频率上。我刚开始做设计时总觉得这步可有可无,直到有一次流片回来芯片死活上不了高频……嗯,从那以后我再也不敢跳过 STA 了。

这一章我们先把地基打牢。你想想看,如果连建立时间和保持时间都搞不清楚,后面谈什么时序收敛?

建立时间与保持时间

这两个概念,是时序分析的灵魂。我见过不少工程师,做了三五年项目,遇到建立时间违规知道怎么修,但一问保持时间就含糊其辞。这不行。

建立时间(Setup Time):数据在时钟有效沿到来之前,必须保持稳定的最短时间。说白了,就是数据得提前到,让触发器“看清楚”。

保持时间(Hold Time):数据在时钟有效沿到来之后,必须保持稳定的最短时间。也就是说,数据不能跑得太快,得让触发器“记住”。

核心公式(建立时间检查):

T_launch + T_clk2q + T_comb + T_setup ≤ T_clk + T_capture_skew

核心公式(保持时间检查):

T_launch + T_clk2q + T_comb ≥ T_hold + T_capture_skew

我在项目中遇到过这样一个案例:一个高速接口模块,建立时间余量只有 20ps。按照常规思路,我加了流水线,结果保持时间又爆了。后来发现是时钟偏斜没算对,调整了时钟树才搞定。嗯,这里要注意,建立时间和保持时间是一对矛盾体,修一个往往会影响另一个。

个人经验: 我习惯在综合阶段就把保持时间检查打开。很多工具默认只检查建立时间,但保持时间违规在物理设计阶段更难修。早点发现,早点处理。

时钟偏斜与抖动

时钟信号不是理想的一根线。它从时钟源到每个触发器的路径长度不同,这就产生了时钟偏斜(Clock Skew)。而时钟源本身的不稳定性,则带来了时钟抖动(Clock Jitter)。

你想想看,这两个东西对时序有什么影响?

  • 时钟偏斜:如果捕获时钟比发射时钟晚到,相当于给了数据更多时间,有利于建立时间,但不利于保持时间。反过来也一样。
  • 时钟抖动:它会让时钟沿的位置不确定。我一般把抖动当作时序预算的一部分,直接扣在时钟周期上。
参数 对建立时间的影响 对保持时间的影响
正偏斜(捕获晚) 有利(余量增加) 不利(余量减少)
负偏斜(捕获早) 不利(余量减少) 有利(余量增加)
时钟抖动 不利(周期变短) 通常不考虑

避坑指南: 我曾经在一个项目中,把时钟偏斜算错了方向。当时以为正偏斜总是好的,结果保持时间违规一大堆。后来才明白,偏斜是一把双刃剑,你得看具体路径。

组合逻辑延迟

组合逻辑延迟,就是数据从触发器的输出到下一个触发器输入所经过的路径延迟。它由两部分组成:

  1. 门延迟:逻辑门本身的延迟,跟工艺、电压、温度有关。
  2. 互连线延迟:导线上的延迟,在先进工艺下占比越来越大。

我个人的习惯是,在早期评估阶段,先按门延迟占 70%、互连线占 30% 来估算。到了物理设计阶段,再根据实际布线情况调整。你想想看,如果一开始就把互连线延迟估得太低,后面时序收敛会非常痛苦。

经验数据(28nm 工艺,典型情况):

  • 一级逻辑门延迟:约 30-50ps
  • 每毫米互连线延迟:约 50-100ps
  • 一个典型 4 输入查找表延迟:约 100-150ps

时序路径分类

静态时序分析中,路径分为四类。我刚开始学的时候觉得分类很烦,后来发现这是解决问题的关键——不同路径的优化方法完全不同。

  • 输入到寄存器(Input to Register):从芯片引脚到内部触发器的路径。受 I/O 约束影响大。
  • 寄存器到寄存器(Register to Register):最核心的路径,也是我们最常优化的。
  • 寄存器到输出(Register to Output):从内部触发器到芯片输出引脚的路径。
  • 输入到输出(Input to Output):纯组合路径,从输入引脚到输出引脚。

为什么要把路径分类?因为每类路径的约束方式不同。比如寄存器到寄存器路径,我们主要关注时钟周期;而输入到输出路径,则要关注输入延迟和输出延迟。

一个小技巧: 我习惯在写约束文件时,先把所有路径按这四类列出来。然后针对每一类,单独写约束。这样后期调试时,一眼就能看出是哪类路径出了问题。

时序路径分类与检查 输入引脚 FF1 组合逻辑 FF2 输出引脚 路径1 路径2 路径3 路径4(纯组合路径) 时钟1 时钟2 图例: I/O引脚 触发器 组合逻辑 路径4(组合路径)

这张图把四类路径都画出来了。你注意看,路径2(寄存器到寄存器)是我们最常打交道的。我一般会先确保路径2的时序收敛,再去处理其他路径。为什么?因为路径2的数量最多,占了整个芯片时序路径的 80% 以上。

总结一下本章要点:

  • 建立时间检查的是数据能不能及时到达,保持时间检查的是数据会不会跑得太快
  • 时钟偏斜和抖动都要纳入时序预算,偏斜的方向决定了它对建立时间和保持时间的影响
  • 组合逻辑延迟在先进工艺下,互连线占比越来越高,不能只盯着门延迟
  • 四类时序路径各有特点,优化方法也不同,先搞定寄存器到寄存器路径

好了,这一章的内容就到这里。记住,时序分析不是纸上谈兵,每个公式背后都有实际项目中的血泪教训。下一章我们聊聊如何写约束文件,到时候我会分享一些我踩过的坑。

可可精品资料库