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.
This commit is contained in:
Jean-Paul Chaput 2014-10-05 12:21:02 +02:00
parent 60b0aa5ca7
commit b98e6a968a
2 changed files with 13 additions and 2 deletions

View File

@ -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;

View File

@ -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<Pin*>(*icomponent)) continue;
const RegularLayer* layer = dynamic_cast<const RegularLayer*>(icomponent->getLayer());
if (layer and (layer->getBasicLayer()->getMaterial() == BasicLayer::Material::blockage))
continue;
Horizontal* horizontal = dynamic_cast<Horizontal*>(*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<Vertical*>(*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<Contact*>(*icomponent);
if (contact) {
cerr << contact << endl;
isPreRouted = true;
contacts.push_back( contact );
if ( (contact->getWidth () != Session::getViaWidth(contact->getLayer()))