Do not display H/V edge capacity on one column/row design.

This commit is contained in:
Jean-Paul Chaput 2014-08-01 17:22:06 +02:00
parent e01f943367
commit 51a1615d92
1 changed files with 23 additions and 16 deletions

View File

@ -170,8 +170,15 @@ void Graph::_postCreate()
#endif #endif
} }
if (_lowerLeftVertex->getHEdgeOut())
cout << Dots::asUInt (" - Global router H edges capacity" ,_lowerLeftVertex->getHEdgeOut()->getCapacity()) << endl; cout << Dots::asUInt (" - Global router H edges capacity" ,_lowerLeftVertex->getHEdgeOut()->getCapacity()) << endl;
else
cerr << Warning( "Knik::Graph: Design has only one column, H edge capacity is zero." ) << endl;
if (_lowerLeftVertex->getVEdgeOut())
cout << Dots::asUInt (" - Global router V edges capacity" ,_lowerLeftVertex->getVEdgeOut()->getCapacity()) << endl; cout << Dots::asUInt (" - Global router V edges capacity" ,_lowerLeftVertex->getVEdgeOut()->getCapacity()) << endl;
else
cerr << Warning( "Knik::Graph: Design has only one row, V edge capacity is zero." ) << endl;
// #ifdef __USE_MATRIXVERTEX__ // #ifdef __USE_MATRIXVERTEX__
// _matrixVertex = MatrixVertex::create(this); // _matrixVertex = MatrixVertex::create(this);
@ -1009,7 +1016,7 @@ int Graph::initRouting ( Net* net )
//cerr << " Adding vertex to _vertexes_to_route: continue" << endl; //cerr << " Adding vertex to _vertexes_to_route: continue" << endl;
_vertexes_to_route.insert ( contactVertex ); _vertexes_to_route.insert ( contactVertex );
_searchingArea.merge ( contactVertex->getBox() ); _searchingArea.merge ( contactVertex->getBox() );
contactVertex->setDistance((float)(HUGE_VAL)); contactVertex->setDistance((float)(HUGE));
contactVertex->setPredecessor(NULL); contactVertex->setPredecessor(NULL);
currentConnexID++; currentConnexID++;
} }
@ -1049,7 +1056,7 @@ int Graph::initRouting ( Net* net )
_searchingArea.merge ( rpVertex->getBox() ); _searchingArea.merge ( rpVertex->getBox() );
rpVertex->setConnexID ( currentConnexID ); rpVertex->setConnexID ( currentConnexID );
rpVertex->setNetStamp ( _netStamp ); rpVertex->setNetStamp ( _netStamp );
rpVertex->setDistance((float)(HUGE_VAL)); rpVertex->setDistance((float)(HUGE));
rpVertex->setPredecessor(NULL); rpVertex->setPredecessor(NULL);
currentConnexID++; currentConnexID++;
} }
@ -1135,7 +1142,7 @@ void Graph::Dijkstra()
while ( _vertexes_to_route.size() > 1 ) { while ( _vertexes_to_route.size() > 1 ) {
// Now, let's expanse the top of the queue // Now, let's expanse the top of the queue
VertexList reachedVertexes; VertexList reachedVertexes;
float reachedDistance = (float)(HUGE_VAL); float reachedDistance = (float)(HUGE);
//checkGraphConsistency(); //checkGraphConsistency();
if (ltracelevel() >= 600) { if (ltracelevel() >= 600) {
@ -1267,7 +1274,7 @@ void Graph::Dijkstra()
message << " Unable to reach target on net " << _working_net->getName() << "."; message << " Unable to reach target on net " << _working_net->getName() << ".";
throw Error( message.str() ); throw Error( message.str() );
} }
assert( reachedDistance < (float)(HUGE_VAL) ); assert( reachedDistance < (float)(HUGE) );
ltrace(600) << "Updating two connex components:" << endl; ltrace(600) << "Updating two connex components:" << endl;
ltrace(600) << "1. " << (*(reachedVertexes.begin())) << endl; ltrace(600) << "1. " << (*(reachedVertexes.begin())) << endl;
@ -1368,8 +1375,8 @@ void Graph::Monotonic()
while ( topEdge ) { while ( topEdge ) {
Vertex* currentVertex = topEdge->getOpposite ( vertPred ); Vertex* currentVertex = topEdge->getOpposite ( vertPred );
if ( currentVertex->getPosition().getY() <= targetY ) { if ( currentVertex->getPosition().getY() <= targetY ) {
float vertDistance = (float)(HUGE_VAL); float vertDistance = (float)(HUGE);
float horzDistance = (float)(HUGE_VAL); float horzDistance = (float)(HUGE);
vertDistance = vertPred->getDistance() + topEdge->getCost ( vertPred->getPredecessor() ); vertDistance = vertPred->getDistance() + topEdge->getCost ( vertPred->getPredecessor() );
Edge* leftEdge = currentVertex->getHEdgeIn(); Edge* leftEdge = currentVertex->getHEdgeIn();
@ -1443,8 +1450,8 @@ void Graph::Monotonic()
while ( bottomEdge ) { while ( bottomEdge ) {
Vertex* currentVertex = bottomEdge->getOpposite ( vertPred ); Vertex* currentVertex = bottomEdge->getOpposite ( vertPred );
if ( currentVertex->getPosition().getY() >= targetY ) { if ( currentVertex->getPosition().getY() >= targetY ) {
float vertDistance = (float)(HUGE_VAL); float vertDistance = (float)(HUGE);
float horzDistance = (float)(HUGE_VAL); float horzDistance = (float)(HUGE);
vertDistance = vertPred->getDistance() + bottomEdge->getCost ( vertPred->getPredecessor() ); vertDistance = vertPred->getDistance() + bottomEdge->getCost ( vertPred->getPredecessor() );
Edge* leftEdge = currentVertex->getHEdgeIn(); Edge* leftEdge = currentVertex->getHEdgeIn();
@ -1812,7 +1819,7 @@ void Graph::rebuildConnexComponent ( Contact* contact, int connexID, Segment* ar
contactVertex->setContact ( contact ); contactVertex->setContact ( contact );
contactVertex->setConnexID ( connexID ); contactVertex->setConnexID ( connexID );
contactVertex->setNetStamp ( _netStamp ); contactVertex->setNetStamp ( _netStamp );
contactVertex->setDistance((float)(HUGE_VAL)); contactVertex->setDistance((float)(HUGE));
contactVertex->setPredecessor(NULL); contactVertex->setPredecessor(NULL);
//cerr << "from :" << contact << endl; //cerr << "from :" << contact << endl;
//cerr << "arrivalSegment: " << arrivalSegment << endl; //cerr << "arrivalSegment: " << arrivalSegment << endl;
@ -1851,7 +1858,7 @@ void Graph::setNetStampConnexID ( Segment* segment, int connexID )
assert(vertex); assert(vertex);
vertex->setNetStamp ( _netStamp ); vertex->setNetStamp ( _netStamp );
vertex->setConnexID ( connexID ); vertex->setConnexID ( connexID );
vertex->setDistance((float)(HUGE_VAL)); vertex->setDistance((float)(HUGE));
Edge* edge = vertex->getVEdgeOut(); Edge* edge = vertex->getVEdgeOut();
assert(edge); assert(edge);
edge->setNetStamp ( _netStamp ); edge->setNetStamp ( _netStamp );
@ -1861,7 +1868,7 @@ void Graph::setNetStampConnexID ( Segment* segment, int connexID )
assert(vertex); assert(vertex);
vertex->setNetStamp ( _netStamp ); vertex->setNetStamp ( _netStamp );
vertex->setConnexID ( connexID ); vertex->setConnexID ( connexID );
vertex->setDistance((float)(HUGE_VAL)); vertex->setDistance((float)(HUGE));
return; return;
} }
if ( sourceLineIdx == targetLineIdx ) { // horizontal segment if ( sourceLineIdx == targetLineIdx ) { // horizontal segment
@ -1870,7 +1877,7 @@ void Graph::setNetStampConnexID ( Segment* segment, int connexID )
assert(vertex); assert(vertex);
vertex->setNetStamp ( _netStamp ); vertex->setNetStamp ( _netStamp );
vertex->setConnexID ( connexID ); vertex->setConnexID ( connexID );
vertex->setDistance((float)(HUGE_VAL)); vertex->setDistance((float)(HUGE));
Edge* edge = vertex->getHEdgeOut(); Edge* edge = vertex->getHEdgeOut();
assert(edge); assert(edge);
edge->setNetStamp ( _netStamp ); edge->setNetStamp ( _netStamp );
@ -1880,7 +1887,7 @@ void Graph::setNetStampConnexID ( Segment* segment, int connexID )
assert(vertex); assert(vertex);
vertex->setNetStamp ( _netStamp ); vertex->setNetStamp ( _netStamp );
vertex->setConnexID ( connexID ); vertex->setConnexID ( connexID );
vertex->setDistance((float)(HUGE_VAL)); vertex->setDistance((float)(HUGE));
return; return;
} }
throw Error ( "Graph::setNetStampConnexId(): what sort of segment is that, a diagonal one?" ); throw Error ( "Graph::setNetStampConnexId(): what sort of segment is that, a diagonal one?" );
@ -2325,7 +2332,7 @@ void Graph::CleanRoutingState()
// assert (vertex); // assert (vertex);
// vertex->setLocalRingHook(NULL); // vertex->setLocalRingHook(NULL);
// vertex->setConnexID(-1); // vertex->setConnexID(-1);
// vertex->setDistance((float)(HUGE_VAL)); // vertex->setDistance((float)(HUGE));
// vertex->setPredecessor(NULL); // vertex->setPredecessor(NULL);
// assert ( vertex->getVTuple() == NULL ); // assert ( vertex->getVTuple() == NULL );
//} //}