The-OpenROAD-Project / The-OpenROAD-Project/OpenROAD
PDN generator may not handle dual-layer power rails in standard cell pins
@gadfort is already working on this.
Since Jul 21, 2026.
- Dominant language
- Verilog
- Stars
- 3.1k
- Forks
- 1k
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 136
Description
Describe the bug
OpenROAD's PDN generator appears to not correctly handle standard cells with power/ground pins that have geometry on two perpendicular metal layers (example - Metal layer 1 vertical, Metal layer 2 horizontal in the tech LEF). The cell's VDD/VSS pins include both Metal 1 and Metal 2 geometry with internal vias connecting them.
When using the recommended multi-layer followpin configuration (add_pdn_stripe -followpins on both Metal1 and Metal2 with add_pdn_connect {Metal1 Metal2}), the PDN generator produces opposite error patterns:
Script 1 (explicit stripes): VCC errors, VSS works
Script 2 (followpins only on Metal1): VSS errors, VCC works
Script 3 (followpins on both Metal1+Metal2 with Metal1→Metal2→higher metal layer connections): Still has VSS errors.
Expected Behavior
The PDN generator should correctly connect both Metal1 and Metal2 power rail geometries in the cell pins to the PDN network, regardless of whether the layers have perpendicular preferred directions.
check_power_grid -nets VDD/VSS -floorplanning -dont_require_terminals should give back 1. But it fails currently.
Environment
I am running openroad on podman iic-osic-tools -
[WARNING] Your current OpenROAD version is outdated. (i am using an older version of openroad, however, the new versions too does not have a patch for this)
OpenROAD version: 26Q3-18-g5c5380c49a
OS: Ubuntu 24.04.4 LTS
Compiler: GNU 13.3.0
To Reproduce
lef file with VDD and VSS definitions like so -
PIN VDD/VSS
direction - input/output
use pwr/gnd
layer metal1;
metal info ;
layer via;
metal info ;
layer metal2 ;
metal info ;
end pin.
for certain cells there are 2 definitions of metal 1 and 2 like so -
pin VSS/VDD-
metal2
via
metal1
metal2
via
metal1
end
Relevant log output
many of each of these -
violation type: Unconnected shape
srcs: net:VDD
bbox = (39.6200, 21.5500) - (40.1800, 21.6500) on Layer Metal1
violation type: Unconnected shape
srcs: net:VDD
bbox = (39.6200, 21.5500) - (40.1800, 21.6500) on Layer Metal2
violation type: Unconnected instance
srcs: inst:TAP_TAPCELL_ROW_255_1020
bbox = (39.6200, 20.7000) - (40.1800, 21.6000) on Layer -
violation type: Unconnected instance
srcs: inst: PHY_EDGE_ROW_423_Right_168
bbox = (39.6200, 20.7000) - (40.1800, 21.6000) on Layer -
these come for VSS too
there error on the terminal is -
[ERROR PSM-0069] Check connectivity failed on VDD.
[ERROR GUI-0070] PSM-0069
PSM-0069
while executing
"psm::check_connectivity_cmd [psm::find_net $keys(-net)] $floorplanning $error_file $dont_require_bterm"
(procedure "check_power_grid" line 16)
invoked from within
"check_power_grid -net VCC -dont_require_terminals -floorplanning"
Screenshots
No response
Additional Context
Since I have a proprietory PDK, i will not be able to share screenshots or actual lef values of the pdk.
The cell has dual-layer power rails (Metal1 + Metal2) with repeated layer definitions in the LEF (valid LEF syntax for double-height cells)
Metal1 is vertical, Metal2 is horizontal in the tech LEF, but both appear as horizontal when given with followpins .
This perpendicular-layer case is not represented in the current test suite, nor is the 2 layer metal definitions for the pins, present in any open source pdks.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.