From 53db943d14fbd720a4201eab06627d1fb72e0a78 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 21 May 2022 13:03:38 +0200 Subject: [PATCH] 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). --- anabatic/src/NetBuilder.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/anabatic/src/NetBuilder.cpp b/anabatic/src/NetBuilder.cpp index 845f0824..4f5357c0 100644 --- a/anabatic/src/NetBuilder.cpp +++ b/anabatic/src/NetBuilder.cpp @@ -505,6 +505,7 @@ namespace Anabatic { continue; } + bool isPin = (dynamic_cast( 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(rp->getOccurrence().getEntity())) _connexity.fields.Pin++; + if (isPin) _connexity.fields.Pin++; } cdebug_log(145,0) << "| Component to connect: " << anchor << endl;