innovus规律摆放单元脚本
innovus中摆放instance的命令为placement
命令解析:
参数解析:
instance_name :器件名
location :指定器件的源点,左下角的x,y坐标
orientation :方向(默认为R0)
-status :{-fixed | -placed | sofrFixed} 器件放置状态(默认为fixed)
脚本功能描述:
规律摆放一类相同的instance时,可以定制摆放规则,例如(3x2,4x5)此种规律
proc place {inst num startX startY spaceX spaceY orientation flag} {
set n 0
set x $startX ; set y $startY
foreach i $inst {
#1.得到器件的长宽大小
set instX [dbGet [dbGet top.inst.name $i -p].box_sizex]
set instY [dbGet [dbGet top.inst.name $i -p].box_sizey]
if {$flag} {
placeInstance $i $x $y -placed $orientation
incr n
if {$n%$num == 0} {
set x $startX ; set y [expr $y + $instY + $spaceY]
} else {
set x [expr $x + $instX + $spaceX] ; set y $startY
}
} else {
placeInstance $i [expr $x - $instX] $y -placed $orientation
incr n
if {$n%$num == 0} {
set x $startX ; set y [expr $y + $instY + $spaceY]
} else {
set x [expr $x - $instX - $spaceX] ; set y $startY
}
}
}
}
参数解析:
inst :器件的名称,格式为list
num :每行放置num个就向上放置
startX :起点X坐标
startY :起点Y坐标
spaceX :每两个相邻的inst的X间距
spaceY :每两个相邻的inst的Y间距
orientation :放置的方向
flag : 参数为0,器件从右向左放置
spaceY :每两个相邻的inst的Y间距
orientation :放置的方向
flag : 参数为0,器件从右向左放置
参数不为0,器件从左向右放置