Take account of Rectilinears in KatanaEngine::setupPowerRails()
* New: In QueryPowerRails::addToPowerRail(), now manage Rectilinears, *if* they are, in fact, rectangles. For LibreSOCMem block support.
This commit is contained in:
parent
e0bae89a81
commit
35d54c3e74
|
@ -80,10 +80,13 @@ namespace {
|
|||
if (source->getGCell()->isStdCellRow() and target->getGCell()->isStdCellRow())
|
||||
return Vertex::unreachable;
|
||||
|
||||
cdebug_log(112,0) << "DigitalDistance::operator(): " << edge
|
||||
<< " isGostraight():" << source->getGCell()->isGoStraight() << endl;
|
||||
if ( source->getGCell()->isGoStraight()
|
||||
and source->getFrom()
|
||||
and (source->getFrom()->isHorizontal() xor edge->isHorizontal()))
|
||||
return Vertex::unreachable;
|
||||
cdebug_log(112,0) << "Not a go straight" << endl;
|
||||
|
||||
if (edge->getCapacity() <= 0) {
|
||||
if (target->getGCell()->isStdCellRow()
|
||||
|
@ -94,9 +97,11 @@ namespace {
|
|||
and source->hasValidStamp() and (source->getConnexId() >= 0) )
|
||||
return 0;
|
||||
|
||||
cdebug_log(112,0) << "Negative or null edge capacity: " << edge->getCapacity() << endl;
|
||||
return Vertex::unreachable;
|
||||
}
|
||||
|
||||
cdebug_log(112,0) << "Computing distance" << endl;
|
||||
float congestionCost = 1.0;
|
||||
float congestion = ((float)edge->getRealOccupancy() + edge->getEstimateOccupancy())
|
||||
/ (float)edge->getCapacity();
|
||||
|
@ -110,7 +115,6 @@ namespace {
|
|||
/*and not source->hasGContact(_net)*/ ) {
|
||||
viaCost += 2.5;
|
||||
}
|
||||
|
||||
|
||||
float realCongestion = (float)edge->getRealOccupancy() / (float)edge->getCapacity();
|
||||
float historicCost = edge->getHistoricCost();
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "hurricane/Pad.h"
|
||||
#include "hurricane/Horizontal.h"
|
||||
#include "hurricane/Vertical.h"
|
||||
#include "hurricane/Rectilinear.h"
|
||||
#include "hurricane/RoutingPad.h"
|
||||
#include "hurricane/NetExternalComponents.h"
|
||||
#include "hurricane/NetRoutingProperty.h"
|
||||
|
@ -54,6 +55,7 @@ namespace {
|
|||
using Hurricane::DeepNet;
|
||||
using Hurricane::Horizontal;
|
||||
using Hurricane::Pad;
|
||||
using Hurricane::Rectilinear;
|
||||
using Hurricane::Vertical;
|
||||
using Hurricane::RoutingPad;
|
||||
using Hurricane::NetExternalComponents;
|
||||
|
@ -1107,6 +1109,19 @@ namespace {
|
|||
<< " " << basicLayer << endl;
|
||||
|
||||
_powerRailsPlanes.merge( bb, rootNet );
|
||||
} else {
|
||||
const Rectilinear* rectilinear = dynamic_cast<const Rectilinear*>(component);
|
||||
if (rectilinear and (rectilinear->getPoints().size() == 5)) {
|
||||
_goMatchCount++;
|
||||
|
||||
Box bb = rectilinear->getBoundingBox( basicLayer );
|
||||
transformation.applyOn( bb );
|
||||
|
||||
cdebug_log(159,0) << " Merging PowerRail element: " << rectilinear << " bb:" << bb
|
||||
<< " " << basicLayer << endl;
|
||||
|
||||
_powerRailsPlanes.merge( bb, rootNet );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue