

proc sram_pdn_ns {pdnname macrolist} {
define_pdn_grid \
-macro \
-instances $macrolist \
-name $pdnname \
-starts_with POWER \
-halo "$::env(PDN_HORIZONTAL_HALO) $::env(PDN_VERTICAL_HALO)"
add_pdn_connect \
-grid $pdnname \
-layers "$::env(PDN_VERTICAL_LAYER) $::env(PDN_HORIZONTAL_LAYER)"
add_pdn_connect \
-grid $pdnname \
-layers "$::env(PDN_VERTICAL_LAYER) Metal3"
add_pdn_stripe \
-grid $pdnname \
-layer Metal4 \
-width 2.36 \
-offset 1.18 \
-spacing 0.28 \
-pitch 426.86 \
-starts_with GROUND \
-number_of_straps 2
}
sram_pdn_ns pdn_cpu_iram {i_chip_core.iram_u.sram.*.ram_u}
sram_pdn_ns pdn_apu_ram {i_chip_core.apu_u.ram_u.sram.*.ram_u}
sram_pdn_ns pdn_ppu_sbram {i_chip_core.ppu_u.*.ram_u}
I'm not getting any DRCs but I expect punching holes in the vertical routing like that is not good for power integrity.
[WARNING PDN-0231] i_chip_core.ppu_u.blender.palette_mapper.pram_u.g_d256.g_width\[0\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.blender.palette_mapper.pram_u.g_d256.g_width\[1\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf0_u.g_d512.g_width\[0\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf0_u.g_d512.g_width\[1\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf1_u.g_d512.g_width\[0\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf1_u.g_d512.g_width\[1\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] chip_id is not connected to any power/ground nets.
[WARNING PDN-0231] wafer_space_logo is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.blender.palette_mapper.pram_u.g_d256.g_width\[0\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.blender.palette_mapper.pram_u.g_d256.g_width\[1\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf0_u.g_d512.g_width\[0\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf0_u.g_d512.g_width\[1\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf1_u.g_d512.g_width\[0\].ram_u is not connected to any power/ground nets.
[WARNING PDN-0231] i_chip_core.ppu_u.scanbuf1_u.g_d512.g_width\[1\].ram_u is not connected to any power/ground nets.
These are exactly the RAMs which have M4 overroute in my screencap, and they were missing their RTL VDD/VSS connections. Now that's fixed, they also punch holes in M4.define_pdn_grid in the openroad docs but I didn't see anything super promising.

-halo option, which cuts the PDN straps.
For now, you can make the PDN straps on Metal5 thicker to reduce IR-drop across the chip. But for the ideal solution we need to open a feature request in OpenROAD.
@LukeW If you would like to report this, I can show you how to create a standalone reproducible from a LibreLane step.


add_pdn_stripe on M4 (for connecting up the pins on east/west edge) that is causing it to punch a hole in M4? In that case I could try the pre-strapped RAM GDS someone shared on GitHub. Thanks 

add_pdn_stripe to add a pair of Metal4 straps on either side of the SRAM macro, in order to easily connect it to the PDN straps on Metal5. This is probably why OpenROAD considers that layer to be blocked.








# Strap pins on east/west edges of RAM
add_pdn_stripe \
-grid $pdnname \
-layer Metal4 \
-width 2.36 \
-offset 1.18 \
-spacing 0.28 \
-pitch 426.86 \
-starts_with GROUND \
-number_of_straps 2
# Due to the above, we've punched an SRAM-sized hole in our M4 vertical
# rails. Put some small rails over the top of the macro just to nail M5
# back together. We still have an awful slot in the M4 routing above and
# below the macro; it's 5V, I'm sure it's ok
add_pdn_stripe \
-grid $pdnname \
-layer Metal4 \
-width 2.36 \
-offset 65.93 \
-spacing 0.28 \
-pitch 50 \
-starts_with GROUND \
-number_of_straps 7


add_pdn_stripe (not sure why add_pdn_connect, but with that you need to line up the macro with the pins. That's why I resorted to adding the stripes on the sides.
I think it would be good to add your additional stripes to the template too. Maybe I'll make them slightly thicker, since I chose 2.36 only because the pins on the sides are so thin.


