Skip to content

Commit 7039789

Browse files
authored
Merge pull request #8957 from gadfort/dbsta-skip-supply-nets
dbsta: skip supply nets when iterating over pins
2 parents 5627478 + 5389ace commit 7039789

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed

src/dbSta/include/db_sta/dbNetwork.hh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,11 @@ class dbNetwork : public ConcreteNetwork
161161

162162
PortDirection* dbToSta(const dbSigType& sig_type,
163163
const dbIoType& io_type) const;
164+
165+
bool isPGSupply(dbITerm* iterm) const;
166+
bool isPGSupply(dbBTerm* bterm) const;
167+
bool isPGSupply(dbNet* net) const;
168+
164169
// dbStaCbk::inDbBTermCreate
165170
Port* makeTopPort(dbBTerm* bterm);
166171
dbBTerm* isTopPort(const Port*) const;

src/dbSta/src/dbNetwork.cc

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -547,18 +547,21 @@ DbInstancePinIterator::DbInstancePinIterator(const Instance* inst,
547547
bool DbInstancePinIterator::hasNext()
548548
{
549549
if (top_) {
550-
if (bitr_ == bitr_end_) {
551-
return false;
550+
while (bitr_ != bitr_end_) {
551+
dbBTerm* bterm = *bitr_;
552+
if (!network_->isPGSupply(bterm)) {
553+
next_ = network_->dbToSta(bterm);
554+
bitr_++;
555+
return true;
556+
}
557+
bitr_++;
552558
}
553-
dbBTerm* bterm = *bitr_;
554-
next_ = network_->dbToSta(bterm);
555-
bitr_++;
556-
return true;
559+
return false;
557560
}
558561

559562
while (iitr_ != iitr_end_) {
560563
dbITerm* iterm = *iitr_;
561-
if (!iterm->getSigType().isSupply()) {
564+
if (!network_->isPGSupply(iterm)) {
562565
next_ = network_->dbToSta(*iitr_);
563566
++iitr_;
564567
return true;
@@ -621,7 +624,7 @@ bool DbNetPinIterator::hasNext()
621624
{
622625
while (iitr_ != iitr_end_) {
623626
dbITerm* iterm = *iitr_;
624-
if (!iterm->getSigType().isSupply()) {
627+
if (!network_->isPGSupply(iterm)) {
625628
next_ = network_->dbToSta(*iitr_);
626629
++iitr_;
627630
return true;
@@ -685,11 +688,14 @@ bool DbNetTermIterator::hasNext()
685688

686689
Term* DbNetTermIterator::next()
687690
{
688-
if (iter_ != end_) {
691+
while (iter_ != end_) {
689692
dbBTerm* bterm = *iter_;
690693
iter_++;
691-
return network_->dbToStaTerm(bterm);
694+
if (!network_->isPGSupply(bterm)) {
695+
return network_->dbToStaTerm(bterm);
696+
}
692697
}
698+
693699
if (mod_iter_ != mod_end_ && (network_->hasHierarchy())) {
694700
dbModBTerm* modbterm = *mod_iter_;
695701
mod_iter_++;
@@ -4991,4 +4997,31 @@ void dbNetwork::removeDriverFromCache(const Net* net, const Pin* drvr)
49914997
}
49924998
}
49934999

5000+
bool dbNetwork::isPGSupply(dbITerm* iterm) const
5001+
{
5002+
if (iterm->getSigType().isSupply()) {
5003+
return true;
5004+
}
5005+
5006+
return isPGSupply(iterm->getNet());
5007+
}
5008+
5009+
bool dbNetwork::isPGSupply(dbBTerm* bterm) const
5010+
{
5011+
if (bterm->getSigType().isSupply()) {
5012+
return true;
5013+
}
5014+
5015+
return isPGSupply(bterm->getNet());
5016+
}
5017+
5018+
bool dbNetwork::isPGSupply(dbNet* net) const
5019+
{
5020+
if (net == nullptr) {
5021+
return false;
5022+
}
5023+
5024+
return net->isSpecial() && net->getSigType().isSupply();
5025+
}
5026+
49945027
} // namespace sta

0 commit comments

Comments
 (0)