Basic routing-driven placement
This commit is contained in:
parent
6a6def8252
commit
3f182f1cee
|
@ -16,14 +16,13 @@
|
|||
set_lib_link_mode()
|
||||
setup_boost(program_options python regex)
|
||||
|
||||
find_package(LibXml2 REQUIRED)
|
||||
find_package(PythonLibs REQUIRED)
|
||||
find_package(PythonSitePackages REQUIRED)
|
||||
find_package(VLSISAPD REQUIRED)
|
||||
find_package(LEFDEF REQUIRED)
|
||||
find_package(HURRICANE REQUIRED)
|
||||
find_package(KATABATIC REQUIRED)
|
||||
find_package(CORIOLIS REQUIRED)
|
||||
find_package(KITE REQUIRED)
|
||||
find_package(COLOQUINTE REQUIRED)
|
||||
find_package(Libexecinfo REQUIRED)
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
${HURRICANE_PYTHON_LIBRARIES}
|
||||
${HURRICANE_GRAPHICAL_LIBRARIES}
|
||||
${HURRICANE_LIBRARIES}
|
||||
${KITE_LIBRARIES}
|
||||
${CONFIGURATION_LIBRARY}
|
||||
${BOOKSHELF_LIBRARY}
|
||||
${CIF_LIBRARY}
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include "hurricane/viewer/CellWidget.h"
|
||||
#include "katabatic/GCellGrid.h"
|
||||
#include "katabatic/KatabaticEngine.h"
|
||||
#include "kite/KiteEngine.h"
|
||||
#include "crlcore/Utilities.h"
|
||||
#include "crlcore/Measures.h"
|
||||
#include "crlcore/AllianceFramework.h"
|
||||
|
@ -630,6 +631,7 @@ namespace Etesian {
|
|||
|
||||
void EtesianEngine::feedRoutingBack(){
|
||||
using namespace Katabatic;
|
||||
using namespace Kite;
|
||||
/*
|
||||
* If routing information is present, use it to
|
||||
* * artificially expand the areas given to coloquinte
|
||||
|
@ -638,7 +640,7 @@ namespace Etesian {
|
|||
DbU::Unit pitch = getPitch();
|
||||
const float densityThreshold = 0.9;
|
||||
|
||||
KatabaticEngine* routingEngine = KatabaticEngine::get( getCell() );
|
||||
KiteEngine* routingEngine = KiteEngine::get( getCell() );
|
||||
if(routingEngine == NULL)
|
||||
throw Error("No routing information was found when performing routing-driven placement\n");
|
||||
|
||||
|
@ -794,6 +796,7 @@ namespace Etesian {
|
|||
_progressReport1(" Final Legalize ." );
|
||||
}
|
||||
}
|
||||
_placementLB = _placementUB; // In case we run other passes
|
||||
_updatePlacement( _placementUB );
|
||||
}
|
||||
|
||||
|
@ -869,6 +872,33 @@ namespace Etesian {
|
|||
cmess1 << " o Detailed Placement." << endl;
|
||||
detailedPlace(detailedIterations, detailedEffort, detailedOptions);
|
||||
|
||||
using namespace Kite;
|
||||
KiteEngine* kiteE = KiteEngine::create(_cell);
|
||||
kiteE->runGlobalRouter(0);
|
||||
kiteE->loadGlobalRouting(Katabatic::EngineLoadGrByNet);
|
||||
kiteE->balanceGlobalDensity();
|
||||
kiteE->layerAssign(Katabatic::EngineNoNetLayerAssign);
|
||||
kiteE->runNegociate();
|
||||
feedRoutingBack();
|
||||
kiteE->destroy();
|
||||
|
||||
UpdateSession::open();
|
||||
forEach(Net*, inet, _cell->getNets()){
|
||||
if(NetRoutingExtension::isManualGlobalRoute(*inet))
|
||||
continue;
|
||||
std::vector<Contact*> pointers;
|
||||
forEach(Component*, icom, (*inet)->getComponents()){
|
||||
Contact * contact = dynamic_cast<Contact*>(*icom);
|
||||
if(contact){
|
||||
pointers.push_back(contact);
|
||||
}
|
||||
}
|
||||
for(Contact* contact : pointers)
|
||||
contact->destroy();
|
||||
}
|
||||
UpdateSession::close();
|
||||
detailedPlace(detailedIterations, detailedEffort, detailedOptions);
|
||||
|
||||
cmess2 << " o Adding feed cells." << endl;
|
||||
addFeeds();
|
||||
|
||||
|
|
Loading…
Reference in New Issue