■ring
axgCreateRectangularRings で
ring
を作る。
●スクリプト
============================================================
./scripts/create_macro_ring.tcl
============================================================
axgCreateRectangularRings
formDefault create_rectangular_rings
setFormField create_rectangular_rings around Rectangle
setFormField create_rectangular_rings around "All Macros, except Specified"
setFormField create_rectangular_rings net_name(s) [concat $vddNet "," $vssNet]
setFormField create_rectangular_rings l-layer 17
setFormField create_rectangular_rings r-layer 17
setFormField create_rectangular_rings b-layer 18
setFormField create_rectangular_rings t-layer 18
setFormField create_rectangular_rings l-width 1.8
setFormField create_rectangular_rings r-width 1.8
setFormField create_rectangular_rings t-width 1.8
setFormField create_rectangular_rings b-width 1.8
setFormField create_rectangular_rings left 2.0
setFormField create_rectangular_rings right 2.0
setFormField create_rectangular_rings bottom 2.0
setFormField create_rectangular_rings top 2.0
formOK create_rectangular_rings
全てのマクロのまわりに ring をまくスクリプト例になっている。
他にも色々細かく設定できる。
Geyser-2 を例に取れば、初期設定ファイルで内部のマクロの大きさ、置く位置を
設定して置き、以下のスクリプト例のようにマクロ毎に細かく ring を調製
している。
============================================================
./scripts/MIPS/MIPS_ring.tcl
============================================================
formDefault delete_route_type
setToggleField delete_route_type p/g ring 1
formOK delete_route_type
############################################################
# setting
############################################################
############################################################
# create ring
############################################################
proc get_hxy { rot x y width height margin_r margin_t } {
switch $rot {
"90" {
set hx [expr $x + $height + $margin_r]
set hy [expr $y + $width + $margin_t]
}
"180" {
set hx [expr $x + $width + $margin_r]
set hy [expr $y + $height + $margin_t]
}
"270" {
set hx [expr $x + $height + $margin_r]
set hy [expr $y + $width + $margin_t]
}
default {
set hx [expr $x + $width + $margin_r]
set hy [expr $y + $height + $margin_t]
}
}
return [concat $hx $hy]
}
set extra [expr 1.8 * 2 + 0.5 * 2]
axgCreateRectangularRings
formDefault create_rectangular_rings
setFormField create_rectangular_rings around Rectangle
setFormField create_rectangular_rings net_name(s) [concat $vddNet "," $vssNet]
setFormField create_rectangular_rings l-layer 17
setFormField create_rectangular_rings r-layer 17
setFormField create_rectangular_rings b-layer 18
setFormField create_rectangular_rings t-layer 18
setFormField create_rectangular_rings l-width 1.8
setFormField create_rectangular_rings r-width 1.8
setFormField create_rectangular_rings t-width 1.8
setFormField create_rectangular_rings b-width 1.8
# RREGFILE_RF_0
set reg0_lx [expr $reg0_x - $reg0_margin_l]
set reg0_ly [expr $reg0_y - $reg0_margin_b]
set reg0_hxy [get_hxy $reg0_rot $reg0_x $reg0_y $reg_width $reg_height $reg0_margin_r $reg0_margin_t ]
set reg0_hx [lindex $reg0_hxy 0]
set reg0_hy [lindex $reg0_hxy 1]
setFormField create_rectangular_rings lx $reg0_lx
setFormField create_rectangular_rings ly $reg0_ly
setFormField create_rectangular_rings hx $reg0_hx
setFormField create_rectangular_rings hy $reg0_hy
formApply create_rectangular_rings
# RREGFILE_RF_1
set reg1_lx [expr $reg1_x - $reg1_margin_l]
set reg1_ly [expr $reg1_y - $reg1_margin_b]
set reg1_hxy [get_hxy $reg1_rot $reg1_x $reg1_y $reg_width $reg_height $reg1_margin_r $reg1_margin_t ]
set reg1_hx [lindex $reg1_hxy 0]
set reg1_hy [lindex $reg1_hxy 1]
setFormField create_rectangular_rings lx $reg1_lx
setFormField create_rectangular_rings ly $reg1_ly
setFormField create_rectangular_rings hx $reg1_hx
setFormField create_rectangular_rings hy $reg1_hy
formApply create_rectangular_rings
# ALU_UNIT
set alu_lx [expr $alu_x - $alu_margin_l]
set alu_ly [expr $alu_y - $alu_margin_b]
set alu_hxy [get_hxy $alu_rot $alu_x $alu_y $alu_width $alu_height $alu_margin_r $alu_margin_t ]
set alu_hx [lindex $alu_hxy 0]
set alu_hy [lindex $alu_hxy 1]
setFormField create_rectangular_rings lx $alu_lx
setFormField create_rectangular_rings ly $alu_ly
setFormField create_rectangular_rings hx $alu_hx
setFormField create_rectangular_rings hy $alu_hy
formApply create_rectangular_rings
set alu_lx [expr $alu_lx - $extra]
set alu_ly [expr $alu_ly - $extra]
set alu_hx [expr $alu_hx + $extra]
set alu_hy [expr $alu_hy + $extra]
setFormField create_rectangular_rings lx $alu_lx
setFormField create_rectangular_rings ly $alu_ly
setFormField create_rectangular_rings hx $alu_hx
setFormField create_rectangular_rings hy $alu_hy
formApply create_rectangular_rings
# SHIFT_UNIT
set shift_lx [expr $shift_x - $shift_margin_l]
set shift_ly [expr $shift_y - $shift_margin_b]
set shift_hxy [get_hxy $shift_rot $shift_x $shift_y $shift_width $shift_height $shift_margin_r $shift_margin_t ]
set shift_hx [lindex $shift_hxy 0]
set shift_hy [lindex $shift_hxy 1]
setFormField create_rectangular_rings lx $shift_lx
setFormField create_rectangular_rings ly $shift_ly
setFormField create_rectangular_rings hx $shift_hx
setFormField create_rectangular_rings hy $shift_hy
formApply create_rectangular_rings
set shift_lx [expr $shift_lx - $extra]
set shift_ly [expr $shift_ly - $extra]
set shift_hx [expr $shift_hx + $extra]
set shift_hy [expr $shift_hy + $extra]
setFormField create_rectangular_rings lx $shift_lx
setFormField create_rectangular_rings ly $shift_ly
setFormField create_rectangular_rings hx $shift_hx
setFormField create_rectangular_rings hy $shift_hy
formApply create_rectangular_rings
# MULT_UNIT
set mult_lx [expr $mult_x - $mult_margin_l]
set mult_ly [expr $mult_y - $mult_margin_b]
set mult_hxy [get_hxy $mult_rot $mult_x $mult_y $mult_width $mult_height $mult_margin_r $mult_margin_t ]
set mult_hx [lindex $mult_hxy 0]
set mult_hy [lindex $mult_hxy 1]
setFormField create_rectangular_rings lx $mult_lx
setFormField create_rectangular_rings ly $mult_ly
setFormField create_rectangular_rings hx $mult_hx
setFormField create_rectangular_rings hy $mult_hy
formApply create_rectangular_rings
set mult_lx [expr $mult_lx - $extra]
set mult_ly [expr $mult_ly - $extra]
set mult_hx [expr $mult_hx + $extra]
set mult_hy [expr $mult_hy + $extra]
setFormField create_rectangular_rings lx $mult_lx
setFormField create_rectangular_rings ly $mult_ly
setFormField create_rectangular_rings hx $mult_hx
setFormField create_rectangular_rings hy $mult_hy
formApply create_rectangular_rings
# DIV_UNIT
set div_lx [expr $div_x - $div_margin_l]
set div_ly [expr $div_y - $div_margin_b]
set div_hxy [get_hxy $div_rot $div_x $div_y $div_width $div_height $div_margin_r $div_margin_t ]
set div_hx [lindex $div_hxy 0]
set div_hy [lindex $div_hxy 1]
setFormField create_rectangular_rings lx $div_lx
setFormField create_rectangular_rings ly $div_ly
setFormField create_rectangular_rings hx $div_hx
setFormField create_rectangular_rings hy $div_hy
formApply create_rectangular_rings
set div_lx [expr $div_lx - $extra]
set div_ly [expr $div_ly - $extra]
set div_hx [expr $div_hx + $extra]
set div_hy [expr $div_hy + $extra]
setFormField create_rectangular_rings lx $div_lx
setFormField create_rectangular_rings ly $div_ly
setFormField create_rectangular_rings hx $div_hx
setFormField create_rectangular_rings hy $div_hy
formOK create_rectangular_rings