### PDN Config. All units in micrometer (um)
## The values used in this config are for reference only and do not correspond to any specific foundry
## design name to be used in DEF
set ::design $::env(DESIGN_NAME)

## DEF DBU
set ::def_units $::env(DEF_UNITS_PER_MACRON)

##Input DEF with macros packed
set ::FpOutDef $::env(replacemacro_tmp_file_tag).def

#### input tech lef path
#set ::techLef $::env(TECH_LEF)

#### input cell lef path
set ::cellLef [list $::env(MERGED_LEF)]

#### input flat lef path. FLAT LEF that contains physical views of all standard cells and macros in the design
# Ensure that the file ends with END LIBRARY
set ::flatLef $::env(MERGED_LEF)

set ::macro_power_pins $::env(VDD_PIN)
set ::macro_ground_pins $::env(GND_PIN)

#### placement SITE name from LEF
set ::site_name $::env(PLACE_SITE)
set ::site_width $::env(PLACE_SITE_WIDTH)

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

set coreinfo [join [exec $::env(SCRIPTS_DIR)/extract_coreinfo.sh $::FpOutDef] " "]
# 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) }]

set ::die_area_llx [expr { [lindex $coreinfo 0]/double($::def_units) }]
set ::die_area_lly [expr { [lindex $coreinfo 1]/double($::def_units) }]
set ::die_area_urx [expr { [lindex $coreinfo 2]/double($::def_units) }]
set ::die_area_ury [expr { [lindex $coreinfo 3]/double($::def_units) }]

set ::row_height $::env(PLACE_SITE_HEIGHT)

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

set ::macro_blockage_layer_list ""

# Details from techlef (BEOL LEF)
set ::met_layer_list "met1 met2 met3 met4 met5"  ;#From met1 and upwards
set ::met_layer_dir  "hor ver hor ver hor"

# Ensure pitches will make the stripes fall on track
# Ensure offsets will make the stripes fall on track

pdn specify_grid stdcell [list \
    layers    "met1 met4 met5" \
    dir       "hor ver hor" \
    widths    "0.14 0.3 1.6" \
    pitches   "$::row_height $::env(FP_PDN_VPITCH) $::env(FP_PDN_HPITCH)" \
    loffset   "0 $::env(FP_PDN_VOFFSET) 0" \
    boffset   "0 0 $::env(FP_PDN_HOFFSET)" \
    connect   "{met1 met4} {met4 met5}" \
    vias      "M1M2_PR M2M3_PR M3M4_PR M4M5_PR" \
]

#pdn specify_grid macro [list \
#    layers    "M6" \
#    dir       "ver" \
#    widths    "0.93" \
#    pitches   "40" \
#    loffset   2 \
#    boffset   0 \
#    min_pitch 0.2 \
#    connect   "{M4_PIN_hor M6} {M6 M7}" \
#    vias      "VIA1_RULE_1 VIA2_RULE_1 VIA3_RULE_1 VIA4_RULE_293 VIA5_RULE_360 VIA6_RULE_21 VIA7_RULE_18 VIA8_RULE_1" \
#]
#set ::halo 4

# Metal layer for rails on every row
set ::rails_mlayer "met1" ;

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

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

proc generate_viarules {} {
}

cd $::env(TMP_DIR)/floorplan
