blob: 21ba7ba85a4a2ab8e2c4638179f54838fb8b0700 [file] [log] [blame]
Tim Edwards55f4d0e2020-07-05 15:41:02 -04001# Power nets
Ahmed Ghazy8e84e5c2020-07-27 14:32:34 +02002set ::power_nets $::env(VDD_PIN)
3set ::ground_nets $::env(GND_PIN)
Tim Edwards55f4d0e2020-07-05 15:41:02 -04004
agorararmarddb875982020-11-30 19:40:31 +02005if { [info exists ::env(FP_PDN_ENABLE_GLOBAL_CONNECTIONS)] } {
6 if { $::env(FP_PDN_ENABLE_GLOBAL_CONNECTIONS) == 1 } {
7 # to parameterize -- needs a PDNGEN fix
8 set pdngen::global_connections {
9 VPWR {
10 {inst_name .* pin_name VPWR}
11 {inst_name .* pin_name VPB}
12 }
13 VGND {
14 {inst_name .* pin_name VGND}
15 {inst_name .* pin_name VNB}
16 }
17 }
18 }
Ahmed Ghazy885c10a2020-11-24 17:00:17 +020019}
Tim Edwards55f4d0e2020-07-05 15:41:02 -040020
agorararmard4ddcc612020-10-08 17:05:03 +020021# Used if the design is the core of the chip
22set stdcell_core {
Tim Edwards55f4d0e2020-07-05 15:41:02 -040023 name grid
24 rails {
agorararmard4ddcc612020-10-08 17:05:03 +020025 met1 {width $::env(FP_PDN_RAIL_WIDTH) pitch $::env(PLACE_SITE_HEIGHT) offset $::env(FP_PDN_RAIL_OFFSET)}
Tim Edwards55f4d0e2020-07-05 15:41:02 -040026 }
27 straps {
agorararmard29113fc2020-08-28 20:52:31 +020028 met4 {width $::env(FP_PDN_VWIDTH) pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)}
29 met5 {width $::env(FP_PDN_HWIDTH) pitch $::env(FP_PDN_HPITCH) offset $::env(FP_PDN_HOFFSET)}
Tim Edwards55f4d0e2020-07-05 15:41:02 -040030 }
31 connect {{met1 met4} {met4 met5}}
32}
33
agorararmard4ddcc612020-10-08 17:05:03 +020034# Used if the design is a macro in the core
35set stdcell_macro {
36 name grid
37 rails {
38 met1 {width $::env(FP_PDN_RAIL_WIDTH) pitch $::env(PLACE_SITE_HEIGHT) offset $::env(FP_PDN_RAIL_OFFSET)}
39 }
40 straps {
41 met4 {width $::env(FP_PDN_VWIDTH) pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)}
42 }
43 connect {{met1 met4}}
44}
45
46# Assesses whether the deisgn is the core of the chip or not based on the value of $::env(DESIGN_IS_CORE) and uses the appropriate stdcell section
47if { [info exists ::env(DESIGN_IS_CORE)] } {
48 if { $::env(DESIGN_IS_CORE) == 1 } {
49 set stdcell $stdcell_core
50 } else {
51 set stdcell $stdcell_macro
52 }
53} else {
54 set stdcell $stdcell_core
55}
56
57# Adds the core ring if enabled.
58if { [info exists ::env(FP_PDN_CORE_RING)] } {
59 if { $::env(FP_PDN_CORE_RING) == 1 } {
60 dict append stdcell core_ring {
61 met4 {width $::env(FP_PDN_CORE_RING_VWIDTH) spacing $::env(FP_PDN_CORE_RING_VSPACING) core_offset $::env(FP_PDN_CORE_RING_VOFFSET)}
62 met5 {width $::env(FP_PDN_CORE_RING_HWIDTH) spacing $::env(FP_PDN_CORE_RING_HSPACING) core_offset $::env(FP_PDN_CORE_RING_HOFFSET)}
63 }
64 }
65}
66
67pdngen::specify_grid stdcell $stdcell
68
69# A general macro that follows the premise of the set heirarchy. You may want to modify this or add other macro configs
Tim Edwards55f4d0e2020-07-05 15:41:02 -040070pdngen::specify_grid macro {
71 orient {R0 R180 MX MY R90 R270 MXR90 MYR90}
Ahmed Ghazy885c10a2020-11-24 17:00:17 +020072 power_pins "VDD VPWR vdd"
73 ground_pins "VSS VGND gnd"
Ahmed Ghazy7f454092020-11-08 17:32:18 +020074 blockages "li1 met1 met2 met3 met4"
75 straps {
76 }
agorararmard4ddcc612020-10-08 17:05:03 +020077 connect {{met4_PIN_ver met5}}
Tim Edwards55f4d0e2020-07-05 15:41:02 -040078}
79
Ahmed Ghazy7f454092020-11-08 17:32:18 +020080set ::halo [expr min($::env(FP_HORIZONTAL_HALO), $::env(FP_VERTICAL_HALO))]
81
Tim Edwards55f4d0e2020-07-05 15:41:02 -040082# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area
83set ::rails_start_with "POWER" ;
84
85# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area
86set ::stripes_start_with "POWER" ;