* 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())
{
Instance* instance = _instanceLocator.getElement();
if (not instance->isTerminalNetlist())
_hyperNetRootNetOccurrenceLocator=Locator(instance->getMasterCell(),Path(_path,instance));
_instanceLocator.progress();
}

View File

@ -127,8 +127,10 @@ class HyperNet_NetOccurrencesUnder : public Collection<Occurrence> {
private: stack<Occurrence> _netOccurrenceStack;
public: Locator();
public: Locator(const HyperNet* hyperNet, Box area,
bool doExtraction = false, bool allowInterruption = false);
public: Locator(const HyperNet* hyperNet
, Box area
, bool doExtraction = false
, bool allowInterruption = false);
public: Locator(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)));
}
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
// **********************************
{

View File

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