ICC II 布线优化实战:从 route_auto 到 route_opt 的全流程解析
1. ICC II布线流程概述在数字芯片设计流程中布线Routing是将逻辑连接转化为物理连接的关键步骤。ICC II作为Synopsys推出的新一代物理实现工具其布线引擎采用了全新的架构相比传统工具在收敛性和运行效率上都有显著提升。我经历过多个28nm到7nm项目的实战发现合理的布线策略能减少30%以上的后期迭代工作量。布线阶段通常发生在布局Placement和时钟树综合CTS之后此时设计应满足以下基本条件拥塞水平控制在5%以内时序违例setup/hold在可接受范围时钟网络已完成初步布线逻辑DRC问题已基本解决完整的布线流程包含三个核心阶段全局布线Global Route在虚拟网格上进行拓扑规划走线分配Track Assignment确定金属层的实际走线轨迹详细布线Detail Route完成最终物理连接并修复DRC2. 布线前的关键准备2.1 设计状态检查在启动route_auto之前必须执行全面的设计检查。我曾在一个项目中因忽略这项检查导致后期出现难以定位的pin access问题。推荐使用以下组合命令check_design -checks pre_route_stage check_routability -verbose重点检查项包括是否存在被阻挡的端口blocked ports边界外引脚out-of-boundary pins最小网格违规minimum-grid violation引脚访问边缘规则pin access edge rules2.2 次级电源网络处理很多人会忽略次级电源引脚Secondary PG pins的布线这可能导致后期电迁移问题。建议采用以下策略# 设置每个PG pin的最大连接数 set_app_options -name route.common.number_of_secondary_pg_pin_connections -value 4 # 应用非默认规则(NDR) create_routing_rule sec_pg_rule \ -width {M1 0.2 M2 0.2 M3 0.2} \ -vias {VIA12 VIA23} set_routing_rule [get_nets VDDH] -rule sec_pg_rule \ -min_routing_layer M2 -max_routing_layer M33. 核心布线阶段详解3.1 全局布线实战技巧全局布线GR并不产生实际金属连线而是通过0宽度的虚拟线进行路径规划。在16nm以下工艺中我发现这些技巧特别有用set_app_options -name route.global.timing_driven -value true set_app_options -name route.global.crosstalk_driven -value false关键注意事项使用gui_start查看GR结果时虚拟线显示为彩色细线避免布线穿过电源网络区域P/G nets通过routing guide控制特定区域的布线方向3.2 走线分配优化Track AssignmentTA阶段会将虚拟线转化为实际走线。这个阶段对时序影响很大建议set_app_options -list { route.track.timing_driven true route.track.crosstalk_driven true }常见问题处理长线分段过长的走线会被自动分段可通过set_max_length约束控制通孔优化使用optimize_routes命令减少通孔数量串扰预防相邻线网间距不足时工具会自动插入shield net3.3 详细布线进阶技巧Detail RouteDR是最后物理实现的阶段。在7nm项目中这些设置帮我解决了90%的DRC问题route_detail -incremental true \ -max_number_iteration 60 \ -antenna true \ -hop_layers_to_fix_antenna true特殊场景处理天线效应修复优先使用layer jumping而非二极管插入冗余通孔先进工艺建议采用reserve space模式金属优化设置route.detail.optimize_wire_via_effort_level为high4. 布线后优化全攻略4.1 route_opt的黄金配置route_opt是布线后的综合优化阶段这个配置在多个项目中验证有效set_app_options -list { route_opt.flow.enable_ccd true route_opt.flow.enable_power true route_opt.flow.size_only_mode equal_or_smaller time.use_pt_delay true }优化策略选择时序优先打开timing_driven并设置high effort功耗敏感启用power recovery模式面积约束使用size_only模式限制cell增大4.2 时序收敛技巧与PrimeTime的协同优化是ICC II的特色功能。建议采用以下流程首次route_opt使用path-based优化二次route_opt关闭CCD专注power优化最终eco_opt处理剩余违例# 首次优化 set_app_options -name time.pba_optimization_mode -value path route_opt # 最终优化 set_app_options -list { route_opt.flow.enable_ccd false route_opt.flow.enable_power power } route_opt4.3 特殊结构处理**通孔梯子Via Ladder**在先进工艺中越来越重要。性能敏感路径应该启用set_app_options -name opt.common.enable_via_ladder_insertion -value true insert_via_ladders -nets [get_nets -hsc *clk*]实施要点EM型via ladder需要工艺文件支持性能型via ladder在place_opt阶段就会考虑可通过report_via_ladders检查插入情况5. 常见问题排查指南5.1 违例诊断流程当布线后仍存在违例时建议按此顺序排查运行check_routes检查物理DRC使用report_timing -max_paths 100分析关键路径检查report_power确认功耗热点通过report_congestion查看剩余拥塞5.2 典型问题解决方案案例1持续存在的max_transition违例检查cell间距是否过大尝试set_max_fanout约束考虑回到CTS阶段调整buffer位置案例2布线资源不足检查routing blockage设置调整route.global.timing_driven_effort_level为medium考虑使用route_eco进行局部优化案例3天线效应难以收敛确认antenna rule文件是否正确加载尝试set_antenna_rule -mode strict对特殊net手动插入二极管6. 实战经验分享在最近的一个5nm项目中我们发现route_opt的收敛效率与以下因素强相关电源网络完整性IR drop影响时序时钟树质量skew大于50ps时优化困难初始布局拥塞水平超过10%将导致布线迭代激增一个实用的调试技巧是保存各阶段快照save_block -as ${design_name}_pre_route save_block -as ${design_name}_post_route save_block -as ${design_name}_post_opt当优化陷入僵局时可以尝试回退到前一阶段调整约束条件后重新优化。记住布线是个迭代过程很少能一次达到完美结果。