当前位置: 首页 > news >正文

innovus auto_fix_short.tcl

思路:
读取 verify_drc 生成的 short 报告;
提取短路两端坐标;
用 ecoRoute -fix_drc -selected_nets 或 手动拆线 + reroute;
若仍失败,再尝试 ecoAddRepeater 断线、ecoChangeCell 降驱动 等 fallback 策略。

##############################################################################
# auto_fix_short.tcl
# 用法:source auto_fix_short.tcl
# 功能:自动读取 DRC short 列表并尝试修复
############################################################################### ----------------------------------------------------------
# 0. 参数:可改
# ----------------------------------------------------------
set drc_rpt      "innovus.drc.rpt"   ;# 默认 DRC 报告名
set max_iter     3                  ;# 最多迭代修几次
set dbg          1                  ;# 1=打印调试信息# ----------------------------------------------------------
# 1. 跑 DRC 并产生报告
# ----------------------------------------------------------
proc run_drc {} {global drc_rptclearDrcverify_drc -report $drc_rpt -limit 10000
}# ----------------------------------------------------------
# 2. 从报告里抓 short 信息
#   典型行: SHORT M1  (100.00 200.00) (105.00 205.00) ...
# ----------------------------------------------------------
proc parse_shorts {rpt} {set shorts {}if {![file exists $rpt]} {puts "ERROR: $rpt not found!"return $shorts}set fp [open $rpt r]while {[gets $fp line] >= 0} {if {[regexp {^SHORT\s+(\S+)\s+\(([^)]+)\)\s+\(([^)]+)\)} $line -> layer p1 p2]} {lappend shorts [list $layer $p1 $p2]}}close $fpreturn $shorts
}# ----------------------------------------------------------
# 3. 根据坐标找对应 net
# ----------------------------------------------------------
proc nets_at_point {x y layer} {set shapes [get_shapes -within [list $x $y $x $y] -filter "layer==$layer"]set nets [lsort -unique [get_nets -of $shapes]]return $nets
}# ----------------------------------------------------------
# 4. 主修复循环
# ----------------------------------------------------------
proc auto_fix_short {} {global max_iter drc_rpt dbgfor {set i 1} {$i <= $max_iter} {incr i} {puts "Iteration $i ..."run_drcset shorts [parse_shorts $drc_rpt]set n_short [llength $shorts]if {$n_short == 0} {puts "SUCCESS: no shorts left!"return 1}puts "Found $n_short shorts"foreach short $shorts {lassign $short layer p1 p2lassign [split $p1] x1 y1lassign [split $p2] x2 y2set net1 [lindex [nets_at_point $x1 $y1 $layer] 0]set net2 [lindex [nets_at_point $x2 $y2 $layer] 0]if {$dbg} {puts "SHORT $layer: $net1 vs $net2"}# ---------------- 4-a 拆线 + reroute ----------------if {[llength $net1] && [llength $net2]} {# 先取消这两条 net 的 routeecoDeleteRoute -nets [list $net1 $net2]# 再重新绕线ecoRoute -fix_drc -selected_nets [list $net1 $net2]}}# 可选 fallback:若仍 short,插入 buffer 降驱动# ecoAddRepeater ... }puts "WARNING: still have shorts after $max_iter iterations"return 0
}##############################################################################
# 5. 直接执行
##############################################################################
auto_fix_short

脚本会自动:
verify_drc → 生成 innovus.drc.rpt
解析出所有 SHORT 行
每对短路 net 执行 ecoDeleteRoute + ecoRoute -fix_drc
最多迭代 3 次(可调 max_iter)
若全部 clean,则 SUCCESS 退出;否则打印剩余违例坐标,可人工再干预。
🔧 进阶玩法
只修某层:在 parse_shorts 里加 -filter “layer==M2”
改为插 buffer 断线:把 ecoDeleteRoute 换成
ecoAddRepeater -net net1−cellBUFX1−loc"net1 -cell BUF_X1 -loc "net1cellBUFX1loc"x1 $y1"
GUI 调试:运行后 violationBrowser 查看剩余 short。

http://www.lryc.cn/news/626939.html

相关文章:

  • 代码随想录Day57:图论(寻宝prim算法精讲kruskal算法精讲)
  • 3D检测笔记:相机模型与坐标变换
  • 今日行情明日机会——20250820
  • 算法提升树形数据结构-(线段树)
  • 数据结构与算法系列(大白话模式)小学生起点(一)
  • 关于 Flask 3.0+的 框架的一些复习差异点
  • 算法230. 二叉搜索树中第 K 小的元素
  • 雷卯针对香橙派Orange Pi 5B开发板防雷防静电方案
  • 力扣hot100:最大子数组和的两种高效方法:前缀和与Kadane算法(53)
  • Deepseek+python自动生成禅道测试用例
  • 自动化测试用例生成:基于Python的参数化测试框架设计与实现
  • 记一次pnpm start启动异常
  • Spring Boot 3整合Nacos,配置namespace
  • 质谱数据分析环节体系整理
  • Rust 入门 包 (二十一)
  • 内网环境给VSCode安装插件
  • PostgreSQL 流程---更新
  • 基于51单片机自动浇花1602液晶显示设计
  • Notepad++批量转UTF-8脚本
  • 测试DuckDB插件对不同格式xlsx文件的读写效率
  • 基于Pytochvideo训练自己的的视频分类模型
  • 【C++】基础:C++11-14-17常用新特性介绍
  • XR(AR/VR/MR)芯片方案,Soc VS “MCU+协处理器”?
  • 109、【OS】【Nuttx】【周边】效果呈现方案解析:workspaceStorage(下)
  • 【最后203篇系列】034 使用SQLite构建简单的任务管理
  • 解决Docker 无法连接到官方镜像仓库
  • LINUX 820 shell:shift,expect
  • 49 C++ STL模板库18-类模板-pair
  • 双模式 RTMP H.265 播放器解析:从国内扩展到 Enhanced RTMP 标准的演进
  • 深入理解JVM内存结构:从字节码执行到垃圾回收的全景解析