分享一个只需要输入clamp的cellName就可以查看clamp是否覆盖完全的脚本。(如果存在多个电压域,则应该通过instName分开抓取)
clamp是负责esd泄放的单元,一版项目中保护的范围为1000um左右的原型。
脚本分为三个部分
- 去掉上次执行该脚本时的marker;
- 设置一些参数,半径和calmps;
- 主脚本会用到的proc;
- 主脚本调用proc。
1 去掉上次执行该脚本时的marker
#01 remove marker
remove_gui_marker -all;# inn工具命令
remove_gui_object -all;# inn工具命令
2 设置一些参数,半径和calmps;
#02 define r and clamps
set r 1300
set pointList ""
set clamps [dbget [dbget top.insts.cell.name $cell_name -p2].name]
3 主脚本会用到的proc;
#03 usefule procs
proc get_center_point {inst} {
set x1 [dbget [dbget top.insts.name $inst -p].box_llx]
set x2 [dbget [dbget top.insts.name $inst -p].box_urx]
set y1 [dbget [dbget top.insts.name $inst -p].box_lly]
set y1 [dbget [dbget top.insts.name $inst -p].box_ury]
global pointList
set c_x [expr ($x1+$x2)/2]
set c_y [expr ($y1+$y2)/2]
lappend pointList [list $c_x c_y]
}
proc checkp {rx ry} {
set tmp ""
global r
for {set angle θ} {$angle<360} {incr angle 10} {
set x [expr $rx + $r * cos ($angle*acos(-1)/180)];#acos(-1)代表π,acos(-1)/180代表每角度的弧度值
set y [expr $ry + $r * sin ($angle*acos(-1)/180)]
lappend tmp "$x $y"
add_gui_shape -name clamp_shape -polygon "$tmp
add_gui_marker -color blue -name clanmp -pt "$rx $ry" -type x
}
4.主脚本调用proc
# 04 main scripts
foreach clamp $clamps {
get_center_point $clamp
}
foreach point $pointList {
set rx [lindex $point 0]
set ry [lindex $point 1]
checkp $rx $ry
}