3. 时序分析基础:时序路径的定义,建立时间与保持时间,时钟周期与频率

好,咱们进入正题。时序分析,说白了就是回答一个问题:你的芯片到底能跑多快?

我刚开始做后端时,觉得时序分析就是跑个工具,看看有没有红色violation。后来吃过亏才明白——不理解时序的本质,你连工具报的错都看不懂。今天咱们就把最基础的三块内容掰开揉碎了讲清楚。

3.1 时序路径:信号走的每条路,都得算清楚

什么是时序路径?很简单——信号从起点到终点走过的路。

在芯片里,时序路径通常分四类:

  • 输入到寄存器:从芯片引脚到第一个触发器的D端
  • 寄存器到寄存器:从触发器的时钟端到下一个触发器的D端(最常见)
  • 寄存器到输出:从最后一个触发器的Q端到芯片输出引脚
  • 输入到输出:纯组合逻辑路径,没有寄存器

我个人习惯把路径想象成一条「接力赛道」。每个触发器就是一个接力点,组合逻辑就是中间的跑道。信号从起点出发,经过组合逻辑的延迟,最终到达终点。

关键点:每条路径都有起点和终点。起点通常是时钟引脚或输入端口,终点是触发器的数据端或输出端口。STA工具会枚举所有可能的路径,一条一条检查。

我在项目中遇到过一种情况:工具报了上千条violation,我一看,全是同一个模块的输入到输出路径。后来发现是约束没写对,工具默认用了很紧的约束。所以啊,路径定义清楚,约束才能写对。

3.2 建立时间与保持时间:触发器的两个「脾气」

每个触发器都有两个硬性要求:

  • 建立时间(Setup Time, Tsu):数据必须在时钟沿到来之前稳定下来,这个提前量就是建立时间。
  • 保持时间(Hold Time, Th):数据必须在时钟沿到来之后继续保持稳定,这个保持时长就是保持时间。

你想想看,触发器就像一个「拍照」的相机。时钟沿就是按下快门的瞬间。建立时间要求你在按下快门之前摆好pose,保持时间要求你按下快门之后别乱动。

我的经验:建立时间 violation 通常可以通过降低频率或优化组合逻辑来解决。保持时间 violation 更麻烦,因为它和频率无关,只能靠加 buffer 或调整路径延迟来修。

我曾经在一个28nm的项目里,遇到一个保持时间 violation,修了整整三天。最后发现是时钟树综合时,某个分支的时钟延迟比数据路径还大,导致数据「跑得太快」——说白了就是数据比时钟还早到达,违反了保持时间。

这里有个公式,大家记一下:

建立时间检查:T_clk + T_skew > T_co + T_logic + T_su
保持时间检查:T_co + T_logic > T_hold + T_skew

其中:

  • T_clk:时钟周期
  • T_skew:时钟偏斜(两个触发器的时钟到达时间差)
  • T_co:触发器时钟到输出的延迟
  • T_logic:组合逻辑延迟
  • T_su:建立时间
  • T_hold:保持时间

注意:建立时间检查用的是最慢路径(max delay),保持时间检查用的是最快路径(min delay)。这两个检查的 corner 不同,千万别搞混了。

3.3 时钟周期与频率:芯片的「心跳」

时钟周期和频率的关系,小学生都知道:

频率 = 1 / 周期

比如1GHz的时钟,周期就是1ns。但实际设计中,你不可能让所有路径都在1ns内完成。为什么呢?因为还有时钟不确定性、片上波动、温度电压变化等等。

我一般会留10%~20%的余量。比如目标频率是1GHz,我会按0.9ns的周期去约束,这样流片回来才有把握。

目标频率 理论周期 实际约束周期(留10%余量)
1 GHz 1.000 ns 0.900 ns
500 MHz 2.000 ns 1.800 ns
200 MHz 5.000 ns 4.500 ns

嗯,这里要注意:时钟周期决定了你能跑多快,但建立时间和保持时间决定了你能不能跑那么快。三者是联动的,缺一不可。

3.4 本章知识体系

下面这张图,是我自己画的,把本章的核心逻辑串起来了:

时序分析基础:三大核心概念 时序路径 信号从起点到终点的路 建立时间 时钟沿之前数据必须稳定 保持时间 时钟沿之后数据必须稳定 时钟周期与频率 频率 = 1 / 周期 三者关系 时序路径定义了检查范围,建立/保持时间定义了检查标准,时钟周期定义了检查目标

这张图你看懂了吗?时序路径是「检查范围」,建立/保持时间是「检查标准」,时钟周期是「检查目标」。三者缺一不可,共同构成了STA的基石。

一句话总结:时序分析就是检查每条路径上的数据,能不能在时钟周期内满足建立时间和保持时间的要求。做不到,芯片就废了。

好了,这一章的内容就这些。下一章咱们会深入讲时钟约束怎么写,那是STA里最容易出错的地方。到时候我会分享几个我踩过的坑,保证让你少走弯路。


可可精品资料库