* ./unicorn:
- New: Integrates support for Metis, more command line options related to the placement step, "--margin" & "--partition-size-stop".
This commit is contained in:
parent
25ce4db617
commit
2332fe6ca6
|
@ -58,6 +58,7 @@ FIND_PACKAGE(VLSISAPD REQUIRED)
|
||||||
FIND_PACKAGE(HURRICANE REQUIRED)
|
FIND_PACKAGE(HURRICANE REQUIRED)
|
||||||
FIND_PACKAGE(CORIOLIS REQUIRED)
|
FIND_PACKAGE(CORIOLIS REQUIRED)
|
||||||
FIND_PACKAGE(NIMBUS REQUIRED)
|
FIND_PACKAGE(NIMBUS REQUIRED)
|
||||||
|
FIND_PACKAGE(METIS REQUIRED)
|
||||||
FIND_PACKAGE(MAUKA REQUIRED)
|
FIND_PACKAGE(MAUKA REQUIRED)
|
||||||
FIND_PACKAGE(KNIK REQUIRED)
|
FIND_PACKAGE(KNIK REQUIRED)
|
||||||
FIND_PACKAGE(KATABATIC REQUIRED)
|
FIND_PACKAGE(KATABATIC REQUIRED)
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
${KNIK_LIBRARIES}
|
${KNIK_LIBRARIES}
|
||||||
${MAUKA_GRAPHICAL_LIBRARIES}
|
${MAUKA_GRAPHICAL_LIBRARIES}
|
||||||
${MAUKA_LIBRARIES}
|
${MAUKA_LIBRARIES}
|
||||||
|
${METIS_LIBRARIES}
|
||||||
|
${HMETIS_LIBRARIES}
|
||||||
${NIMBUS_GRAPHICAL_LIBRARIES}
|
${NIMBUS_GRAPHICAL_LIBRARIES}
|
||||||
${NIMBUS_LIBRARIES}
|
${NIMBUS_LIBRARIES}
|
||||||
${CORIOLIS_LIBRARIES}
|
${CORIOLIS_LIBRARIES}
|
||||||
|
|
|
@ -50,6 +50,12 @@ using namespace Hurricane;
|
||||||
#include "crlcore/ToolBox.h"
|
#include "crlcore/ToolBox.h"
|
||||||
using namespace CRL;
|
using namespace CRL;
|
||||||
|
|
||||||
|
#include "nimbus/NimbusEngine.h"
|
||||||
|
using namespace Nimbus;
|
||||||
|
|
||||||
|
#include "metis/MetisEngine.h"
|
||||||
|
using namespace Metis;
|
||||||
|
|
||||||
#include "mauka/GraphicMaukaEngine.h"
|
#include "mauka/GraphicMaukaEngine.h"
|
||||||
using namespace Mauka;
|
using namespace Mauka;
|
||||||
|
|
||||||
|
@ -94,6 +100,10 @@ int main ( int argc, char *argv[] )
|
||||||
bool coreDump;
|
bool coreDump;
|
||||||
bool logMode;
|
bool logMode;
|
||||||
bool textMode;
|
bool textMode;
|
||||||
|
double margin;
|
||||||
|
bool quadriPlace;
|
||||||
|
bool annealingPlace;
|
||||||
|
unsigned int partitionSizeStop;
|
||||||
bool globalRoute;
|
bool globalRoute;
|
||||||
bool detailedRoute;
|
bool detailedRoute;
|
||||||
bool loadGlobal;
|
bool loadGlobal;
|
||||||
|
@ -119,6 +129,14 @@ int main ( int argc, char *argv[] )
|
||||||
, "Disable ANSI escape sequences displaying.")
|
, "Disable ANSI escape sequences displaying.")
|
||||||
( "text,t" , poptions::bool_switch(&textMode)->default_value(false)
|
( "text,t" , poptions::bool_switch(&textMode)->default_value(false)
|
||||||
, "Run in pure text mode.")
|
, "Run in pure text mode.")
|
||||||
|
( "margin,m" , poptions::value<double>(&margin)->default_value(0.40)
|
||||||
|
, "Percentage of free area to add to the minimal placement area.")
|
||||||
|
( "quadri-place,p" , poptions::bool_switch(&quadriPlace)->default_value(false)
|
||||||
|
, "Place using quadripartitions then placement legalisation.")
|
||||||
|
( "annealing-place,P" , poptions::bool_switch(&annealingPlace)->default_value(false)
|
||||||
|
, "Place using simulated annealing (slow).")
|
||||||
|
( "partition-size-stop", poptions::value<unsigned int>(&partitionSizeStop)->default_value(45)
|
||||||
|
, "Sets the size of a leaf partition (quadripartition stage).")
|
||||||
( "global-route,G" , poptions::bool_switch(&globalRoute)->default_value(false)
|
( "global-route,G" , poptions::bool_switch(&globalRoute)->default_value(false)
|
||||||
, "Run the global router (Knik).")
|
, "Run the global router (Knik).")
|
||||||
( "load-global,g" , poptions::bool_switch(&loadGlobal)->default_value(false)
|
( "load-global,g" , poptions::bool_switch(&loadGlobal)->default_value(false)
|
||||||
|
@ -169,12 +187,21 @@ int main ( int argc, char *argv[] )
|
||||||
exit ( 2 );
|
exit ( 2 );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
quadriPlace = false;
|
||||||
|
annealingPlace = false;
|
||||||
loadGlobal = false;
|
loadGlobal = false;
|
||||||
saveGlobal = false;
|
saveGlobal = false;
|
||||||
globalRoute = false;
|
globalRoute = false;
|
||||||
detailedRoute = false;
|
detailedRoute = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( arguments.count("margin") )
|
||||||
|
Nimbus::Configuration::getDefault()->setMargin ( margin );
|
||||||
|
|
||||||
|
if ( arguments.count("partition-size-stop") )
|
||||||
|
Metis::Configuration::getDefault()->setNumberOfInstancesStopCriterion ( partitionSizeStop );
|
||||||
|
|
||||||
|
if ( arguments.count("edge") )
|
||||||
Kite::Configuration::getDefault()->setEdgeCapacityPercent ( edgeCapacity );
|
Kite::Configuration::getDefault()->setEdgeCapacityPercent ( edgeCapacity );
|
||||||
|
|
||||||
if ( arguments.count("events-limit") )
|
if ( arguments.count("events-limit") )
|
||||||
|
@ -285,11 +312,18 @@ int main ( int argc, char *argv[] )
|
||||||
cmess1 << unicorn->getBanner() << endl;
|
cmess1 << unicorn->getBanner() << endl;
|
||||||
cmess1 << " Tool Credits" << endl;
|
cmess1 << " Tool Credits" << endl;
|
||||||
cmess1 << " Hurricane .................... Remy Escassut & Christian Masson" << endl;
|
cmess1 << " Hurricane .................... Remy Escassut & Christian Masson" << endl;
|
||||||
|
cmess1 << " Nimbus - Infrastructure .......................... Hugo Clement" << endl;
|
||||||
|
cmess1 << " Mauka - Placer ........................... Christophe Alexandre" << endl;
|
||||||
cmess1 << " Knik - Global Router ............................ Damien Dupuis" << endl;
|
cmess1 << " Knik - Global Router ............................ Damien Dupuis" << endl;
|
||||||
cmess1 << " Kite - Detailed Router ....................... Jean-Paul Chaput" << endl;
|
cmess1 << " Kite - Detailed Router ....................... Jean-Paul Chaput" << endl;
|
||||||
cmess1 << " Software Engineering ..................... Christophe Alexandre" << endl;
|
|
||||||
cmess1 << endl;
|
cmess1 << endl;
|
||||||
|
|
||||||
|
cout << " hMETIS software credits" << endl;
|
||||||
|
cout << " Author ........................................ Georges Karypis" << endl;
|
||||||
|
cout << " Prof. Ident. .......................... University of Minnesota" << endl;
|
||||||
|
cout << " URL .......................... http://glaros.dtc.umn.edu/gkhome" << endl;
|
||||||
|
cout << endl;
|
||||||
|
|
||||||
cout << " The Knik router makes use of FLUTE software" << endl;
|
cout << " The Knik router makes use of FLUTE software" << endl;
|
||||||
cout << " Author ........................................ Chris C. N. CHU" << endl;
|
cout << " Author ........................................ Chris C. N. CHU" << endl;
|
||||||
cout << " Prof. Ident. ............................ Iowa State University" << endl;
|
cout << " Prof. Ident. ............................ Iowa State University" << endl;
|
||||||
|
@ -311,6 +345,48 @@ int main ( int argc, char *argv[] )
|
||||||
returnCode = qa->exec ();
|
returnCode = qa->exec ();
|
||||||
ToolEngine::destroyAll ();
|
ToolEngine::destroyAll ();
|
||||||
} else {
|
} else {
|
||||||
|
if ( quadriPlace or annealingPlace ) {
|
||||||
|
loadGlobal = false;
|
||||||
|
globalRoute = true;
|
||||||
|
}
|
||||||
|
if ( quadriPlace and annealingPlace )
|
||||||
|
annealingPlace = false;
|
||||||
|
|
||||||
|
if ( not MetisEngine::isHMetisCapable() and quadriPlace ) {
|
||||||
|
cerr << Warning("hMETIS is not avalaible, revert to simulated annealing.") << endl;
|
||||||
|
|
||||||
|
annealingPlace = true;
|
||||||
|
quadriPlace = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool runMaukaTool = quadriPlace or annealingPlace;
|
||||||
|
|
||||||
|
if ( runMaukaTool ) {
|
||||||
|
NimbusEngine* nimbus = NULL;
|
||||||
|
MetisEngine* metis = NULL;
|
||||||
|
MaukaEngine* mauka = NULL;
|
||||||
|
|
||||||
|
nimbus = NimbusEngine::create ( cell );
|
||||||
|
if ( showConf ) nimbus->getConfiguration()->print( cell );
|
||||||
|
|
||||||
|
if ( annealingPlace ) {
|
||||||
|
Mauka::Configuration::getDefault()->setStandardSimulatedAnnealing ( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( quadriPlace ) {
|
||||||
|
metis = MetisEngine ::create ( cell );
|
||||||
|
if ( showConf ) metis->getConfiguration()->print( cell );
|
||||||
|
|
||||||
|
MetisEngine::doQuadriPart ( cell );
|
||||||
|
MaukaEngine::regroupOverloadedGCells ( cell );
|
||||||
|
}
|
||||||
|
|
||||||
|
mauka = MaukaEngine::create ( cell );
|
||||||
|
if ( showConf ) mauka->getConfiguration()->print( cell );
|
||||||
|
|
||||||
|
mauka->Run ();
|
||||||
|
}
|
||||||
|
|
||||||
if ( detailedRoute and not (loadGlobal or globalRoute) ) globalRoute = true;
|
if ( detailedRoute and not (loadGlobal or globalRoute) ) globalRoute = true;
|
||||||
|
|
||||||
bool runKiteTool = loadGlobal or globalRoute or detailedRoute;
|
bool runKiteTool = loadGlobal or globalRoute or detailedRoute;
|
||||||
|
@ -323,7 +399,6 @@ int main ( int argc, char *argv[] )
|
||||||
|
|
||||||
static KatabaticEngine::NetSet routingNets;
|
static KatabaticEngine::NetSet routingNets;
|
||||||
KiteEngine* kite = KiteEngine::create ( cell );
|
KiteEngine* kite = KiteEngine::create ( cell );
|
||||||
kite->getConfiguration()->setExpandStep ( expandStep );
|
|
||||||
if ( showConf ) kite->printConfiguration ();
|
if ( showConf ) kite->printConfiguration ();
|
||||||
|
|
||||||
kite->runGlobalRouter ( globalFlags );
|
kite->runGlobalRouter ( globalFlags );
|
||||||
|
|
Loading…
Reference in New Issue