3. Innovus CTS环境与数据准备

时钟树综合(CTS)是数字后端流程中风险最集中的一步:它要在既有布局上插入大量缓冲器、重构时钟网络,并同时满足 skew、latency、transition 与功耗约束。如果进入 CTS 之前设计本身存在隐患,CTS 只会把这些隐患放大成难以收敛的时序问题。因此,在 ccopt_design 之前,必须完成一次系统性的“设计健康检查”,覆盖时序库、物理库、MMMC 视图、SDC 约束、floorplan 与 placement 质量六个方面。

一、时序库与物理库的一致性检查

Innovus 的时序分析依赖 .lib(或 .db)时序库,物理实现依赖 .lef 物理库,二者必须严格对应。常见问题是:LEF 中某个单元有 MACRO 定义,但 Liberty 中没有对应 cell;或者 Liberty 中定义了 clock gating cell,LEF 却缺少其 pin 的 geometry。这类不一致会在 CTS 插入缓冲器时直接报 IMPSR-2001 之类的错误。

检查方法是在 Innovus 中执行:

checkLibrary -logic_library -physical_library
checkLibrary -timing_library
reportLibrary

重点关注输出中的 Unmatched cells、Missing pin、No timing arc 三类条目。对于时钟路径上会用到的单元(如 CLKBUF、CLKINV、CLKAND、CLKMUX、CLKGATECELL),必须确认其 Liberty 中 clock 相关属性完整,例如 is_clock_gating_cell、clock_gating_integrated_cell 是否设置正确。若缺失,CTS 阶段工具无法识别 clock gating 结构,会把 gating cell 当作普通逻辑处理,导致时钟树结构错误。

二、MMMC 视图配置检查

多模式多端角(MMMC)配置决定了 CTS 在哪些 PVT 条件下优化时钟树。Innovus 中通过 create_analysis_view、set_analysis_view 定义视图,并用 set_operating_conditions 绑定库。检查要点包括:

  • 每个 analysis view 是否都绑定了有效的 operating_condition 与 library_set;
  • setup 与 hold 视图是否成对存在,避免 CTS 只优化 setup 而忽略 hold;
  • 是否存在 inactive 视图被误用于 CTS;
  • 各视图的 rc_corner 是否与提取的 QRC 技术文件匹配。

可用 report_analysis_views 与 report_mmmc 查看当前激活视图。若 CTS 只在一个视图下运行,skew 优化会偏向该角,其他角可能出现严重偏差。建议 CTS 至少激活一个 slow 角(setup)与一个 fast 角(hold),并在 ccopt_design 前用 set_analysis_view -setup {...} -hold {...} 明确指定。

三、SDC 约束检查

SDC 是 CTS 的目标来源。进入 CTS 前必须确认:

  • create_clock 是否覆盖所有真实时钟源,周期、波形、-add 是否正确;
  • 是否存在 create_generated_clock 未定义或分频比错误;
  • set_clock_uncertainty、set_clock_latency、set_clock_transition 是否按 signoff 要求设置;
  • set_false_path、set_clock_groups 是否误将真实时钟路径排除;
  • 是否有 set_dont_touch 误加在时钟单元上。

推荐用 checkTiming -verbose 与 report_clocks 交叉验证。特别要注意:如果 SDC 中 set_clock_uncertainty 只写了 setup 值,CTS 会按该值优化 skew,但 hold 角可能不满足。示例中,若目标周期 1.0ns、setup uncertainty 0.15ns、hold uncertainty 0.05ns,则 CTS 的 skew 预算应至少留出 0.1ns 余量给 OCV 与串扰。

四、Floorplan 与 Placement 质量检查

CTS 的物理质量直接受 floorplan 与 placement 影响。检查项包括:

  • 标准单元行是否连续、是否有大片 blockage 导致缓冲器无法插入;
  • 时钟根节点(clock root)到各 sink 的物理距离是否过于悬殊;
  • 是否存在高密度区域(utilization > 85%)导致 CTS 插入困难;
  • clock gating cell 是否被放置在合理位置,避免长距离绕线。

可用 reportDesign -utilization、checkPlace、reportCongestion 评估。若 placement 后 setup WNS 已经为负且超过周期 20%,应先做 placement 优化再进 CTS,否则 CTS 会在错误基础上继续恶化。

CTS 前设计健康检查:六项输入与判断路径 ① 时序库 / 物理库 checkLibrary cell / pin / clock 属性一致 ② MMMC 视图 report_analysis_views setup / hold 成对激活 ③ SDC 约束 checkTiming / report_clocks clock / uncertainty / false path ④ Floorplan row 连续 / blockage 合理 clock root 位置评估 ⑤ Placement 质量 checkPlace / utilization congestion / WNS 预判 ⑥ 时钟结构预检 clock gating / mux / divider dont_touch 检查 六项检查是否全部通过? 库一致 · 视图成对 · SDC 完整 · 物理可行 进入 ccopt_design CTS 在健康设计上收敛 先修复再 CTS 补库 / 改 SDC / 重做 placement 关键原则 输入不干净,CTS 必返工

五、检查结果判读与修复优先级

六项检查并非同等重要。实践中建议按以下优先级处理:

优先级检查项典型问题修复动作
P0时序库/物理库clock buffer 缺 Liberty 定义补库或替换单元
P0SDC 时钟定义generated clock 缺失补 create_generated_clock
P1MMMC 视图hold 视图未激活set_analysis_view 补 hold
P1Placement 质量utilization > 90%先做 place 优化或降密度
P2Floorplanclock root 偏角调整 root 或加 region
P2时钟结构dont_touch 误加移除或改为 size_only

完成上述检查后,可用一条命令做最终确认:

checkDesign -all
checkTiming -verbose
report_clocks
report_analysis_views

若 checkDesign -all 无 error、checkTiming 无 unconstrained clock、report_analysis_views 中 setup/hold 均 active,且 placement 的 WNS 在可接受范围内,即可认为设计已具备进入 CTS 的健康条件。此时再执行 ccopt_design,时钟树综合的收敛效率与结果质量都会显著提升。

建议把上述六项检查整理成一份 CTS 前检查清单,每次流片前逐项打勾,避免因库或约束遗漏导致 CTS 返工。