diff --git a/kite/src/BuildPowerRails.cpp b/kite/src/BuildPowerRails.cpp index 604fea56..6048087b 100644 --- a/kite/src/BuildPowerRails.cpp +++ b/kite/src/BuildPowerRails.cpp @@ -381,12 +381,16 @@ namespace { void PowerRailsPlanes::Rail::merge ( DbU::Unit source, DbU::Unit target ) { Interval chunkMerge ( source, target ); + ltrace(300) << " Rail::merge() " << chunkMerge << endl; list::iterator imerge = _chunks.end(); list::iterator ichunk = _chunks.begin(); while ( ichunk != _chunks.end() ) { - if ( chunkMerge.getVMax() < (*ichunk).getVMin() ) break; + if ( chunkMerge.getVMax() < (*ichunk).getVMin() ) { + _chunks.insert ( ichunk, chunkMerge ); + break; + } if ( chunkMerge.intersect(*ichunk) ) { if ( imerge == _chunks.end() ) { @@ -403,7 +407,7 @@ namespace { if ( imerge == _chunks.end() ) { _chunks.insert ( ichunk, chunkMerge ); - ltrace(190) << "| Add on " << DbU::getValueString(_axis) << " " << chunkMerge << endl; + ltrace(300) << " | Add on " << DbU::getValueString(_axis) << " " << chunkMerge << endl; } } @@ -426,11 +430,14 @@ namespace { DbU::Unit axisMin = 0; DbU::Unit axisMax = 0; + if ( type == Constant::PinOnly ) { + ltrace(300) << " Layer is PinOnly." << endl; + return; + } + if ( getDirection() == Constant::Horizontal ) { list::iterator ichunk = _chunks.begin(); for ( ; ichunk != _chunks.end() ; ichunk++ ) { - if ( type == Constant::PinOnly ) continue; - ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin()) << ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl; @@ -456,8 +463,6 @@ namespace { } else { list::iterator ichunk = _chunks.begin(); for ( ; ichunk != _chunks.end() ; ichunk++ ) { - if ( type == Constant::PinOnly ) continue; - ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin()) << ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl; @@ -607,7 +612,7 @@ namespace { { Rails* rails = NULL; - ltrace(300) << " " << net->getName() << " " << (void*)net << endl; + ltrace(300) << " Plane::merge() " << net->getName() << " " << (void*)net << endl; if ( getDirection() == Constant::Horizontal ) { map::iterator irails = _horizontalRails.find(net); @@ -626,6 +631,7 @@ namespace { } else rails = (*irails).second; + ltrace(300) << " Vertical Merging" << endl; rails->merge ( bb ); } } @@ -718,7 +724,10 @@ namespace { if ( not _activePlane ) return; Net* topGlobalNet = _globalNets.getRootNet ( net, Path() ); - if ( topGlobalNet == NULL ) return; + if ( topGlobalNet == NULL ) { + ltrace(300) << "Not a global net: " << net << endl; + return; + } _activePlane->merge ( bb, topGlobalNet ); } @@ -881,7 +890,8 @@ namespace { Box bb = contact->getBoundingBox ( basicLayer ); transformation.applyOn ( bb ); - ltrace(300) << " Merging PowerRail element: " << contact << " bb:" << bb << endl; + ltrace(300) << " Merging PowerRail element: " << contact << " bb:" << bb + << " " << basicLayer << endl; _powerRailsPlanes.merge ( bb, rootNet ); } diff --git a/kite/src/KiteEngine.cpp b/kite/src/KiteEngine.cpp index bae024eb..da995dff 100644 --- a/kite/src/KiteEngine.cpp +++ b/kite/src/KiteEngine.cpp @@ -538,6 +538,7 @@ namespace Kite { // // NO MOVE UP FOR IT... // DebugSession::addToTrace ( getCell(), "mips_r3000_core.mips_r3000_1m_dp.addsub32_carith_se.gi_3_23" ); // DebugSession::addToTrace ( getCell(), "mips_r3000_core.mips_r3000_1m_dp.addsub32_carith_se.gi_3_28" ); + //DebugSession::addToTrace ( getCell(), "cout_to_pads" ); createDetailedGrid (); buildPowerRails (); diff --git a/kite/src/ProtectRoutingPads.cpp b/kite/src/ProtectRoutingPads.cpp index 0c26fafb..b1e8eee5 100644 --- a/kite/src/ProtectRoutingPads.cpp +++ b/kite/src/ProtectRoutingPads.cpp @@ -112,7 +112,7 @@ namespace { Box bb ( segments[i]->getBoundingBox() ); transformation.applyOn ( bb ); - cinfo << "bb: " << bb << endl; + //cinfo << "bb: " << bb << endl; if ( direction == Constant::Horizontal ) { DbU::Unit axisMin = bb.getYMin() - delta; diff --git a/kite/src/RoutingEvent.cpp b/kite/src/RoutingEvent.cpp index 45556f80..e0ba4aeb 100644 --- a/kite/src/RoutingEvent.cpp +++ b/kite/src/RoutingEvent.cpp @@ -1584,10 +1584,10 @@ namespace { } otherNet = other->getNet(); otherOverlap = other->getCanonicalInterval(); - otherIsGlobal = other->isGlobal(); + otherIsGlobal = other->isGlobal() or other->isBlockage(); } else { otherOverlap.merge(other->getCanonicalInterval()); - otherIsGlobal = otherIsGlobal or other->isGlobal(); + otherIsGlobal = otherIsGlobal or other->isGlobal() or other->isBlockage(); } } if ( not otherOverlap.isEmpty() ) {