Too narrow search area for straight net in Knik.
* Bug: In Knik, in Graph::Dijsktra(), when all the RoutingPads of a net are aligned, the seaching area is only one vertex wide (in width or height). That is, it contains only one edge in it's main direction. So when that sub-graph contains a fully blocked edge, Dijkstra cannot find a path... Now enlarge the one edge graph to at least three by inflating the search area. Curiously a code for similar purpose seems to be present, but commented.
This commit is contained in:
parent
ff69a2ef74
commit
ed2cd18c48
|
@ -1023,6 +1023,7 @@ int Graph::initRouting ( Net* net )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//cerr << " traitement pour les contacts : OK" << endl;
|
//cerr << " traitement pour les contacts : OK" << endl;
|
||||||
//OoOoooOoooOoO A QUOI SERT CE BOOLEEN OoOoooOoooOoO ==>> pour le //5 le connexID ne doit pas avoir été augmenté ! ou alors connexID-1 !!
|
//OoOoooOoooOoO A QUOI SERT CE BOOLEEN OoOoooOoooOoO ==>> pour le //5 le connexID ne doit pas avoir été augmenté ! ou alors connexID-1 !!
|
||||||
//bool useConnexID = false;
|
//bool useConnexID = false;
|
||||||
|
@ -1063,6 +1064,13 @@ int Graph::initRouting ( Net* net )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_searchingArea.getHeight() <= _matrixVertex->getTileHeight())
|
||||||
|
_searchingArea.inflate( 0, _matrixVertex->getTileHeight() );
|
||||||
|
|
||||||
|
if (_searchingArea.getWidth() <= _matrixVertex->getTileWidth())
|
||||||
|
_searchingArea.inflate( _matrixVertex->getTileWidth(), 0 );
|
||||||
|
|
||||||
// for ripup & reroute purpose
|
// for ripup & reroute purpose
|
||||||
if ( __ripupMode__ )
|
if ( __ripupMode__ )
|
||||||
_searchingArea = _cell->getAbutmentBox(); // recherche sur toute la surface : trop long pour gros circuits
|
_searchingArea = _cell->getAbutmentBox(); // recherche sur toute la surface : trop long pour gros circuits
|
||||||
|
@ -1135,6 +1143,9 @@ void Graph::Dijkstra()
|
||||||
ltrace(600) << "Dijkstra for net: " << _working_net << endl;
|
ltrace(600) << "Dijkstra for net: " << _working_net << endl;
|
||||||
ltracein(600);
|
ltracein(600);
|
||||||
ltrace(600) << "Stamp:" << _netStamp << endl;
|
ltrace(600) << "Stamp:" << _netStamp << endl;
|
||||||
|
ltrace(600) << "Search area : " << _searchingArea
|
||||||
|
<< " h:" << DbU::getValueString(_searchingArea.getHeight()) << endl;
|
||||||
|
ltrace(600) << "Matrix tile height : " << DbU::getValueString(_matrixVertex->getTileHeight()) << endl;
|
||||||
ltrace(600) << "Central vertex : " << centralVertex << endl;
|
ltrace(600) << "Central vertex : " << centralVertex << endl;
|
||||||
ltrace(600) << "_vertexes_to_route.size(): " << _vertexes_to_route.size() << endl;
|
ltrace(600) << "_vertexes_to_route.size(): " << _vertexes_to_route.size() << endl;
|
||||||
ltracein(600);
|
ltracein(600);
|
||||||
|
|
|
@ -70,6 +70,8 @@ namespace Knik {
|
||||||
// Accessors
|
// Accessors
|
||||||
// *********
|
// *********
|
||||||
public:
|
public:
|
||||||
|
DbU::Unit getTileWidth () const { return _tileWidth; }
|
||||||
|
DbU::Unit getTileHeight () const { return _tileHeight; }
|
||||||
size_t getXSize () const { return _matrix[0].size(); };
|
size_t getXSize () const { return _matrix[0].size(); };
|
||||||
size_t getYSize () const { return _matrix.size(); };
|
size_t getYSize () const { return _matrix.size(); };
|
||||||
unsigned int getLineIndex ( DbU::Unit y );
|
unsigned int getLineIndex ( DbU::Unit y );
|
||||||
|
|
Loading…
Reference in New Issue