前言
Congestion(布线拥塞)是数字后端实现中常见的问题。当局部区域标准单元过密、pin 密度过高或走线方向冲突时,就会出现 Congestion,最终可能导致 DRC 违例增多甚至布线失败。本文介绍在 Innovus 中如何查看和分析 Congestion,以及常用的解决方法。
一、Congestion 的查看方法
- GUI 图形界面查看
在 Innovus GUI 中选择:Display → Congestion,可按层或按阶段显示拥塞分布图。颜色通常为红黄绿,红色表示拥塞最严重。
- 命令行查看
# 生成 congestion 报告
report_congestion -output cong.rpt
# 检查热点区域
check_design -congestion
二、常用解决方法
方法1:调整 Placement Density
降低布局密度是缓解 Congestion 最直接的方法。
set_place_mode -congestion_effort high
set_place_density -max 0.7 # 将最大密度限制在 70% 以下
place_opt_design
方法2:添加 Partial Placement Blockage
在局部区域限制标准单元的放置密度。
create_placement_blockage -name block1 \
-bbox {100 100 200 200} \
-type partial -blockage 0.5 # 该区域密度限制为 50%
方法3:优化电源网格
电源 stripe 过密会占用走线通道资源。可适当加大 stripe 间距,或将部分 stripe 转移到更高层金属。
方法4:开启 Congestion-Driven 模式
set_global_placement -congestion_driven true
set_opt_mode -congestion_driven true
place_opt_design -congestion
方法5:手动调整 Macro 布局
Memory 或 Analog Macro 周围通常拥塞严重,需要预留足够的 keepout margin。
set_keepout_margin -type hard -outer {10 10 10 10} [get_cells u_macro]
三、Route 后仍有 Congestion 的处理
如果布线后仍然存在拥塞问题,可以尝试以下方法:
局部调整走线方向
setAttribute -net [get_nets xxx] -routing_direction vertical
添加 Routing Blockage
create_routing_blockage -bbox {x1 y1 x2 y2} \
-layer {M2 M3} -no_preroute
四、实践建议与注意事项
- 早期检查
在 Floorplan 完成后即运行 check_design -congestion,尽早发现潜在的拥塞问题,而不是等到 Placement 完成后再处理。 - 合理利用高层金属
高层金属(如 M6/M7)走线资源宝贵,应优先用于时钟树和长信号线,避免被标准单元占用。 - 关注 Pin Density
某条 net 的 fanout 过大可能导致 pin 密度集中。可先进行 fanout 优化:set_max_fanout 20 [current_design] - 与 Timing 的权衡
解决 Congestion 的措施(如降低 density、增加 blockage)可能导致路径变长,从而影响 setup 时序。需要根据实际情况平衡。
五、总结
解决 Congestion 的典型流程可以概括为:查看拥塞分布 → 降低布局密度 → 添加局部限制 → 优化电源网格 → 开启拥塞驱动模式 → 必要时手动调整 Macro。每一步都需要结合具体的设计情况灵活应用。
更多 Innovus 后端优化技巧,欢迎关注后续更新。
#芯片设计 #数字后端 #Innovus #Congestion #布线拥塞
5284

被折叠的 条评论
为什么被折叠?



