### NOTE : WARNING ### ### add_macro_cover takes two arguments. The first is the hard blockage distance ### around the macro. The second is the amount the PG route guide is INSET from ### that blockage -- a number picked to be slightly larger than half the standard ### cell PG rail width. The reason for the inset is to prevent a situation where ### placement rows wind up without a PG rail. ### d = blockage border [one row default], e is half M1 pwr rail width + margin proc add_macro_cover { d e } { set x 0 foreach_in_collection c [get_cells -hier -filter "is_hard_macro==true"] { set coord [get_attribute $c bbox] set low_x [expr [lindex [lindex $coord 0] 0] - $d] set low_y [expr [lindex [lindex $coord 0] 1] - $d] set high_x [expr [lindex [lindex $coord 1] 0] + $d] set high_y [expr [lindex [lindex $coord 1] 1] + $d] create_placement_blockage -bbox "$low_x $low_y $high_x $high_y" -type hard -name McBlockH_$x set newCord [list [list [expr $low_x + $e ] [expr $low_y + $e ]] [list [expr $high_x - $e ] [expr $high_y - $e ]] ] create_route_guide -name McBlockR_$x -no_preroute_layers {M1 M2 M3 M4} -coordinate $newCord -no_snap incr x } } add_macro_cover 1.8 0.14