# Floorplan information - core boundary coordinates, std. cell row height,
# minimum track pitch as defined in LEF
#

set ::def_units $::env(DEF_UNITS_PER_MACRON)
set coreinfo [join [exec $::env(SCRIPTS_DIR)/extract_coreinfo.sh $::env(tapcell_tmp_file_tag).def] " "]
# DIEAREA ( 0 0 ) ( 93930 93930 ) ;
# ROW ROW_0 unit 0 0 FS DO 195 by 1 STEP 480 0 ;
# ROW ROW_27 unit 0 89910 N DO 195 by 1 STEP 480 0 ;
# 0 0 93930 93930 ///    0 0 0 89910 195 480
set sites_per_row [lindex $coreinfo 8]
set step [lindex $coreinfo 9]

set ::core_area_llx [expr { [lindex $coreinfo 4]/double($::def_units) }]
set ::core_area_lly [expr { [lindex $coreinfo 5]/double($::def_units) }]
set ::core_area_urx [expr { ([lindex $coreinfo 6]+$step*$sites_per_row)/double($::def_units) }]
set ::core_area_ury [expr { [lindex $coreinfo 7]/double($::def_units) }]

puts "($::core_area_llx $::core_area_lly) ($::core_area_urx $::core_area_ury)"

set ::halo 4

# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area
set ::rails_start_with "POWER" ;

# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area
set ::stripes_start_with "POWER" ;



# Power nets
set ::power_nets "VDD"
set ::ground_nets "VSS"

## PDN STRATEGY:

#set ::row_height $::env(PLACE_SITE_HEIGHT)

pdn specify_grid stdcell {
    rails met1
    layers {
        met1 {width 0.14 pitch  3.33 offset 0.07} 
        met4 {width 0.3 pitch 153.6 offset 16.32}
        met5 {width 1.6 pitch 153.6 offset 16.65}
    }
    connect {{met1 met4} {met4 met5}}
}

pdn specify_grid macro {
    orient {N FN S FS E FE W FW}
    power_pins "$::env(VDD_PIN)"
    ground_pins "$::env(GND_PIN)"
    blockages "li1 met1 met2"
    layers {
        met3 {width 0.333 pitch 40.293 offset 2}
    } 
    connect {{met2_PIN_ver met3} {met3 met5}}
}
