资讯详情

数字后端设计中不规则Floorplan的Route Blockage环实现

📅 2026/9/18 7:03:14 | 华诺云谱 👁 阅读
数字后端设计中不规则Floorplan的Route Blockage环实现
1. 不规则Floorplan的Route Blockage环实现方案在数字后端设计中给不规则形状的Floorplan添加Route Blockage环是一个常见但容易被忽视的需求。这种技术主要用于防止布线工具在芯片边缘区域进行不必要的走线从而避免潜在的DRC违规和信号完整性问题。对于不规则形状的Die手动创建Route Blockage既耗时又不精确。我们需要借助Innovus的Tcl脚本功能来实现自动化处理。核心思路是获取Die的外形多边形创建向内缩进1um的多边形从原始Die形状中减去这个缩进后的多边形得到环状区域将环状区域转换为Route Blockage提示在实际操作中Die边缘通常会有IO单元和电源环Route Blockage环应该紧贴这些结构的内侧避免与它们冲突。2. 详细实现步骤解析2.1 获取Die边界信息首先需要获取Die的边界多边形。在Innovus中可以通过以下命令获取set die_polygon [dbShape -output polygon [dbGet top.fplan.boxes]]这个命令会返回Die的边界多边形数据。对于不规则形状的Floorplan返回的将是一个复杂的多边形而非简单的矩形。2.2 创建内缩多边形接下来需要创建一个向内缩进1um的多边形。这里可以使用dbShape的SIZE操作set inner_polygon [dbShape $die_polygon SIZE -1.0]SIZE参数为负值表示向内缩进。这个操作会创建一个比原始Die小1um的相似形状多边形。2.3 生成环状区域通过布尔运算获取环状区域set ring_polygon [dbShape -output polygon $die_polygon ANDNOT $inner_polygon]这个ANDNOT操作相当于从原始Die形状中减去内缩后的多边形得到的就是1um宽的环状区域。2.4 处理出Pin区域对于出Pin的位置我们需要排除Route Blockage。具体方法是获取所有Pin的几何形状将这些Pin向外扩展1um创建保护区域从环状区域中减去这些扩展后的Pin区域实现代码如下# 获取所有Pin并扩展1um set expanded_pins [list] foreach pin [dbGet top.terms] { set pin_shape [dbShape -output polygon [dbGet $pin.bbox]] lappend expanded_pins [dbShape $pin_shape SIZE 1.0] } # 合并所有扩展后的Pin区域 set pins_combined [dbShape OR {*}$expanded_pins] # 从环状区域中减去Pin区域 set final_ring [dbShape $ring_polygon ANDNOT $pins_combined]2.5 创建Route Blockage最后将处理后的多边形转换为Route BlockagecreateRouteBlk -layer all -box $final_ring -name die_edge_blockage这个命令会在所有布线层上创建Route Blockage防止布线工具在这些区域走线。3. 完整脚本实现将上述步骤整合成一个完整的Tcl脚本# 获取Die边界 set die_polygon [dbShape -output polygon [dbGet top.fplan.boxes]] # 创建内缩1um的多边形 set inner_polygon [dbShape $die_polygon SIZE -1.0] # 生成环状区域 set ring_polygon [dbShape -output polygon $die_polygon ANDNOT $inner_polygon] # 处理出Pin区域 set expanded_pins [list] foreach pin [dbGet top.terms] { set pin_shape [dbShape -output polygon [dbGet $pin.bbox]] lappend expanded_pins [dbShape $pin_shape SIZE 1.0] } set pins_combined [dbShape OR {*}$expanded_pins] set final_ring [dbShape $ring_polygon ANDNOT $pins_combined] # 创建Route Blockage createRouteBlk -layer all -box $final_ring -name die_edge_blockage puts Successfully created route blockage ring around die edge4. 实际应用中的注意事项4.1 处理复杂Die形状对于特别复杂的Die形状如有凹槽或孔洞上述方法可能需要调整可能需要分多次处理不同的Die边缘段对于凹槽区域可能需要单独创建Route Blockage可以使用dbShape的DECOMPOSE操作将复杂多边形分解为简单凸多边形4.2 性能优化当设计规模很大时多边形布尔运算可能比较耗时。可以考虑以下优化只处理实际需要Blockage的层而不是所有层对于大型设计可以分区域处理在非关键阶段可以暂时关闭这个Blockage只在最终布线时启用4.3 与其他设计规则的协调Route Blockage环需要与其他设计规则协调确保不会与电源环冲突检查与IO单元和ESD结构的间距考虑与封装基板的匹配关系5. 常见问题排查5.1 Blockage环不连续如果生成的Blockage环有断裂可能是由于Pin扩展区域过大导致相邻Blockage被完全切除解决方案减小Pin扩展量如从1um改为0.5umDie形状有特别尖锐的角解决方案对Die多边形进行轻微平滑处理5.2 脚本运行错误常见错误包括dbShape: invalid polygon原因Die边界多边形数据异常解决先检查[dbGet top.fplan.boxes]返回的数据是否有效missing operand for ANDNOT原因多边形数据未正确生成解决逐步检查每个dbShape操作的输出5.3 与布线工具的交互问题有时即使创建了Blockage布线工具仍可能在边缘走线检查Blockage是否确实创建在正确的层上确认布线工具的遵守Blockage的设置已开启检查是否有更高优先级的布线指导覆盖了Blockage6. 进阶技巧与应用6.1 动态调整Blockage宽度可以根据不同区域的布线密度需求调整Blockage宽度# 定义不同边的Blockage宽度 set north_width 1.0 set south_width 1.2 set east_width 0.8 set west_width 1.0 # 分别处理各边 set die_bbox [dbGet top.fplan.boxes] set die_llx [lindex $die_bbox 0] set die_lly [lindex $die_bbox 1] set die_urx [lindex $die_bbox 2] set die_ury [lindex $die_bbox 3] # 北边 set north_edge [list $die_llx [expr $die_ury - $north_width] $die_urx $die_ury] set north_poly [dbShape -output polygon $north_edge] # 其他边类似处理... # 最后合并所有边的Blockage6.2 与Floorplan变更联动为了使Blockage能随Floorplan变更自动更新可以将脚本保存为独立文件在Floorplan变更后自动重新运行或者使用Innovus的callback机制在Floorplan变化时触发6.3 可视化调试为了验证Blockage是否正确生成可以使用# 高亮显示生成的Blockage区域 guiSetHighlight -color yellow $final_ring这在调试复杂形状时特别有用。在实际项目中我发现这种自动生成的Route Blockage环可以显著减少后期DRC修复的工作量。特别是在先进工艺节点下芯片边缘的布线空间管理变得尤为重要。通过脚本实现这一功能不仅提高了准确性还能确保不同项目间的一致性。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。