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

add_io_buffer——路径

define_proc_arguments add_io_buffer -info "Add repeater for IOs"
-define_args {
{-insts "Target IO insts" "insts" list required}
{-BOX "to core area, last location is the last inverter's location. {{x1 y1} {x2 y2} ...}" "path" list required}
{-prefix "Prefix for new insts and nets, default is IO_QYY" "prefix" string optional}
{-side "IO side, T,B,L or R" "side" string required}
}
proc add_io_buffer {args} {
set inputs(-prefix) IO_QYY
global _IO_REPEATER_INDEX _IO_REPEATER_INDEX
parse_proc_arguments -args $args inputs
if {[info exists inputs(-start_index)]} {
set _IO_REPEATER_INDEX $inputs(-start_index)
} elseif {![info exists _IO_REPEATER_INDEX]} {
set _IO_REPEATER_INDEX 0
}
set IOname $inputs(-insts)
set distance 70
set max_distance 750
foreach ioname $IOname {
set io [dbget [dbget top.insts.name $ioname -p1]]
#puts $io
set orient [dbget $io.orient]
set ioName [dbget $io.name]
set PinA [dbget $io.instTerms.name /A -p1]
set netA [dbget $PinA.net]
set Pinlists ""
if {$netA != "0x0"} {
lappend Pinlists $PinA
}
set PinY [dbget $io.instTerms.name /Y -p1]
set netY [dbget $PinY.net]
if {$netY != "0x0"} {
lappend Pinlists $PinY
}
foreach pins $Pinlists {
set pinsname [dbget $pins.name]
set obj [get_property [get_pins $pinsname] dbObject]
set x [dbget $obj.pt_x]
set y [dbget $obj.pt_y]
case $inputs(-side) {
T {
set y [expr $y - $distance]
}
B {
set y [expr $y + $distance]
}
L {
set x [expr $x + $distance]
}
default {
set x [expr $x - $distance]
}
}
set inv_locs [list [list $x $y]]
set loc [list $x $y]
set tot_len 0
#puts $tot_len
foreach tbox1 $inputs(-BOX) {
set ll [expr abs([lindex $tbox1 0] - [lindex $loc 0]) + abs([lindex $tbox1 1] - [lindex $loc 1])]
set tot_len [expr $tot_len + $ll]
set loc $tbox1
}
#invert_sum
set invnum [expr int(ceil($tot_len
1.0/$max_distance))]
if {[expr $invnum%2]} {incr invnum} else {set invnum [expr $invnum+2]}
puts "invnum:$invnum"
#inv_space invert
set invspace [format %.2f [expr $tot_len
1.0/($invnum-1)]]
#inv_location
set loc [lindex $inv_locs 0]
set nn 0
for {set i 0} {$i < [llength $inputs(-BOX)]} {} {
#puts "[llength $inputs(-BOX)]"
incr nn
set loc_i [lindex $inputs(-BOX) $i]
#puts "$loc_i"
set dx [expr [lindex $loc_i 0] - [lindex $loc 0]]
set dy [expr [lindex $loc_i 1] - [lindex $loc 1]]
set l [expr abs($dx) + abs($dy)]
#puts "$l"
set loc_last $loc_i
set loc_last1 $loc
#puts "$loc_last1"
set flag 0
set break_flag 0
while {$l < $invspace && $i < [llength $inputs(-BOX)]} {
incr i
if {$i == [llength $inputs(-BOX)]} {
set break_flag 1
break
}
set loc_i [lindex $inputs(-BOX) $i]
set dx [expr abs([lindex $loc_i 0] - [lindex $loc_last 0])]
set dy [expr abs([lindex $loc_i 1] - [lindex $loc_last 1])]
set loc_last1 $loc_last
set loc_last $loc_i
set l [expr $dx + $dy +$l]
set flag 1
#puts "$flag"
}

				if {$break_flag} {if {$invnum != [llength $inv_locs]} {lappend inv_locs [lindex $inputs(-BOX) end]}} elseif {$flag} {set l1 [expr $l - $dx - $dy]  set l2 [expr $invspace - $l1] set dx [expr [lindex $loc_last 0] - [lindex $loc_last1 0]]set dy [expr [lindex $loc_last 1] - [lindex $loc_last1 1]]if {[expr abs($dx)] < [expr abs($dy)]} {set x [lindex $loc_last 0] if {$dy > 0} {set y [expr [lindex $loc_last1 1] + $l2] } else {set y [expr [lindex $loc_last1 1] - $l2] }		} else {set y [lindex $loc_last 1] if {$dx > 0} {set x [expr [lindex $loc_last1 0] + $l2] } else {set x [expr [lindex $loc_last1 0] - $l2] }}set loc [list $x $y] lappend inv_locs $loc } else { set l2 $invspace set dx [expr [lindex $loc_i 0] - [lindex $loc 0]]set dy [expr [lindex $loc_i 1] - [lindex $loc 1]]if {[expr abs($dx)] < [expr abs($dy)]} {set x [lindex $loc_i 0]if {$dy > 0} {set y [expr [lindex $loc 1] + $l2]} else {set y [expr [lindex $loc 1] - $l2]}		} else {set y [lindex $loc_i 1]if {$dx > 0} {set x [expr [lindex $loc 0] + $l2]} else {set x [expr [lindex $loc 0] - $l2]}}set loc [list $x $y]lappend inv_locs $loc}if {[llength $inv_locs] == $invnum} {}if {$l < 40 && [expr [llength $inv_locs]%2] == 0} {	break}if {$nn == 100} {break}}if {[expr [llength $inv_locs] %2]} {#puts "[join $inv_locs \n]"continue}set net [lindex [dbget $obj.net.name] 0]set pin_name [file tail $pinsname]#puts "$pin_name"set pre_pin "$ioname/$pin_name"puts "$inv_locs"set inv_locs_re [lreverse $inv_locs]for {set n 0} {$n < [expr $invnum/2]} {incr n} {set input [dbget $pins.isInput] set idx1 [expr {$n * 2}]set idx2 [expr {$n * 2 + 1}]set x1 [lindex [lindex $inv_locs_re $idx1] 0]set y1 [lindex [lindex $inv_locs_re $idx1] 1]set x2 [lindex [lindex $inv_locs_re $idx2] 0]set y2 [lindex [lindex $inv_locs_re $idx2] 1]if {$input} {redirect ../scr/addiobufftcl.tcl {puts "ecoAddRepeater -term [dbGet $pins.name] -cell JLSCL6CNMV2_INV_16 -loc {$x1 $y1 $x2 $y2}"} -append} else {redirect ../scr/addiobufftcl.tcl {puts "ecoAddRepeater -term [dbGet $pins.name] -cell JLSCL6CNMV2_INV_16 -loc {$x2 $y2 $x1 $y1}"} -append}}}
}

}

http://www.jsqmd.com/news/25919/

相关文章:

  • Stable Diffusion v4.8 超详细下载安装教程:新手零基础学会 AI 绘画工具安装
  • nginx响应超时upstream timed out (110: Connection timed out) while reading response header from upstream
  • 2025年碳化铬堆焊耐磨板厂家最新推荐:堆焊耐磨板/碳化铬耐磨板/定制耐磨板/复合耐磨板/高硬度耐磨板/耐冲击耐磨板/汇森增材——耐用性与定制化双优之选
  • 抖音防封搭建方案,青否数字人提供全套的防封方案,能够进行稳定直播带货!
  • 2025年河北电信业务增值许可证培训权威推荐榜单:增值电信经营许可证/电信与信息服务业务经营许可证/电信业务许可证源头公司精选
  • docker-compose常用命令
  • 浅谈 FHQ-Treap
  • 2025 年天津保安公司最新推荐榜,技术实力与市场口碑深度解析
  • 接口自动化测试项目实战day1
  • 打破视频壁垒:视频融合平台EasyCVR如何实现多路视频监控上屏的高效管理?
  • MySQL MVCC:通过 ReadView与 undolog版本链 分析读提交RC和可重复读RR的原理 - 教程
  • upstream timed out (110: Connection timed out) while reading response header from upstream
  • Halcon算法——Hough变换
  • 2025 年不锈钢管源头厂家最新推荐排行榜:覆盖焊管、花纹管、菱形管、工业管等品类,结合协会测评数据精选优质品牌
  • 2025年挖泥船生产商权威推荐榜单:清淤船/挖沙船/绞吸船源头厂家精选
  • 99%的企业都不知道GEO搜索优化怎么做,讯灵AI来解答
  • 开了 8 年母婴店,靠微擎守住了 20000 会员的信任,再也不怕数据泄露
  • 建筑全场景安全监测 “无死角”!思通数科 AI 卫士多模态大模型覆盖文明施工、基坑与消防
  • 实况足球8下载安装教程(图文步骤 + 全流程配置指南)
  • SQL优化必备脚本:Oracle获取绑定变量的字面SQL文本
  • 20251029周三日记
  • 基于 Word 模板占位符的动态文档生成实践(源码+保姆版)
  • 坤驰科技荣膺国家级专精特新“小巨人”企业
  • 读书笔记:Oracle组合分区:像俄罗斯套娃一样管理数据
  • 自动对焦技术:TGV视觉检测方案中的关键
  • 红外热像仪 热成像相机 即插即用多场景适配
  • 详细介绍:K8s学习笔记(十一) service
  • vn.py的日志问题
  • Oracle故障处理:create table 引起select语句hang住出现library cache lock事件
  • OSI中七层模型