PDN ring on macro grid: via still not inserted between Metal5 and TopMetal1 despite overlapping geometry (IHP SG13G2) #11075
Replies: 5 comments 6 replies
|
@gadfort any ideas? It would be easier to address with a complete test case if you can provide that publicly. |
|
Update: Found that Metal5↔TopMetal1 vias do successfully form elsewhere in the same design, 22 instances, all using via5_6_2000_440_1_1_840_840 (dimensions 2000×440nm). At my stuck location, both overlapping shapes (the ring's Metal5 segment and the TopMetal1 stripe) are 2000×2000nm, a much larger, fully-square overlap than the successful case's 2000×440. Question: Could a via generation attempt fail specifically at a large square overlap region (2µm × 2µm) if only a single 1×1 cut is attempted, where a working case with a narrower overlap succeeds because a single cut is naturally sufficient there? Is there a minimum cut-density or array requirement I should be forcing explicitly via -max_rows/-max_columns for wide overlap regions, rather than relying on the default single-cut behavior? |
|
// ============================================================================= |
Uh oh!
There was an error while loading. Please reload this page.
Integrating a real SRAM macro (IHP RM_IHPSG13_1P_1024x32_c2_bm_bist, single-port, 1024x32) into a design on IHP SG13G2, via LibreLane (Classic flow). The macro's power pins (VDD!, VSS!, VDDARRAY!) sit on Metal4. The design's main power grid only reaches TopMetal1 (vertical) / TopMetal2 (horizontal). A via layer connecting Metal5 to TopMetal1 exists in the tech LEF (TopVia1), so bridging Metal4 -> Metal5 -> TopMetal1 should be architecturally possible.
What I've tried
A straight add_pdn_stripe on the macro grid at Metal5 never worked, regardless of halo width (tried 10um default, 40um, 90um) or macro X-position. Root cause I believe I found: TopMetal1's vertical stripes get obstruction-avoided across the macro's entire Y-height, and a horizontal Metal5 stripe confined to that same Y-band can never intersect real TopMetal1 geometry no matter how far it extends in X.
Switching to add_pdn_ring on the macro grid (segments on all four sides, so top/bottom edges extend past the obstructed Y-band) got real improvement: unconnected VPWR/VGND nodes dropped from ~2000+ to 343, "no via inserted" warnings dropped from ~700+ to 15. But one specific floating shape remains stuck: a Metal5 segment on VGND, exactly at the bottom edge of one macro instance's ring.
The specific stuck case
Direct .odb inspection (via OpenROAD Tcl scripting) confirms real TopMetal1 geometry does exist overlapping this exact region, so it's not a missing-geometry problem. -fixed_vias {TopVia1} fails immediately with PDN-1021 Unable to find via: TopVia1 (the raw LEF cut-layer name apparently isn't the internal via-rule name OpenROAD expects, and I haven't been able to find what that internal name actually is). -ongrid shifts the attempted via location slightly but the floating shape itself doesn't move or resolve.
Question
Is there a known pattern for closing this last gap on a ring-macro connection when geometry technically overlaps but no via gets legally inserted? Specifically:
Is there a way to list/discover the actual internal via-rule name(s) OpenROAD generates for a given cut layer, so -fixed_vias can be used correctly?
Are there known DRC/enclosure interactions specific to ring segments at exact macro-halo boundaries that could explain a "technically overlapping, still unconnected" result?
Happy to share the full config and a more detailed step-by-step log if useful.
All reactions