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

View File

@ -120,15 +120,17 @@ class HyperNet_NetOccurrencesUnder : public Collection<Occurrence> {
public: typedef Hurricane::Locator<Occurrence> Inherit;
private: const HyperNet* _hyperNet;
private: Box _area;
private: Box _area;
private: bool _doExtraction;
private: bool _allowInterruption;
private: set<Occurrence> _netOccurrenceSet;
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);
@ -148,7 +150,7 @@ class HyperNet_NetOccurrencesUnder : public Collection<Occurrence> {
// **********
private: const HyperNet* _hyperNet;
private: Box _area;
private: Box _area;
private: bool _doExtraction;
private: bool _allowInterruption;

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