当前位置: 首页 > 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.dtcms.com/a/341646.html

相关文章:

  • MTK Linux DRM分析(三)- drm_drv.c分析
  • 【智能体记忆】记忆如何塑造我们:深入探究记忆的类型
  • yolov8检测实时视频流,裁剪出未戴头盔的头部方案
  • HarmonyOS相对布局 (RelativeContainer) 基本概念
  • ODPS 十五周年实录 | 为 AI 而生的数据平台
  • 大数据毕业设计选题推荐-基于Hadoop的电信客服数据处理与分析系统-Spark-HDFS-Pandas
  • 文本智能抽取:如何用NLP从海量文本中“炼“出真金?-告别无效阅读,让AI成为你的“信息炼金师
  • OceanBase DBA实战营2期--SQL 关键字限流学习笔记
  • ae复制合成后修改里面图层相互影响问题
  • uos(类linux)系统 打印机自定义打印尺寸
  • MySQL分库分表与MyCAT
  • open webui源码分析5-Tools
  • 基于单片机水质检测系统/污水监测系统/水情监测
  • ansible中roles角色是什么意思?
  • 详解flink table api基础(三)
  • 【网络】使用 DNAT 进行负载均衡时,若未配置配套的 SNAT,回包失败
  • 猫头虎开源AI分享|基于大模型和RAG的一款智能text2sql问答系统:SQLBot(SQL-RAG-QABot),可以帮你用自然语言查询数据库
  • Three.js 初级教程大全
  • 分享|财务大数据实验室建设方案
  • 机器学习(Machine Learning, ML)
  • Web网站的运行原理2
  • Ubuntu实现程序开机自动运行
  • AI每日需求进度分析总结(附实战操作)
  • 云原生环境下的ITSM新趋势:从传统运维到智能化服务管理
  • 政务网站与新媒体自查情况的报告怎么写?
  • 【ssh】ssh免密登录配置【docker】
  • STM32_0001 KEILMDK V5.36 编译一个STM32F103C8T6说core_cm3.h文件找不到以及编译器版本不匹配的解决办法
  • 25_基于深度学习的行人检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 详解ThreadLocal<HttpServletRequest> requestThreadLocal
  • Kernel Study