Discriminate between I/O pin and block pin in NetBuilder.

* Bug: In NetBuilder::setStartHook(), trigger the "move up" of
    global routing only when encountering RoutingPad of a macro
    block and *not* an I/O pin of the whole block (at the edge).
    Boils down to look if the RoutingPad is anchored on a Pin
    or a Segment (macro block).
This commit is contained in:
Jean-Paul Chaput 2022-05-21 13:03:38 +02:00
parent 1babec2e91
commit 53db943d14
1 changed files with 4 additions and 2 deletions

View File

@ -505,6 +505,7 @@ namespace Anabatic {
continue;
}
bool isPin = (dynamic_cast<Pin*>( rp->getOccurrence().getEntity() ) != nullptr);
size_t rpDepth = 0;
for ( size_t depth=0 ; depth < Session::getRoutingGauge()->getDepth() ; ++depth ) {
if (layer->getMask() == Session::getRoutingLayer(depth)->getMask()) {
@ -512,7 +513,8 @@ namespace Anabatic {
break;
}
}
if ((rpDepth > 0) and not Session::getRoutingGauge()->isSuperPitched()) {
if ((rpDepth > 0) and not isPin
and not Session::getRoutingGauge()->isSuperPitched()) {
_flags |= ToUpperRouting;
cdebug_log(145,0) << "ToUpperRouting set, getFlags():" << getFlags() << endl;
}
@ -530,7 +532,7 @@ namespace Anabatic {
//continue;
}
if (dynamic_cast<Pin*>(rp->getOccurrence().getEntity())) _connexity.fields.Pin++;
if (isPin) _connexity.fields.Pin++;
}
cdebug_log(145,0) << "| Component to connect: " << anchor << endl;