2. 时钟树基础概念与质量指标
时钟树综合(CTS)的目标不是把时钟“连起来”这么简单,而是要在延迟、偏斜、转换时间、功耗、面积等多个互相牵制的指标之间取得平衡。要判断一棵时钟树做得好不好,必须先建立一套可量化、可复现的评价体系。本节围绕六个核心指标展开:时钟偏斜(Skew)、时钟延迟(Latency)、插入延迟(Insertion Delay)、转换时间(Transition/Slew)、时钟不确定性(Uncertainty)以及时钟树功耗与面积,并说明它们如何共同构成后续优化的评价基准。
一、时钟延迟与插入延迟:先分清“从哪算到哪”
讨论延迟前必须先约定参照点,否则数值没有意义。在 Innovus 中通常区分两个概念:
- 插入延迟(Insertion Delay):从时钟源点(clock source,通常是 CTS 的 root pin,如
clk输入端口或 PLL 输出)到某个寄存器时钟引脚(sink pin)的路径延迟。它描述“时钟信号走了多远”。 - 时钟延迟(Latency):常与插入延迟混用,但更严格地说,它指从时钟定义源(如 create_clock 的源点)到 sink 的累计延迟,包含源端到 root 的延迟。工程上若源点即 root,两者数值一致。
插入延迟本身没有绝对的好坏,关键是各 sink 之间是否一致。假设某设计有 4 个 sink,插入延迟分别为 0.82 ns、0.85 ns、0.84 ns、0.86 ns,则最大最小差为 0.04 ns,这就是偏斜的来源。若整体延迟偏大(例如 1.5 ns),会压缩建立时间余量,因为数据路径要在下一个时钟沿到来前完成,而时钟沿被推迟了。
二、时钟偏斜:CTS 最核心的质量指标
时钟偏斜(Skew)指同一时钟域内不同 sink 之间时钟到达时间的差异。它直接决定时序余量:
Setup slack ≈ (T_clk + skew_capture - skew_launch) - T_data - T_setup - uncertainty
Hold slack ≈ T_data + skew_launch - skew_capture - T_hold - uncertainty
可见偏斜既可能帮助也可能伤害时序,因此 CTS 追求的是受控的、可预测的偏斜,而非盲目追求零偏斜。实际项目中常按域设定目标,例如全局 skew 目标 50 ps,关键域 30 ps。评估时通常看三个量:全局最大偏斜、各时钟域内部偏斜、以及跨域(如分频时钟之间)的偏斜。
三、转换时间:被低估的“隐形指标”
转换时间(Transition,也称 Slew)描述时钟信号边沿从低到高或从高到低的过渡快慢,通常以 10%–90% 或 20%–80% 电压区间测量。它影响三件事:
- sink 引脚处 slew 过大会增加寄存器时钟引脚的延迟不确定性,间接放大偏斜;
- slew 与驱动能力、负载电容相关,是判断是否需要插入 buffer 的依据;
- slew 恶化会增大短路功耗。
Innovus 中常用 set_clock_transition 设定目标,CTS 后通过 report_clock_tree -slew 检查各 sink 的实际转换时间。经验上,若某 sink slew 超过目标值 1.5 倍,应视为需要优化的节点。
四、时钟不确定性:为抖动和余量留出空间
时钟不确定性(Uncertainty)是在时序分析中人为加入的余量,用于覆盖 PLL 抖动、时钟源抖动、OCV 等无法精确建模的因素。它通过 set_clock_uncertainty 设置,分为 setup 与 hold 两类。不确定性设得越大,时序越难收敛;设得太小则可能掩盖真实风险。CTS 阶段通常先沿用前端设定,待时钟树稳定后再评估是否可收紧。
五、功耗与面积:CTS 的代价
时钟树是芯片中翻转率最高的网络之一,其功耗可占动态功耗的 20%–40%。功耗主要来自三部分:
- 时钟缓冲器/反相器的开关功耗:与 buffer 数量、尺寸、翻转率成正比;
- 时钟线网的充放电功耗:与线长、负载电容、电压平方成正比;
- 短路功耗:slew 越慢越显著。
面积则体现为 CTS 插入的 buffer/inverter 数量与总面积。功耗与面积往往与偏斜目标冲突:要压低偏斜,常需更多 buffer 和更对称的拓扑,代价是功耗和面积上升。因此评价体系必须把“偏斜达标”与“功耗面积可接受”放在一起看。
六、把六个指标串成评价体系
单独看任何一个指标都不足以判断时钟树质量。合理的做法是建立一张“指标—目标—检查命令—判定标准”的对照表,在 CTS 前后各评估一次。下表给出一个示例(数值为教学假设,非实测):
| 指标 | 示例目标 | 检查方式 | 判定标准 |
|---|---|---|---|
| 插入延迟 | ≤ 1.0 ns | report_clock_tree -summary | 各 sink 延迟分布集中,无异常长路径 |
| 时钟偏斜 | 全局 ≤ 50 ps,关键域 ≤ 30 ps | report_clock_tree -skew | max−min 达标,跨域偏斜单独确认 |
| 转换时间 | ≤ 0.15 ns | report_clock_tree -slew | 无 sink 超过目标 1.5 倍 |
| 不确定性 | setup 0.10 ns / hold 0.05 ns | report_timing 中 uncertainty 项 | 与前端设定一致,收敛后可评估收紧 |
| 功耗 | 时钟网络功耗占比 ≤ 30% | report_power -clock_network | 与 CTS 前对比,增量可接受 |
| 面积 | buffer 面积增量 ≤ 5% | report_area / report_clock_tree | 无冗余 buffer,层级合理 |
需要强调的是,这些指标之间存在明确的耦合关系。压低偏斜通常需要增加 buffer 和对称布线,功耗与面积随之上升;放宽转换时间目标可以减少 buffer,但 slew 恶化会放大延迟不确定性。因此后续章节中的每一项优化动作,都应回到这张评价表上判断“收益是否值得代价”。
建立评价体系后,CTS 的每一步优化都有了统一的度量语言:偏斜回答“对齐得如何”,插入延迟回答“走了多远”,转换时间回答“边沿质量如何”,不确定性回答“留了多少安全余量”,功耗与面积回答“付出了多少代价”。这六个维度共同构成后续时钟树综合与优化的判断基准。