Skip to content

Commit 5a1818f

Browse files
authored
Merge pull request #9375 from gadfort/defout-auto-wild-defok
odb: identify terminals that can be used with wildcard during defout
2 parents 110ad5a + 9498822 commit 5a1818f

45 files changed

Lines changed: 2771 additions & 13252 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/dpl/test/fillers1.defok

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ PINS 2 ;
5353
+ FIXED ( 0 60 ) N ;
5454
END PINS
5555
SPECIALNETS 2 ;
56-
- VDD ( * VDD ) + USE POWER
56+
- VDD ( _277_ VDD ) + USE POWER
5757
+ ROUTED metal6 0 + SHAPE STRIPE ( 136140 106400 ) via6_960x2800
5858
NEW metal5 0 + SHAPE STRIPE ( 136140 106400 ) via5_960x2800
5959
NEW metal4 0 + SHAPE STRIPE ( 136140 106400 ) via4_960x2800
@@ -73,7 +73,7 @@ SPECIALNETS 2 ;
7373
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 14000 ) ( 15960 14000 )
7474
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 8400 ) ( 15960 8400 )
7575
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 2800 ) ( 15960 2800 ) ;
76-
- VSS ( * VSS ) + USE GROUND
76+
- VSS ( _277_ VSS ) + USE GROUND
7777
+ ROUTED metal6 0 + SHAPE STRIPE ( 80140 146400 ) via6_960x2800
7878
NEW metal5 0 + SHAPE STRIPE ( 80140 146400 ) via5_960x2800
7979
NEW metal4 0 + SHAPE STRIPE ( 80140 146400 ) via4_960x2800

src/dpl/test/fillers10.defok

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,7 @@ PINS 2 ;
11751175
+ FIXED ( 0 60 ) N ;
11761176
END PINS
11771177
SPECIALNETS 2 ;
1178-
- VDD ( * VDD ) + USE POWER
1178+
- VDD ( _277_ VDD ) + USE POWER
11791179
+ ROUTED metal6 0 + SHAPE STRIPE ( 136140 106400 ) via6_960x2800
11801180
NEW metal5 0 + SHAPE STRIPE ( 136140 106400 ) via5_960x2800
11811181
NEW metal4 0 + SHAPE STRIPE ( 136140 106400 ) via4_960x2800
@@ -1195,7 +1195,7 @@ SPECIALNETS 2 ;
11951195
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 14000 ) ( 15960 14000 )
11961196
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 8400 ) ( 15960 8400 )
11971197
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 2800 ) ( 15960 2800 ) ;
1198-
- VSS ( * VSS ) + USE GROUND
1198+
- VSS ( _277_ VSS ) + USE GROUND
11991199
+ ROUTED metal6 0 + SHAPE STRIPE ( 80140 146400 ) via6_960x2800
12001200
NEW metal5 0 + SHAPE STRIPE ( 80140 146400 ) via5_960x2800
12011201
NEW metal4 0 + SHAPE STRIPE ( 80140 146400 ) via4_960x2800

src/dpl/test/fillers2.defok

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ PINS 2 ;
5353
+ FIXED ( 0 60 ) N ;
5454
END PINS
5555
SPECIALNETS 2 ;
56-
- VDD ( * VDD ) + USE POWER
56+
- VDD ( _277_ VDD ) + USE POWER
5757
+ ROUTED metal6 0 + SHAPE STRIPE ( 136140 106400 ) via6_960x2800
5858
NEW metal5 0 + SHAPE STRIPE ( 136140 106400 ) via5_960x2800
5959
NEW metal4 0 + SHAPE STRIPE ( 136140 106400 ) via4_960x2800
@@ -73,7 +73,7 @@ SPECIALNETS 2 ;
7373
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 14000 ) ( 15960 14000 )
7474
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 8400 ) ( 15960 8400 )
7575
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 2800 ) ( 15960 2800 ) ;
76-
- VSS ( * VSS ) + USE GROUND
76+
- VSS ( _277_ VSS ) + USE GROUND
7777
+ ROUTED metal6 0 + SHAPE STRIPE ( 80140 146400 ) via6_960x2800
7878
NEW metal5 0 + SHAPE STRIPE ( 80140 146400 ) via5_960x2800
7979
NEW metal4 0 + SHAPE STRIPE ( 80140 146400 ) via4_960x2800

src/dpl/test/fillers5.defok

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ PINS 2 ;
5959
+ FIXED ( 0 60 ) N ;
6060
END PINS
6161
SPECIALNETS 2 ;
62-
- VDD ( * VDD ) + USE POWER
62+
- VDD ( _277_ VDD ) + USE POWER
6363
+ ROUTED metal6 0 + SHAPE STRIPE ( 136140 106400 ) via6_960x2800
6464
NEW metal5 0 + SHAPE STRIPE ( 136140 106400 ) via5_960x2800
6565
NEW metal4 0 + SHAPE STRIPE ( 136140 106400 ) via4_960x2800
@@ -79,7 +79,7 @@ SPECIALNETS 2 ;
7979
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 14000 ) ( 15960 14000 )
8080
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 8400 ) ( 15960 8400 )
8181
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 2800 ) ( 15960 2800 ) ;
82-
- VSS ( * VSS ) + USE GROUND
82+
- VSS ( _277_ VSS ) + USE GROUND
8383
+ ROUTED metal6 0 + SHAPE STRIPE ( 80140 146400 ) via6_960x2800
8484
NEW metal5 0 + SHAPE STRIPE ( 80140 146400 ) via5_960x2800
8585
NEW metal4 0 + SHAPE STRIPE ( 80140 146400 ) via4_960x2800

