1. 时钟树综合在数字后端流程中的定位

时钟树综合(Clock Tree Synthesis,CTS)是数字后端实现流程中承上启下的关键阶段。它位于布局(Placement)之后、布线(Routing)之前,负责把理想时钟网络转换为带有真实缓冲器、反相器和连线的物理时钟树结构。理解CTS的定位,核心是回答三个问题:它从哪里接手、它要交付什么、它如何影响后续的时序签核。

一、CTS在流程中的位置与启动节点

在Innovus的典型实现流程中,CTS并不是一个孤立的命令,而是由一系列前置条件触发和约束的。一个常见的启动顺序如下:

# Innovus 典型 CTS 启动节点(示例流程)
# 1. 完成布局与优化
place_opt_design
# 2. 完成时钟树前的时序与DRV检查
time_design -pre_cts -report_dir ./rpt/pre_cts
# 3. 设置 CTS 约束(时钟定义、NDR、目标偏斜等)
create_ccopt_clock_tree_spec
# 4. 执行时钟树综合
ccopt_design
# 5. 时钟树后时序与DRV检查
time_design -post_cts -report_dir ./rpt/post_cts

可以看到,CTS的启动节点通常是在place_opt_design完成之后、route_design之前。此时标准单元已经摆放完毕,但时钟网络还是“理想”的——工具认为时钟从源点到所有触发器时钟引脚是零延迟、零偏斜的。CTS的任务就是把这个理想网络实例化,插入真实的时钟缓冲器,并平衡各分支的延迟。

在Innovus中,CTS的典型启动命令是ccopt_design,它属于CCOpt(Clock Concurrent Optimization)引擎。与早期cts命令不同,CCOpt把时钟树构建与时序优化、有用偏斜(Useful Skew)结合在一起,因此启动前必须准备好时钟树规格文件(Clock Tree Spec),否则工具无法知道哪些网络需要被当作时钟处理。

二、CTS的目标:不只是“平衡偏斜”

很多人把CTS简单理解为“让所有触发器时钟到达时间一致”,这只说对了一半。CTS的真实目标可以归纳为四个层次:

  • 结构目标:构建一棵物理上可实现的时钟树,插入缓冲器/反相器,控制级数、扇出和连线长度。
  • 时序目标:控制时钟偏斜(Skew)、插入延迟(Insertion Delay)和转换时间(Transition),满足时钟网络的DRV约束。
  • 功耗目标:时钟网络通常是芯片中翻转率最高的网络,CTS需要在缓冲器数量、驱动强度和功耗之间取得平衡。
  • 可布线性目标:时钟树使用的金属层、线宽、间距(NDR)要为后续布线留出资源,避免时钟线成为布线拥塞的瓶颈。

其中,偏斜和插入延迟是最常被讨论的两个参数。偏斜定义为同一时钟域内任意两个触发器时钟引脚到达时间的最大差值;插入延迟定义为时钟源点到触发器时钟引脚的平均延迟。二者并非越小越好,而是要在约束范围内,并与有用偏斜策略配合。

三、CTS的输入与输出

CTS的输入输出关系,是理解其定位最直接的方式。下表给出一个典型项目的输入输出清单(示例参数,非实测):

类别典型内容示例值/说明
输入布局后的DEF/设计数据库标准单元已摆放,电源地已连接
输入时钟定义与SDC约束create_clock、create_generated_clock
输入时钟树规格(CTS Spec)NDR规则、缓冲器列表、目标偏斜
输入工艺库与RC寄生参数LEF、Liberty、QRC技术文件
输出带时钟树的DEF/数据库包含时钟缓冲器与时钟连线
输出CTS时序报告Skew、Insertion Delay、DRV违例
输出时钟树结构报告级数、缓冲器数量、时钟门控单元

从输入输出可以看出,CTS并不是“从零开始”设计时钟,而是在已有布局和约束的基础上,把理想时钟网络物理化。它输出的时钟树质量,直接决定了后续布线阶段能否收敛,以及时序签核阶段是否会出现难以修复的建立/保持违例。

四、CTS与布局布线、时序签核的关系

CTS与前后阶段的关系可以用一条“约束传递链”来理解:布局阶段决定了触发器的物理位置,位置分布又决定了时钟树需要走多远、经过多少级缓冲;CTS阶段插入的缓冲器和连线,又成为布线阶段的固定障碍和时序计算的真实对象;最终时序签核(STA)使用的时钟延迟、偏斜和转换时间,全部来自CTS后的真实时钟树。

因此,CTS前必须做time_design -pre_cts检查,确认建立时间、保持时间和DRV没有严重违例;CTS后必须做time_design -post_cts检查,确认时钟树没有引入新的问题。如果CTS前时序已经崩溃,CTS只会把问题放大,而不是修复它。

CTS 在数字后端流程中的定位与数据流 布局 Placement 标准单元摆放 理想时钟网络 CTS 时钟树综合 插入缓冲器/反相器 平衡偏斜与插入延迟 满足DRV与NDR约束 布线 Routing 时钟线固定 信号线绕障 时序签核 STA 真实时钟延迟 CTS 输入 • 布局后 DEF / 数据库 • SDC 时钟定义 • CTS Spec(NDR/缓冲器) • 工艺库与 RC 参数 CTS 输出 • 带时钟树的 DEF • Skew / Insertion Delay 报告 • DRV 违例报告 • 时钟树结构报告 关键关系 布局决定触发器位置 → CTS 决定时钟延迟与偏斜 → 布线决定寄生参数 → STA 使用真实时钟树签核 CTS 前必须做 pre-CTS 时序检查;CTS 后必须做 post-CTS 时序与 DRV 检查

五、Innovus中CTS的典型启动节点与检查清单

在Innovus中启动CTS之前,建议按以下清单逐项确认。这不是固定模板,而是实际项目中避免返工的最小检查集:

  • 时钟定义完整:所有时钟(包括生成时钟、门控时钟)都已在SDC中定义,且create_clock的源点与设计一致。
  • 时钟树规格已生成:通过create_ccopt_clock_tree_spec生成spec文件,确认其中包含正确的缓冲器列表、NDR规则和目标偏斜。
  • 布局质量可接受:checkPlace无严重违例,拥塞在可控范围,否则CTS插入的缓冲器可能无法合法摆放。
  • pre-CTS时序已检查:time_design -pre_cts报告中的WNS/TNS在可修复范围内,DRV违例数量可控。
  • 电源地已连接:时钟缓冲器的电源地引脚必须已连接,否则CTS后会出现电源网络开路。

完成上述检查后,执行ccopt_design,工具会依次完成时钟树构建、缓冲器插入、偏斜优化和DRV修复。执行结束后,用report_ccopt_clock_trees查看时钟树结构,用time_design -post_cts查看时序变化。如果post-CTS的WNS比pre-CTS明显恶化,通常说明时钟树插入延迟过大或偏斜控制不当,需要回到CTS Spec调整缓冲器策略或NDR规则。

CTS不是“越早做越好”,也不是“越晚做越好”。它必须在布局稳定、时钟定义完整、pre-CTS时序可接受之后启动;同时必须在布线之前完成,因为布线需要知道哪些线是时钟线、哪些区域需要为时钟树预留资源。

总结来说,CTS在数字后端流程中的定位可以概括为:它是理想时钟到物理时钟的转换器,是布局结果到布线约束的传递者,也是时序签核中时钟延迟与偏斜数据的唯一来源。理解这一定位,才能在Innovus中正确选择启动节点、准备输入、判断输出,并为后续的布线与时序收敛打下基础。