时序路径分类:四大路径类型详解

做时序收敛,第一步是什么?

我个人觉得,不是急着调约束,也不是闷头修hold。第一步,你得搞清楚——你面对的是哪种路径。

静态时序分析里,路径一共就四种。说白了,就是信号从哪出发、到哪结束。我刚开始带项目那会儿,有个同事把输入到寄存器的路径当寄存器到寄存器修,折腾了两天没搞定。后来我一问,他连路径类型都没分清楚。嗯,这种坑,咱们今天一次性填平。

1. 寄存器到寄存器路径(Reg-to-Reg)

这是最常见、也是我们花精力最多的一类路径。

信号从一个触发器的时钟端出发,经过组合逻辑,到达另一个触发器的数据输入端。你想想看,整个芯片里,90%以上的时序路径都是这种。STA工具默认分析的,主要就是它。

关键点:这条路径的起点和终点,都有时钟控制。所以它的时序裕量,取决于两个时钟之间的相对关系。

我在项目中遇到过一件事:两个寄存器用的是同一个时钟,但时钟树不平衡,结果setup就是修不干净。后来我查了查,发现是CTS阶段没做好skew优化。所以啊,Reg-to-Reg路径,不仅要看逻辑深度,还得盯着时钟质量。

我的习惯:每次看时序报告,先过滤出Reg-to-Reg路径。如果这条路径的slack是负的,我会先检查时钟周期对不对,再看组合逻辑级数。一般超过15级,就得考虑插流水线了。

2. 输入到寄存器路径(Input-to-Reg)

这条路径从芯片的输入端口开始,经过片外到片内的组合逻辑,最终到达一个触发器的数据端。

说白了,就是外部信号进来,经过一些缓冲和连线,然后被内部时钟采到。这条路径的难点在于——输入延迟是外部给的,你控制不了。

我记得有一次,客户给的input delay约束写错了,差了0.5ns。结果我这边怎么修都修不完,后来一查,是约束本身的问题。所以,遇到Input-to-Reg路径时序紧张,先别急着改电路,先确认一下input delay设得对不对。

避坑指南:我曾经吃过一次亏——芯片回来后,某个输入接口死活采不到正确数据。后来发现是input delay设得太乐观,实际片外驱动能力不够。从那以后,我每次都会留0.2~0.3ns的余量给input delay。

3. 寄存器到输出路径(Reg-to-Output)

信号从内部寄存器出发,经过组合逻辑,到达芯片的输出端口。

这条路径的终点是片外,所以它的时序要求取决于外部器件什么时候需要这个数据。output delay就是用来描述这个外部需求的。

我个人习惯,在做Reg-to-Output路径分析时,会特别关注输出端口的负载。负载越大,输出延迟越大。你想想看,如果输出要驱动一个大电容,那信号上升时间会变慢,setup自然就紧张了。

核心思路:Reg-to-Output路径的收敛,靠的是两件事——一是把输出寄存器放得离端口近一点,二是把output delay设准。

4. 输入到输出路径(Input-to-Output)

这条路径从输入端口直接到输出端口,中间不经过任何寄存器。说白了,就是纯组合逻辑路径。

这种路径在芯片里不多见,但一旦出现,往往很棘手。为什么?因为它没有时钟同步,完全靠组合逻辑的延迟来满足时序。而且,它同时受input delay和output delay的双重影响。

我在项目中遇到过一条Input-to-Output路径,延迟要求是5ns以内。结果综合出来的逻辑有7ns。我试了各种优化方法,最后没办法,只能在中间插了一级寄存器,把它变成了两条路径。嗯,有时候,绕不过去就加流水线,这是最实在的办法。

特别注意:Input-to-Output路径在STA中经常被忽略。我建议你每次做完时序分析,专门过滤一下这种路径,看看有没有violation。我曾经就漏掉过一条,结果芯片回来后,某个直通信号延迟太大,导致系统跑飞了。

四种路径对比一览

路径类型 起点 终点 是否受时钟控制 常见问题
Reg-to-Reg 寄存器时钟端 寄存器数据端 是(两端都有时钟) 时钟skew、逻辑级数过多
Input-to-Reg 输入端口 寄存器数据端 部分(终点有时钟) input delay不准、片外驱动弱
Reg-to-Output 寄存器时钟端 输出端口 部分(起点有时钟) 输出负载大、output delay设错
Input-to-Output 输入端口 输出端口 否(纯组合逻辑) 延迟不可控、易被忽略

四种路径的关系图

下面这张图,是我自己画的一个结构图。它把四种路径放在一起,方便你理解它们在整个芯片中的位置关系。

芯片边界 输入 输出 FF1 FF2 组合逻辑 组合逻辑 组合逻辑 ① Reg-to-Reg ② Input-to-Reg ③ Reg-to-Output ④ Input-to-Output ① Reg-to-Reg ② Input-to-Reg ③ Reg-to-Output ④ Input-to-Output

这张图里,四种路径一目了然。你每次做时序分析时,可以对照这张图,看看自己当前在修哪条路。我个人觉得,把路径类型分清楚,时序收敛就成功了一半。

一个小技巧:在PrimeTime或Tempus里,你可以用命令直接过滤出某类路径。比如查Input-to-Reg,就用report_timing -from [all_inputs] -to [all_registers]。这样出来的报告,针对性更强,修起来也更快。

好了,四种路径就讲到这里。记住一句话:路径类型不同,修法也不同。别拿Reg-to-Reg的思路去修Input-to-Output,那是浪费时间。

可可精品资料库