src/dpl/test/fillers7.defok

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ PINS 2 ;
5353
+ FIXED ( 0 60 ) N ;
5454
END PINS
5555
SPECIALNETS 2 ;
56-
- VDD ( * VDD ) + USE POWER
56+
- VDD ( _277_ VDD ) + USE POWER
5757
+ ROUTED metal6 0 + SHAPE STRIPE ( 136140 106400 ) via6_960x2800
5858
NEW metal5 0 + SHAPE STRIPE ( 136140 106400 ) via5_960x2800
5959
NEW metal4 0 + SHAPE STRIPE ( 136140 106400 ) via4_960x2800
@@ -73,7 +73,7 @@ SPECIALNETS 2 ;
7373
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 14000 ) ( 15960 14000 )
7474
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 8400 ) ( 15960 8400 )
7575
NEW metal1 340 + SHAPE FOLLOWPIN ( 3800 2800 ) ( 15960 2800 ) ;
76-
- VSS ( * VSS ) + USE GROUND
76+
- VSS ( _277_ VSS ) + USE GROUND
7777
+ ROUTED metal6 0 + SHAPE STRIPE ( 80140 146400 ) via6_960x2800
7878
NEW metal5 0 + SHAPE STRIPE ( 80140 146400 ) via5_960x2800
7979
NEW metal4 0 + SHAPE STRIPE ( 80140 146400 ) via4_960x2800

src/grt/test/repair_antennas2.defok

Lines changed: 320 additions & 2 deletions
Large diffs are not rendered by default.

src/odb/src/defout/defout_impl.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <set>
2020
#include <stdexcept>
2121
#include <string>
22+
#include <unordered_map>
2223
#include <variant>
2324
#include <vector>
2425

@@ -1286,6 +1287,14 @@ void DefOut::Impl::writeNets(dbBlock* block)
12861287

12871288
auto sorted_nets = sortedSet(nets);
12881289

1290+
// Build map of mterm names and associated nets
1291+
std::unordered_map<std::string, std::set<dbNet*>> snet_term_map;
1292+
for (auto* inst : block->getInsts()) {
1293+
for (auto* iterm : inst->getITerms()) {
1294+
snet_term_map[iterm->getMTerm()->getName()].insert(iterm->getNet());
1295+
}
1296+
}
1297+
12891298
for (dbNet* net : sorted_nets) {
12901299
if (_select_net_map) {
12911300
if (!(*_select_net_map)[net]) {
@@ -1319,7 +1328,7 @@ void DefOut::Impl::writeNets(dbBlock* block)
13191328
continue;
13201329
}
13211330
if (net->isSpecial()) {
1322-
writeSNet(net);
1331+
writeSNet(net, snet_term_map);
13231332
}
13241333
}
13251334

@@ -1341,7 +1350,9 @@ void DefOut::Impl::writeNets(dbBlock* block)
13411350
*_out << "END NETS\n";
13421351
}
13431352

1344-
void DefOut::Impl::writeSNet(dbNet* net)
1353+
void DefOut::Impl::writeSNet(
1354+
dbNet* net,
1355+
const std::unordered_map<std::string, std::set<dbNet*>>& snet_term_map)
13451356
{
13461357
std::string nname = net->getName();
13471358
*_out << " - " << nname;
@@ -1365,7 +1376,12 @@ void DefOut::Impl::writeSNet(dbNet* net)
13651376
dbInst* inst = iterm->getInst();
13661377
dbMTerm* mterm = iterm->getMTerm();
13671378
char* mtname = mterm->getName(inst, &ttname[0]);
1368-
if (net->isWildConnected()) {
1379+
bool iswildcard = false;
1380+
if (snet_term_map.at(mterm->getName()).size() == 1) {
1381+
// mterm is unique to this net, so we can use wildcard
1382+
iswildcard = true;
1383+
}
1384+
if (iswildcard) {
13691385
if (wild_names.find(mtname) == wild_names.end()) {
13701386
*_out << " ( * " << mtname << " )";
13711387
++i;

src/odb/src/defout/defout_impl.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
#include <list>
88
#include <map>
99
#include <ostream>
10+
#include <set>
1011
#include <string>
12+
#include <unordered_map>
1113

1214
#include "odb/db.h"
1315
#include "odb/dbMap.h"
@@ -84,7 +86,9 @@ class DefOut::Impl
8486
void writeFills(dbBlock* block);
8587
void writeNets(dbBlock* block);
8688
void writeNet(dbNet* net);
87-
void writeSNet(dbNet* net);
89+
void writeSNet(
90+
dbNet* net,
91+
const std::unordered_map<std::string, std::set<dbNet*>>& snet_term_map);
8892
void writeWire(dbWire* wire);
8993
void writeSWire(dbSWire* wire);
9094
void writeSpecialPath(dbSBox* box);

0 commit comments

Comments
 (0)