ICC II布线实战:从route_auto到route_opt,我是如何一步步搞定DRC违例和时序收敛的
ICC II布线实战:从route_auto到route_opt的DRC与时序收敛深度解析
在28nm以下工艺节点的芯片设计中,布线阶段往往成为项目进度的关键瓶颈。我曾在一个7nm移动SoC项目中,面对超过200万instance的设计,初始布线后DRC违例高达1.5万个,时序收敛更是陷入僵局。本文将分享如何通过ICC II的进阶布线技术,将DRC违例降至个位数并实现时序签核的完整实战路径。
1. 布线前的战略准备
布线绝非简单的连线操作,而是物理实现中的系统工程。在启动route_auto前,必须建立完整的布线策略框架。
工艺特性适配是首要任务。以7nm工艺为例,需要特别注意:
- 金属层堆叠方案对RC的影响
- 通孔电阻在总延迟中的占比(可达30%)
- 天线效应敏感层的跳层策略
# 典型7nm工艺设置示例 set_app_options -name route.common.min_routing_layer -value M2 set_app_options -name route.common.max_routing_layer -value M7 set_app_options -name route.detail.antenna_fixing_preference -value "diode_insertion hop_layer"设计状态验证必须严格执行以下检查项:
| 检查项目 | 通过标准 | 检查命令 |
|---|---|---|
| 布局质量 | 拥塞<5% | report_congestion |
| 时钟树完整性 | Skew<50ps | report_clock_timing |
| 电源网络完整性 | IR drop<3% | analyze_power_network |
| Pin可访问性 | 无blocked pin | check_routability |
关键提示:使用
check_design -checks pre_route_stage时,若发现boundary pin违规,需返回floorplan阶段调整IO布局,而非强行布线。
2. 全局布线的战术选择
route_auto的三阶段(GR/TA/DR)中,全局布线(GR)的质量决定后续优化的上限。在16nm GPU芯片项目中,我们发现以下配置组合效果最佳:
set_app_options -list { route.global.timing_driven_effort_level medium route.global.crosstalk_driven false route.track.crosstalk_driven true route.detail.optimize_wire_via_effort_level high }拥塞热点处理需要分层施策:
- 宏观拥塞:通过调整GR的cost table重新分配资源
set_global_routing_layer_adjustment M4 0.8 set_global_routing_layer_adjustment M5 1.2 - 局部拥塞:创建动态routing guide
create_routing_guide -name hotspot_guide -boundary {{x1 y1}{x2 y2}} \ -layers {M3 M4} -switch_preferred_direction
时序关键路径保护策略:
- 对top 5%的critical path设置physical_status锁定
set_attribute [get_nets -of [get_timing_path -group slack_worst -nworst 100]] \ physical_status locked - 对时钟网络启用performance via ladder
set_app_options -name opt.common.enable_via_ladder_insertion -value true
3. 增量布线的精准打击
当基础布线完成后,面对剩余的DRC违例,盲目重布线只会破坏已有优化。我们的策略是:
靶向修复流程:
- 生成违例热图定位问题区域
check_routes -type detail -output viol.gpd - 对违例集中区域启动增量布线
route_detail -incremental true -max_number_iteration 30 \ -coordinates {{x1 y1}{x2 y2}} - 顽固违例单独处理
remove_nets [get_nets -violation -boundary {{x1 y1}{x2 y2}}] reroute_eco -nets [get_nets -violation]
天线效应解决方案对比:
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Layer hopping | 小规模违例 | 不增加面积 | 可能引入时序违例 |
| Diode插入 | 大规模违例 | 修复彻底 | 增加 leakage power |
| 工艺层调整 | 早期阶段 | 预防性解决 | 需要重新布局 |
在5nm项目实践中,我们采用混合策略:对时钟网络优先使用diode插入,数据路径则采用layer hopping。
4. 时序收敛的终极武器route_opt
route_opt阶段需要协同考虑时序、功耗和物理约束。以下是经过验证的三阶段优化法:
阶段一:基础优化
set_app_options -list { route_opt.flow.enable_ccd true route_opt.flow.enable_power true time.use_pt_delay true } route_opt阶段二:路径优化
set_app_options -name time.pba_optimization_mode -value path route_opt -from incremental_opto -to incremental_opto阶段三:精细调整
set_app_options -list { route_opt.flow.size_only_mode equal_or_smaller route_opt.flow.enable_ccd false } route_opt -from final_opto -to final_optoStarRC集成技巧:
- 在每次route_opt后执行寄生参数提取
extract_rc -coupling_cap write_parasitics -format SPEF -output post_opt.spef - 对RC敏感路径设置特殊约束
set_net_parasitics -net [get_nets -of [get_pins -filter "full_name=~*/clk*"]] \ -resistance 1.5 -capacitance 0.3
在最近的一个AI芯片项目中,这种流程将时序收敛周期从3周缩短到5天。关键路径的setup slack从-120ps改善到+30ps,同时hold违例清零。
