Skip to content

Commit 8e0186f

Browse files
authored
Merge pull request #8875 from gadfort/pdn-ripup-disconnected
pdn: ripup incomplete via stacks
2 parents c251b51 + 2a05ff3 commit 8e0186f

File tree

3 files changed

+47
-9
lines changed

3 files changed

+47
-9
lines changed

src/pdn/src/via.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3024,6 +3024,48 @@ void Via::writeToDb(odb::dbSWire* wire,
30243024
}
30253025
ripup_shapes.insert(ripup_vias_middle.begin(), ripup_vias_middle.end());
30263026

3027+
if (!ripup_shapes.empty()) {
3028+
// Check if via stack continuity will be broken
3029+
3030+
// Collect remaining shapes
3031+
std::set<odb::dbTechLayer*> layers;
3032+
for (const auto& viashapes : {shapes.bottom, shapes.middle, shapes.top}) {
3033+
for (const auto& [rect, box] : viashapes) {
3034+
if (ripup_shapes.find(box) == ripup_shapes.end()) {
3035+
if (box->isVia()) {
3036+
if (auto* via = box->getBlockVia()) {
3037+
for (auto* viabox : via->getBoxes()) {
3038+
layers.insert(viabox->getTechLayer());
3039+
}
3040+
} else if (auto* via = box->getTechVia()) {
3041+
for (auto* viabox : via->getBoxes()) {
3042+
layers.insert(viabox->getTechLayer());
3043+
}
3044+
}
3045+
} else {
3046+
layers.insert(box->getTechLayer());
3047+
}
3048+
}
3049+
}
3050+
}
3051+
3052+
bool broken = false;
3053+
for (auto* layer : connect_->getAllLayers()) {
3054+
if (layers.find(layer) == layers.end()) {
3055+
// stack is broken
3056+
broken = true;
3057+
}
3058+
}
3059+
3060+
if (broken) {
3061+
for (const auto& viashapes : {shapes.bottom, shapes.middle, shapes.top}) {
3062+
for (const auto& [rect, box] : viashapes) {
3063+
ripup_shapes.insert(box);
3064+
}
3065+
}
3066+
}
3067+
}
3068+
30273069
if (!ripup_shapes.empty()) {
30283070
const TechLayer tech_layer(lower_->getLayer());
30293071
int x = 0;

src/pdn/test/core_grid_with_single_edge_pins.defok

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1881,7 +1881,6 @@ SPECIALNETS 2 ;
18811881
NEW metal3 0 + SHAPE STRIPE ( 164000 5600 ) via3_4_960_340_1_3_320_320
18821882
NEW metal2 0 + SHAPE STRIPE ( 164000 5600 ) via2_3_960_340_1_3_320_320
18831883
NEW metal1 0 + SHAPE STRIPE ( 164000 5600 ) via1_2_960_340_1_3_300_300
1884-
NEW metal3 0 + SHAPE STRIPE ( 164000 10 ) via3_4_960_340_1_3_320_320
18851884
NEW metal3 0 + SHAPE STRIPE ( 124000 201600 ) via3_4_960_340_1_3_320_320
18861885
NEW metal2 0 + SHAPE STRIPE ( 124000 201600 ) via2_3_960_340_1_3_320_320
18871886
NEW metal1 0 + SHAPE STRIPE ( 124000 201600 ) via1_2_960_340_1_3_300_300
@@ -1990,7 +1989,6 @@ SPECIALNETS 2 ;
19901989
NEW metal3 0 + SHAPE STRIPE ( 124000 5600 ) via3_4_960_340_1_3_320_320
19911990
NEW metal2 0 + SHAPE STRIPE ( 124000 5600 ) via2_3_960_340_1_3_320_320
19921991
NEW metal1 0 + SHAPE STRIPE ( 124000 5600 ) via1_2_960_340_1_3_300_300
1993-
NEW metal3 0 + SHAPE STRIPE ( 124000 10 ) via3_4_960_340_1_3_320_320
19941992
NEW metal3 0 + SHAPE STRIPE ( 84000 201600 ) via3_4_960_340_1_3_320_320
19951993
NEW metal2 0 + SHAPE STRIPE ( 84000 201600 ) via2_3_960_340_1_3_320_320
19961994
NEW metal1 0 + SHAPE STRIPE ( 84000 201600 ) via1_2_960_340_1_3_300_300
@@ -2099,7 +2097,6 @@ SPECIALNETS 2 ;
20992097
NEW metal3 0 + SHAPE STRIPE ( 84000 5600 ) via3_4_960_340_1_3_320_320
21002098
NEW metal2 0 + SHAPE STRIPE ( 84000 5600 ) via2_3_960_340_1_3_320_320
21012099
NEW metal1 0 + SHAPE STRIPE ( 84000 5600 ) via1_2_960_340_1_3_300_300
2102-
NEW metal3 0 + SHAPE STRIPE ( 84000 10 ) via3_4_960_340_1_3_320_320
21032100
NEW metal3 0 + SHAPE STRIPE ( 44000 201600 ) via3_4_960_340_1_3_320_320
21042101
NEW metal2 0 + SHAPE STRIPE ( 44000 201600 ) via2_3_960_340_1_3_320_320
21052102
NEW metal1 0 + SHAPE STRIPE ( 44000 201600 ) via1_2_960_340_1_3_300_300
@@ -2312,8 +2309,7 @@ SPECIALNETS 2 ;
23122309
NEW metal1 0 + SHAPE STRIPE ( 4000 11200 ) via1_2_960_340_1_3_300_300
23132310
NEW metal3 0 + SHAPE STRIPE ( 4000 5600 ) via3_4_960_340_1_3_320_320
23142311
NEW metal2 0 + SHAPE STRIPE ( 4000 5600 ) via2_3_960_340_1_3_320_320
2315-
NEW metal1 0 + SHAPE STRIPE ( 4000 5600 ) via1_2_960_340_1_3_300_300
2316-
NEW metal3 0 + SHAPE STRIPE ( 4000 10 ) via3_4_960_340_1_3_320_320 ;
2312+
NEW metal1 0 + SHAPE STRIPE ( 4000 5600 ) via1_2_960_340_1_3_300_300 ;
23172313
END SPECIALNETS
23182314
NETS 385 ;
23192315
- _000_ ( _324_ ZN ) ( _576_ D ) + USE SIGNAL ;

src/pdn/test/core_grid_with_single_edge_pins.ok

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
[INFO ODB-0133] Created 385 nets and 1110 connections.
66
[INFO IFP-0001] Added 72 rows of 527 site FreePDK45_38x28_10R_NP_162NW_34O.
77
[INFO PDN-0001] Inserting grid: Core
8-
[WARNING PDN-0195] Removing 2 via(s) between metal1 and metal4 at (2.0000 um, 0.0050 um) for VSS
9-
[WARNING PDN-0195] Removing 2 via(s) between metal1 and metal4 at (42.0000 um, 0.0050 um) for VSS
10-
[WARNING PDN-0195] Removing 2 via(s) between metal1 and metal4 at (62.0000 um, 0.0050 um) for VSS
11-
[WARNING PDN-0195] Removing 2 via(s) between metal1 and metal4 at (82.0000 um, 0.0050 um) for VSS
8+
[WARNING PDN-0195] Removing 3 via(s) between metal1 and metal4 at (2.0000 um, 0.0050 um) for VSS
9+
[WARNING PDN-0195] Removing 3 via(s) between metal1 and metal4 at (42.0000 um, 0.0050 um) for VSS
10+
[WARNING PDN-0195] Removing 3 via(s) between metal1 and metal4 at (62.0000 um, 0.0050 um) for VSS
11+
[WARNING PDN-0195] Removing 3 via(s) between metal1 and metal4 at (82.0000 um, 0.0050 um) for VSS
1212
No differences found.

0 commit comments

Comments
 (0)