The-OpenROAD-Project / The-OpenROAD-Project/OpenROAD

PDN generator may not handle dual-layer power rails in standard cell pins

Open
#10,955 26 comments 0 reactions 1 assignee View on GitHub

@gadfort is already working on this.

Since Jul 21, 2026.

pdn
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.