In Knik::Vertex, the _flags member was uninitialized.
* Bug: In Knik, in Vertex the _flags attribute was unitialized. This flag is, in particular, telling if the vertex is blocked. That it was taking a random value, was leading to errors and unreproductible behaviors. I hope this will make the global router deterministic at last. This problem did show in the Stratus FIFO generator. * Bug: In Knik, in Vertex, remove the unused _boundingBox attribute.
This commit is contained in:
parent
0699fb0a40
commit
5fba1d2548
|
@ -981,6 +981,10 @@ int Graph::initRouting ( Net* net )
|
||||||
//editor->Refresh();
|
//editor->Refresh();
|
||||||
//editor->Stop ("Going to init");
|
//editor->Stop ("Going to init");
|
||||||
|
|
||||||
|
//if (_working_net->getName() == "read0") DebugSession::open( 600 );
|
||||||
|
ltrace(600) << "Graph::initRouting() " << _working_net << endl;
|
||||||
|
ltracein(600);
|
||||||
|
|
||||||
int currentConnexID = 0;
|
int currentConnexID = 0;
|
||||||
vector<Contact*> vContacts;
|
vector<Contact*> vContacts;
|
||||||
vector<RoutingPad*> vRoutingPads;
|
vector<RoutingPad*> vRoutingPads;
|
||||||
|
@ -1029,9 +1033,9 @@ int Graph::initRouting ( Net* net )
|
||||||
//bool useConnexID = false;
|
//bool useConnexID = false;
|
||||||
for ( unsigned index = 0 ; index < vRoutingPads.size() ; index ++ ) {
|
for ( unsigned index = 0 ; index < vRoutingPads.size() ; index ++ ) {
|
||||||
RoutingPad* routingPad = vRoutingPads[index];
|
RoutingPad* routingPad = vRoutingPads[index];
|
||||||
//cerr << " [0;34mRoutingPad :[0m" << routingPad << endl;
|
ltrace(600) << routingPad << endl;
|
||||||
Vertex* rpVertex = getVertex ( routingPad->getCenter() );
|
Vertex* rpVertex = getVertex ( routingPad->getCenter() );
|
||||||
//cerr << " [0;34mVertex :[0m" << rpVertex << endl;
|
ltrace(600) << rpVertex << endl;
|
||||||
Contact* rpContact = rpVertex->getContact();
|
Contact* rpContact = rpVertex->getContact();
|
||||||
if ( rpContact && (rpContact->getNet() == routingPad->getNet()) ) {
|
if ( rpContact && (rpContact->getNet() == routingPad->getNet()) ) {
|
||||||
// s'il existe deja un contact pour ce vertex pour ce net, on s'y attache
|
// s'il existe deja un contact pour ce vertex pour ce net, on s'y attache
|
||||||
|
@ -1113,6 +1117,10 @@ int Graph::initRouting ( Net* net )
|
||||||
|
|
||||||
//cerr << "net " << net << " has " << _vertexes_to_route.size() << " vertexes to route." << endl;
|
//cerr << "net " << net << " has " << _vertexes_to_route.size() << " vertexes to route." << endl;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
ltraceout(600);
|
||||||
|
//DebugSession::close();
|
||||||
|
|
||||||
return _vertexes_to_route.size();
|
return _vertexes_to_route.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1140,7 +1148,8 @@ void Graph::Dijkstra()
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
//DebugSession::open( _working_net, 600 );
|
//DebugSession::open( _working_net, 600 );
|
||||||
//DebugSession::open( 600 );
|
//if (_working_net->getName() == "read0") DebugSession::open( 600 );
|
||||||
|
|
||||||
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;
|
||||||
|
|
|
@ -382,7 +382,11 @@ Vertex* MatrixVertex::getVertex ( Point point )
|
||||||
{
|
{
|
||||||
pair<unsigned int,unsigned int> indexes = getIJ ( point );
|
pair<unsigned int,unsigned int> indexes = getIJ ( point );
|
||||||
Vertex* vertex = getVertex ( indexes );
|
Vertex* vertex = getVertex ( indexes );
|
||||||
|
|
||||||
|
ltrace(600) << "MatrixVertex::getVertex(): " << vertex << endl;
|
||||||
|
|
||||||
if (vertex and vertex->isBlocked()) {
|
if (vertex and vertex->isBlocked()) {
|
||||||
|
ltrace(600) << "Vertex is blocked, looking for neighbor." << endl;
|
||||||
Vertex* neighbor = NULL;
|
Vertex* neighbor = NULL;
|
||||||
for ( size_t i=0; i<4 ; ++i ) {
|
for ( size_t i=0; i<4 ; ++i ) {
|
||||||
neighbor = vertex->getFirstEdges(i)->getOpposite( vertex );
|
neighbor = vertex->getFirstEdges(i)->getOpposite( vertex );
|
||||||
|
|
|
@ -106,6 +106,7 @@ Vertex::Vertex ( Graph* routingGraph, Point position, DbU::Unit halfWidth, DbU::
|
||||||
, _netStamp (0)
|
, _netStamp (0)
|
||||||
, _halfWidth (halfWidth)
|
, _halfWidth (halfWidth)
|
||||||
, _halfHeight (halfHeight)
|
, _halfHeight (halfHeight)
|
||||||
|
, _flags(0)
|
||||||
{
|
{
|
||||||
_firstEdges[0] = NULL;
|
_firstEdges[0] = NULL;
|
||||||
_firstEdges[1] = NULL;
|
_firstEdges[1] = NULL;
|
||||||
|
|
|
@ -37,7 +37,6 @@ namespace Knik {
|
||||||
unsigned _netStamp;
|
unsigned _netStamp;
|
||||||
DbU::Unit _halfWidth; // this corresponds to the half width of dual bin of the vertex
|
DbU::Unit _halfWidth; // this corresponds to the half width of dual bin of the vertex
|
||||||
DbU::Unit _halfHeight; // this corresponds to the half height of dual bin of the vertex
|
DbU::Unit _halfHeight; // this corresponds to the half height of dual bin of the vertex
|
||||||
Box _boundingBox;
|
|
||||||
unsigned int _flags;
|
unsigned int _flags;
|
||||||
|
|
||||||
// Constructors & Destructors
|
// Constructors & Destructors
|
||||||
|
|
Loading…
Reference in New Issue