* Bug: In CellCollection::Cell_HyperNetRootNetOccurrences::progress(),

skip Nets that are inside Terminal Netlist master cells. Was done
    ine the locator constructor but forgotten in the progress().
This commit is contained in:
Jean-Paul Chaput 2020-08-03 19:35:21 +02:00
parent 86b184dd1e
commit ea38329de1
4 changed files with 22 additions and 5 deletions

View File

@ -4694,6 +4694,7 @@ Cell_HyperNetRootNetOccurrences::Locator::Locator(const Cell* cell, Path path)
while (not _hyperNetRootNetOccurrenceLocator.isValid() and _instanceLocator.isValid()) while (not _hyperNetRootNetOccurrenceLocator.isValid() and _instanceLocator.isValid())
{ {
Instance* instance = _instanceLocator.getElement(); Instance* instance = _instanceLocator.getElement();
if (not instance->isTerminalNetlist())
_hyperNetRootNetOccurrenceLocator=Locator(instance->getMasterCell(),Path(_path,instance)); _hyperNetRootNetOccurrenceLocator=Locator(instance->getMasterCell(),Path(_path,instance));
_instanceLocator.progress(); _instanceLocator.progress();
} }

View File

@ -127,8 +127,10 @@ class HyperNet_NetOccurrencesUnder : public Collection<Occurrence> {
private: stack<Occurrence> _netOccurrenceStack; private: stack<Occurrence> _netOccurrenceStack;
public: Locator(); public: Locator();
public: Locator(const HyperNet* hyperNet, Box area, public: Locator(const HyperNet* hyperNet
bool doExtraction = false, bool allowInterruption = false); , Box area
, bool doExtraction = false
, bool allowInterruption = false);
public: Locator(const Locator& locator); public: Locator(const Locator& locator);
public: Locator& operator=(const Locator& locator); public: Locator& operator=(const Locator& locator);

View File

@ -105,6 +105,19 @@ bool Occurrence::operator<(const Occurrence& occurrence) const
// ((_entity == occurrence._entity) and (_sharedPath < occurrence._sharedPath))); // ((_entity == occurrence._entity) and (_sharedPath < occurrence._sharedPath)));
} }
bool Occurrence::isBelowTerminalNetlist() const
// ********************************************
{
SharedPath* tail = _sharedPath;
while ( tail ) {
Instance* instance = tail->getHeadInstance();
tail = tail->getTailSharedPath();
if (tail and instance->isTerminalNetlist()) return true;
}
return false;
}
Cell* Occurrence::getOwnerCell() const Cell* Occurrence::getOwnerCell() const
// ********************************** // **********************************
{ {

View File

@ -79,6 +79,7 @@ class Occurrence {
// ********** // **********
public: bool isValid() const {return (_entity != NULL);}; public: bool isValid() const {return (_entity != NULL);};
public: bool isBelowTerminalNetlist() const;
public: bool hasProperty() const; public: bool hasProperty() const;
// Updators // Updators