From b98e6a968a94481cc202c5e750cdef216a6c71aa Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sun, 5 Oct 2014 12:21:02 +0200 Subject: [PATCH] Kite, Pin are not pre-route, do not use _vdde when routing a block. * Bug: In Kite, in KiteEngine::BuildPreRouteds(), Pin (sub-class of Contact) must not be considered as a component triggering the *already routed* state. * Bug: In Kite, in BuildPreRouteds (GlobalNetTable), when de design is *not* a full chip, do not try to compare net with _vdde/_vsse. --- kite/src/BuildPowerRails.cpp | 4 ++-- kite/src/BuildPreRouteds.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kite/src/BuildPowerRails.cpp b/kite/src/BuildPowerRails.cpp index 7d8daac0..98f03626 100644 --- a/kite/src/BuildPowerRails.cpp +++ b/kite/src/BuildPowerRails.cpp @@ -350,8 +350,8 @@ namespace { ltrace(300) << " getRootNet:" << path << ":" << net << endl; if (net == _blockage) return _blockage; - if (net->getName() == _vdde->getName()) return _vdde; - if (net->getName() == _vsse->getName()) return _vsse; + if (_vdde and (net->getName() == _vdde->getName())) return _vdde; + if (_vsse and (net->getName() == _vsse->getName())) return _vsse; if (net->getType() == Net::Type::POWER ) return _vddi; if (net->getType() == Net::Type::GROUND) return _vssi; diff --git a/kite/src/BuildPreRouteds.cpp b/kite/src/BuildPreRouteds.cpp index 115a70ff..7323e7b6 100644 --- a/kite/src/BuildPreRouteds.cpp +++ b/kite/src/BuildPreRouteds.cpp @@ -25,6 +25,7 @@ #include "hurricane/Horizontal.h" #include "hurricane/Vertical.h" #include "hurricane/RoutingPad.h" +#include "hurricane/Pin.h" #include "hurricane/NetExternalComponents.h" #include "hurricane/NetRoutingProperty.h" #include "hurricane/DeepNet.h" @@ -62,6 +63,7 @@ namespace Kite { using Hurricane::Horizontal; using Hurricane::Vertical; using Hurricane::RoutingPad; + using Hurricane::Pin; using Hurricane::NetExternalComponents; using Hurricane::NetRoutingExtension; using Hurricane::NetRoutingState; @@ -114,8 +116,15 @@ namespace Kite { } } else { forEach ( Component*, icomponent, inet->getComponents() ) { + if (dynamic_cast(*icomponent)) continue; + + const RegularLayer* layer = dynamic_cast(icomponent->getLayer()); + if (layer and (layer->getBasicLayer()->getMaterial() == BasicLayer::Material::blockage)) + continue; + Horizontal* horizontal = dynamic_cast(*icomponent); if (horizontal) { + cerr << horizontal << endl; segments.push_back( horizontal ); isPreRouted = true; if (horizontal->getWidth() != Session::getWireWidth(horizontal->getLayer())) @@ -123,6 +132,7 @@ namespace Kite { } else { Vertical* vertical = dynamic_cast(*icomponent); if (vertical) { + cerr << vertical << endl; isPreRouted = true; segments.push_back( vertical ); if (vertical->getWidth() != Session::getWireWidth(vertical->getLayer())) @@ -130,6 +140,7 @@ namespace Kite { } else { Contact* contact = dynamic_cast(*icomponent); if (contact) { + cerr << contact << endl; isPreRouted = true; contacts.push_back( contact ); if ( (contact->getWidth () != Session::getViaWidth(contact->getLayer()))