时钟树综合深入
更新时间:2026-09-25。时钟是芯片的“心跳”:同一条时钟路径上多一级缓冲、偏一点距离,就可能让几百万个触发器的采样时刻集体漂移。本篇是物理实现系列中专门讨论时钟网络的一篇,紧接 OCV/AOCV/POCV,讲清工具如何把一个时钟根节点长成一棵覆盖全芯片的缓冲树,以及工程师在 skew、延迟、功耗和多场景签核之间怎么取舍。
本文要回答的问题
- CTS 到底在优化什么?为什么 skew 为零不是目标,甚至不可能实现?
- insertion delay(插入延迟)由哪些部分组成,它和 OCV、时序签核是什么关系?
- useful skew 怎么“借时间”修 setup?为什么借完必须回头查 hold 和连锁路径?
- 门控时钟(ICG)、分频时钟、多源时钟给 CTS 增加了哪些约束?
- 为什么时钟网络要霸占高层宽金属、加 NDR 和 shielding?时钟功耗能占到芯片多少?
一、CTS 的目标:不是零 skew,而是受控 skew
CTS(Clock Tree Synthesis,时钟树综合)的输入是一个已经布好局的网表和时钟约束(时钟根、周期、uncertainty、generated clock 等),输出是一棵或多棵由反相器/缓冲器和时钟线组成的物理网络,把时钟送到每一个时序单元的时钟引脚(称为 sink)。工具做的事可以拆成三层:
- 平衡到达时间:让所有相关 sink 的时钟到达时刻尽量接近,这个差值就是 clock skew;
- 控制插入延迟:从时钟根到 sink 的总延迟(insertion delay)不能无限大,否则时钟像经过一根长水管,片上变异和占空比失真都会被放大;
- 守住物理代价:缓冲器数量、时钟线电容、功耗、走线拥塞和电气 DRC(max transition / max capacitance / max fanout)都要在预算内。
关键认知是:零 skew 既做不到也不该追求。一方面,芯片上几十万到几百万个 sink 分布在几十平方毫米内,金属有 RC 延迟、缓冲器有固有延迟,温度和工艺还在逐点变化,数学上就不存在让所有点严格同时到达的网络;另一方面,时序真正关心的只是“有数据交换关系的两个触发器之间”的相对 skew,两个毫无往来的模块之间,skew 大一点完全不影响功能。所以工具默认做的是 useful skew 感知的平衡:在相关 sink 之间压 skew,在无关区域省缓冲、省功耗。强行全局零 skew 会插入大量冗余缓冲,时钟功耗和 insertion delay 反而一起恶化。
时钟树的物理形态也随规模演化。小模块常用平衡二叉树;中大芯片常见 H-tree(从中心按 H 形逐级四分,理论上各分支等长、skew 天然对称)、X-tree;到了高频高性能设计,单纯靠树已经压不住片上变异,会在末端铺一层 clock mesh(时钟网格):先用少数强驱动把网格整片充到同一电位,再由很短的竖线(local trunk)接到每个触发器。mesh 的 skew 极小、对 OCV 不敏感,代价是电容和功耗巨大——一颗高端 GPU 的时钟网格可以吃掉整个时钟功耗的相当一部分,只有频率和良率收益抵得过电费时才用。
| 结构 | skew 特性 | 功耗/布线代价 | 典型场景 |
|---|---|---|---|
| 平衡缓冲树 | 依赖工具平衡,中等 | 低 | 一般模块、中低频 SoC |
| H-tree/X-tree | 几何等长,对称性好 | 中 | 中端处理器、收发器 |
| clock mesh + local trunk | skew 极小、抗 OCV | 高(整片网格常翻转) | 高频 CPU/GPU、高性能核 |
二、insertion delay 与 OCV:被反复施加的悲观量
insertion delay 指从时钟定义点(通常是 PLL 输出或端口)到 sink 的延迟,由两部分组成:时钟网线上的 RC 延迟(wire latency)和沿途缓冲器的门延迟(cell latency)。它本身不直接决定能不能跑高频——周期约束关心的是数据和时钟的相对关系——但它会通过三条途径影响签核:
- 占空比与不确定性:延迟越长,经过的缓冲级数越多,慢角下上升/下降沿累积失配越明显,时钟高电平宽度可能被压缩,影响负边沿触发和半周期路径;
- OCV 放大:OCV/AOCV/POCV 对时钟路径施加 derate 系数,路径越长、级数越多,被乘上的悲观量绝对值越大,launch 和 capture 两条时钟支路算出的有效 skew 越糟;
- 跨时钟域和接口:片内生成时钟延迟过大,会拉大它与参考时钟、与板级时钟之间的相位差,接口时序更难收敛。
这正是工具要同时压 skew 和 insertion delay 的原因,而不是只盯一个数字。签核时还有一个必须配套的机制叫 CPPR(Clock Path Pessimism Removal,时钟路径悲观去除):考虑一条 launch 触发器和 capture 触发器共用的那段时钟路径,分析时为了保守,launch 支路用慢角、capture 支路用快角(或反之),同一段物理网络被按两种极端条件各算一次,凭空多出一段延迟差。CPPR 识别出公共段,把这段重复悲观量补回。CTS 的结构直接决定有多少路径可以被认定为“公共”——分叉越早、共用段越短,能补回的悲观量越少,时序报告越难看。所以好的时钟树不仅要平衡,还要让有数据往来的 sink 尽量共享更长的前段路径。
三、useful skew:用相位差主动借时间
zero skew 是默认追求,但有时故意制造一点 skew 反而能救时序,这就是 useful skew(有用偏斜)。看一个两拍流水线:第一级组合逻辑延迟 5.2ns,第二级只有 2ns,周期 5ns,第一级 setup 违例 0.2ns。如果让第二级触发器的 capture 时钟晚到 0.2ns(增加它的插入延迟),数据就多获得 0.2ns 的采样窗口,setup 立刻收敛。时间不是凭空产生的,而是从第二级“借”来的:第二级本来有 3ns 余量,借出 0.2ns 后仍有 2.8ns。
useful skew 的实现通常靠在目标时钟支路加缓冲/调延迟单元,或由工具在 CTS 阶段按时序驱动自动平衡。但它有三条铁律,每一条踩过都会返工:
- 必须重查 hold。capture 时钟晚到,意味着上一拍数据和当前拍数据之间的“时间缝隙”变小,hold 窗口更容易被穿透——慢时钟沿 + 快数据的角下尤其危险。useful skew 修 setup 往往要在数据路径补一点 hold 缓冲,省不了。
- 沿链路连锁传播。时钟是共享资源,给一个 sink 加延迟,同一分支上其他 sink 跟着晚到,可能把本来干净的相邻路径推出违例。借时间要沿流水线逐段算“余额”,不能只看一条路径。
- 必须在多模多角下同时成立。某个角下借的 0.2ns,在另一个角下 skew 方向可能反转(这叫 skew 翻转),修 setup 的动作在快角变成制造 hold 违例。所以 useful skew 的结论要过全部签核 scenario。
下图把借时间的闭环画出来:定位违例路径 → 判断相邻拍有没有余量可借 → 调 capture 相位 → 回头查 hold、连锁路径和多角,任何一环不满足就回退。
工程上的经验是:useful skew 适合收尾阶段修“孤立、余量充足”的少量违例;如果一条链路上要连续借三四次,说明微结构或 floorplan 本身有问题,应该回去改 RTL 或调整流水级划分,而不是靠时钟相位硬撑——后者会把时序脆弱性一路带到签核和 ECO。
四、ICG、分频与多源:时钟结构的复杂度来源
真实芯片很少只有一个干净的时钟根,CTS 要处理多种结构性时钟,每一种都改变树的形状和平衡约束。
门控时钟(ICG,Integrated Clock Gating) 是低功耗的主力:在一簇触发器暂时不用时,用一个使能信号关断它们的时钟,翻转归零,动态功耗随之消失。ICG 单元内部由一个低电平有效锁存器加与门构成,锁存器保证 EN 只在时钟低电平期间变化,避免输出毛刺。它给 CTS 带来两件事:一是 ICG 的时钟引脚本身变成树上的内部节点,门控后不同簇由不同的 ICG 供电,工具要分别平衡“ICG 到其下游 sink”这一段(balanced over same enable grouping);二是 ICG 的使能信号 EN 是普通数据路径,必须在时钟采样沿前收敛,否则该关断时没关、该开时没开。常见错误是只盯着时钟树平衡,却让 EN 路径留着 setup 违例。
分频/生成时钟(generated clock):分频器输出的时钟边沿与源时钟有确定相位关系,工具需要在约束里正确声明 generated clock,CTS 才知道把分频寄存器的时钟输出当作新的根继续长树,并正确处理 launch 用分频时钟、capture 用源时钟这类跨相位路径。声明缺失会让工具把它当普通数据,时序和平衡全错。
多源/可切换时钟(clock mux):为了兼顾性能和省电,很多模块的时钟可在高频晶振和低频 PLL 之间切换。mux 的两路输入属于两棵时钟树,CTS 要分别平衡,还要保证切换过程无毛刺(通常用无毛刺 clock mux / glitch-free mux,靠两个使能互锁实现)。多源时钟还直接引出多模式 CTS:功能模式走高速时钟、测试模式走 scan 时钟、低功耗模式走 32kHz,工具要在同一棵物理网络上让多个模式的 skew、DRC 都满足,而不是各长各的、最后物理上打架。
| 时钟类型 | CTS 关注点 | 易踩坑 |
|---|---|---|
| ICG 门控 | 同使能簇内平衡;EN 路径时序 | EN 未收敛、跨簇误平衡 |
| 分频 generated clock | 声明源与分频关系,继续长树 | 漏声明被当数据 |
| mux 多源 | 两棵树分别平衡、切换无毛刺 | 切换产生时钟毛刺 |
| 多模式 | 同一网络满足多 scenario | 只优化功能模式 |
ICG 带来的结构关系如下图:时钟根先到各个 ICG,再由 ICG 分别驱动各自的使能簇,使能逻辑由数据路径控制,必须在采样沿前稳定。
五、物理实现:高层金属、NDR、shielding 与时钟功耗
时钟网络是片上最“娇贵”的走线,物理上享有明显特权。
- 高层宽金属:上层金属厚、电阻小,时钟主干尽量走最高两三层金属,用比信号线更宽的线,降低 RC 延迟和电压降;
- NDR(Non-Default Rule,非默认规则):时钟线用加宽线宽、加大间距的专用规则。加宽降电阻,加间距减少与相邻信号线的耦合电容,从而抑制串扰、降低延迟对相邻翻转的敏感度,也让 OCV 更可控;
- shielding(屏蔽):对特别敏感的时钟(如高速 SerDes、PLL 参考时钟)两侧并行走地线或电源线,把耦合电容接到固定电位, aggressor 的翻转无法调相时钟;
- 专用缓冲与对称布局:时钟缓冲器选低抖动、上升/下降沿对称的单元,放置时尽量让分支等长,避免长线拖着 max transition 违例。
这些特权不是免费的:高层金属和宽线挤占稀缺布线资源,shielding 让相邻通道减半。CTS 之前通常要先做 clock planning,预留时钟通道,否则后期会和信号线抢资源。
功耗方面更需要正视。时钟网络的特点是每个周期都在全芯片翻转,而且挂着全芯片最大的电容之一——所有触发器时钟引脚加上整棵树的线电容。即便没有任何有效数据,时钟树也在持续对这些电容充放电。典型数字设计中时钟相关功耗(时钟缓冲、树线、触发器内部时钟部分)可以占到总动态功耗的 30%~40%,某些设计更高。这就是为什么 ICG、粗粒度时钟关断、必要时多层次 mesh 精简在现代低功耗流程里如此重要:关掉一个空闲模块的时钟,等于同时砍掉该模块时钟树上每个周期必发生的那部分开关功耗。反过来,CTS 优化时如果只压 skew、拼命加缓冲,时钟功耗会悄悄上涨,需要在 skew、insertion delay 和功耗三者间显式设目标、读报告,而不是单看时序。
六、ECO 阶段的时钟树维护
CTS 不是一次成型、之后不能碰的。布局布线后期为了修时序,会不断做 ECO:增删数据路径缓冲、换单元、加 hold 延迟。这些改动会改变局部负载和单元位置,进而影响时钟平衡。因此每次实质 ECO 后要做增量 CTS(incremental CTS),让工具只重平衡受影响的局部分支,再重跑时序。
几个收尾要点:
- 后期尽量不动时钟主干。越接近流片,越只允许在局部小段调整,主干重平衡可能让全芯片 skew 报告翻盘,前面签核结论全部作废;
- hold 修复通常最后做。hold 不随周期改善,且 hold 缓冲会增加数据路径负载,太早大量插 hold 缓冲会干扰 setup 收敛和时钟平衡;
- 每次 ECO 后配套重跑:增量 STA、物理 ECO 的等价性检查(LEC)和物理验证都要基于新的时钟树数据;
- 时钟相关 waiver 要留痕:任何被接受的残余 skew 或 uncertainty,都要有对应 scenario 和分析依据。
常见坑
- 只压全局 skew、不看功耗和 insertion delay:树长得过度对称,缓冲爆炸,时钟功耗和 OCV 悲观量一起涨。
- useful skew 修一处崩多处:没沿链路算余量、没重查 hold,多角下出现 skew 翻转。
- ICG 只当平衡节点、不管 EN:使能信号时序未收敛,门控在错误时刻开关。
- generated clock 漏声明:分频时钟被当普通数据,平衡和时序全错。
- 时钟走线和信号抢资源:没预留高层通道、没用 NDR,后期串扰和 transition 违例频发。
这一篇在知识体系里的位置
本篇讲时钟“网络怎么长”,它的时序分析基础是 OCV/AOCV/POCV 的 derate 与 CPPR;时钟树上的局部修改属于 物理 ECO 的闭环;时钟门控和时钟功耗又与低功耗设计、下一篇 多比特与电源门控 直接衔接。理解时钟树,也是理解高频设计为何宁可铺 mesh、宁可牺牲功耗也要压 skew 的前提。
总结
CTS 的本质是在全芯片尺度上把时钟做成“相关 sink 之间到达时间受控、功耗和延迟可接受”的物理网络:零 skew 既不可能也无必要,真正要管的是相对 skew、insertion delay 在 OCV/CPPR 下的放大、以及时钟占掉的三到四成动态功耗;useful skew、ICG、分频和多源时钟都是有力的杠杆,但每一项都必须在 hold、连锁路径和多模多角下同时成立,越接近流片越只敢做局部增量调整。