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 会在错误基础上继续恶化。
五、检查结果判读与修复优先级
六项检查并非同等重要。实践中建议按以下优先级处理:
| 优先级 | 检查项 | 典型问题 | 修复动作 |
|---|---|---|---|
| P0 | 时序库/物理库 | clock buffer 缺 Liberty 定义 | 补库或替换单元 |
| P0 | SDC 时钟定义 | generated clock 缺失 | 补 create_generated_clock |
| P1 | MMMC 视图 | hold 视图未激活 | set_analysis_view 补 hold |
| P1 | Placement 质量 | utilization > 90% | 先做 place 优化或降密度 |
| P2 | Floorplan | clock 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,时钟树综合的收敛效率与结果质量都会显著提升。