Prune ordinary wires in Katana::PowerRails.

* Change: In Katana::PowerRails, in TerminalNetlist cells instances,
    the ordinary nets components where generating obstacles, leading
    to stupid cross blockages between the obstacle generated by the
    component supporting the routing pad and the RP itself.
      Now only take into account supplies and clocks (any layers)
    and blockage layers.
      Fix symbolic benches.
This commit is contained in:
Jean-Paul Chaput 2021-06-13 12:03:57 +02:00
parent 63d2f69459
commit 2e015ea780
1 changed files with 12 additions and 1 deletions

View File

@ -915,9 +915,10 @@ namespace {
virtual void doQuery (); virtual void doQuery ();
inline void doLayout (); inline void doLayout ();
inline uint32_t getGoMatchCount () const; inline uint32_t getGoMatchCount () const;
inline RoutingGauge* getRoutingGauge () const;
private: private:
AllianceFramework* _framework; AllianceFramework* _framework;
KatanaEngine* _katana; KatanaEngine* _katana;
RoutingGauge* _routingGauge; RoutingGauge* _routingGauge;
const ChipTools& _chipTools; const ChipTools& _chipTools;
PowerRailsPlanes _powerRailsPlanes; PowerRailsPlanes _powerRailsPlanes;
@ -957,6 +958,10 @@ namespace {
{ return _powerRailsPlanes.doLayout(); } { return _powerRailsPlanes.doLayout(); }
inline RoutingGauge* QueryPowerRails::getRoutingGauge () const
{ return _routingGauge; }
bool QueryPowerRails::hasBasicLayer ( const BasicLayer* basicLayer ) bool QueryPowerRails::hasBasicLayer ( const BasicLayer* basicLayer )
{ return _powerRailsPlanes.hasPlane ( basicLayer ); } { return _powerRailsPlanes.hasPlane ( basicLayer ); }
@ -1031,6 +1036,12 @@ namespace {
cdebug_log(159,0) << " rootNet " << rootNet << " (" << rootNet->isClock() << ") " cdebug_log(159,0) << " rootNet " << rootNet << " (" << rootNet->isClock() << ") "
<< go->getCell() << " (" << go->getCell()->isTerminal() << ")" << endl; << go->getCell() << " (" << go->getCell()->isTerminal() << ")" << endl;
// unsigned int type = _powerRailsPlanes.getActivePlane()->getRoutingPlane()->getLayerGauge()->getType();
if (go->getCell()->isTerminalNetlist()) {
if (not rootNet->isSupply() and not rootNet->isClock() and not _isBlockagePlane)
return;
}
const Segment* segment = dynamic_cast<const Segment*>(component); const Segment* segment = dynamic_cast<const Segment*>(component);
if ( segment != NULL ) { if ( segment != NULL ) {
_goMatchCount++; _goMatchCount++;