* ./kite:

- Change: In RoutingEvent::State::conflictSolve1_v1b(), when finding obstacles
        in candidates tracks, no longer ignore blockages (segments from pads that
        connot be broken because they see *no* conflicts...).
This commit is contained in:
Jean-Paul Chaput 2012-01-03 17:04:00 +00:00
parent c4d93e71e8
commit 4e5ce663d8
4 changed files with 23 additions and 12 deletions

View File

@ -381,12 +381,16 @@ namespace {
void PowerRailsPlanes::Rail::merge ( DbU::Unit source, DbU::Unit target ) void PowerRailsPlanes::Rail::merge ( DbU::Unit source, DbU::Unit target )
{ {
Interval chunkMerge ( source, target ); Interval chunkMerge ( source, target );
ltrace(300) << " Rail::merge() " << chunkMerge << endl;
list<Interval>::iterator imerge = _chunks.end(); list<Interval>::iterator imerge = _chunks.end();
list<Interval>::iterator ichunk = _chunks.begin(); list<Interval>::iterator ichunk = _chunks.begin();
while ( ichunk != _chunks.end() ) { 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 ( chunkMerge.intersect(*ichunk) ) {
if ( imerge == _chunks.end() ) { if ( imerge == _chunks.end() ) {
@ -403,7 +407,7 @@ namespace {
if ( imerge == _chunks.end() ) { if ( imerge == _chunks.end() ) {
_chunks.insert ( ichunk, chunkMerge ); _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 axisMin = 0;
DbU::Unit axisMax = 0; DbU::Unit axisMax = 0;
if ( type == Constant::PinOnly ) {
ltrace(300) << " Layer is PinOnly." << endl;
return;
}
if ( getDirection() == Constant::Horizontal ) { if ( getDirection() == Constant::Horizontal ) {
list<Interval>::iterator ichunk = _chunks.begin(); list<Interval>::iterator ichunk = _chunks.begin();
for ( ; ichunk != _chunks.end() ; ichunk++ ) { for ( ; ichunk != _chunks.end() ; ichunk++ ) {
if ( type == Constant::PinOnly ) continue;
ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin()) ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin())
<< ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl; << ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl;
@ -456,8 +463,6 @@ namespace {
} else { } else {
list<Interval>::iterator ichunk = _chunks.begin(); list<Interval>::iterator ichunk = _chunks.begin();
for ( ; ichunk != _chunks.end() ; ichunk++ ) { for ( ; ichunk != _chunks.end() ; ichunk++ ) {
if ( type == Constant::PinOnly ) continue;
ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin()) ltrace(300) << " chunk: [" << DbU::getValueString((*ichunk).getVMin())
<< ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl; << ":" << DbU::getValueString((*ichunk).getVMax()) << "]" << endl;
@ -607,7 +612,7 @@ namespace {
{ {
Rails* rails = NULL; Rails* rails = NULL;
ltrace(300) << " " << net->getName() << " " << (void*)net << endl; ltrace(300) << " Plane::merge() " << net->getName() << " " << (void*)net << endl;
if ( getDirection() == Constant::Horizontal ) { if ( getDirection() == Constant::Horizontal ) {
map<Net*,Rails*>::iterator irails = _horizontalRails.find(net); map<Net*,Rails*>::iterator irails = _horizontalRails.find(net);
@ -626,6 +631,7 @@ namespace {
} else } else
rails = (*irails).second; rails = (*irails).second;
ltrace(300) << " Vertical Merging" << endl;
rails->merge ( bb ); rails->merge ( bb );
} }
} }
@ -718,7 +724,10 @@ namespace {
if ( not _activePlane ) return; if ( not _activePlane ) return;
Net* topGlobalNet = _globalNets.getRootNet ( net, Path() ); 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 ); _activePlane->merge ( bb, topGlobalNet );
} }
@ -881,7 +890,8 @@ namespace {
Box bb = contact->getBoundingBox ( basicLayer ); Box bb = contact->getBoundingBox ( basicLayer );
transformation.applyOn ( bb ); 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 ); _powerRailsPlanes.merge ( bb, rootNet );
} }

View File

@ -538,6 +538,7 @@ namespace Kite {
// // NO MOVE UP FOR IT... // // 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_23" );
// DebugSession::addToTrace ( getCell(), "mips_r3000_core.mips_r3000_1m_dp.addsub32_carith_se.gi_3_28" ); // DebugSession::addToTrace ( getCell(), "mips_r3000_core.mips_r3000_1m_dp.addsub32_carith_se.gi_3_28" );
//DebugSession::addToTrace ( getCell(), "cout_to_pads" );
createDetailedGrid (); createDetailedGrid ();
buildPowerRails (); buildPowerRails ();

View File

@ -112,7 +112,7 @@ namespace {
Box bb ( segments[i]->getBoundingBox() ); Box bb ( segments[i]->getBoundingBox() );
transformation.applyOn ( bb ); transformation.applyOn ( bb );
cinfo << "bb: " << bb << endl; //cinfo << "bb: " << bb << endl;
if ( direction == Constant::Horizontal ) { if ( direction == Constant::Horizontal ) {
DbU::Unit axisMin = bb.getYMin() - delta; DbU::Unit axisMin = bb.getYMin() - delta;

View File

@ -1584,10 +1584,10 @@ namespace {
} }
otherNet = other->getNet(); otherNet = other->getNet();
otherOverlap = other->getCanonicalInterval(); otherOverlap = other->getCanonicalInterval();
otherIsGlobal = other->isGlobal(); otherIsGlobal = other->isGlobal() or other->isBlockage();
} else { } else {
otherOverlap.merge(other->getCanonicalInterval()); otherOverlap.merge(other->getCanonicalInterval());
otherIsGlobal = otherIsGlobal or other->isGlobal(); otherIsGlobal = otherIsGlobal or other->isGlobal() or other->isBlockage();
} }
} }
if ( not otherOverlap.isEmpty() ) { if ( not otherOverlap.isEmpty() ) {