* ./kite:
- New: In Configuration & RoutingEvent, adds support for minimal break length by layer (METAL1 through METAL7). - New: Added measures for final detailed wirelength, wirelength expansion ratio, failed wirelength, number of processeds events and number of unique events.
This commit is contained in:
parent
1d525fec35
commit
551adf4213
|
@ -56,7 +56,6 @@ namespace Kite {
|
||||||
, _postEventCb ()
|
, _postEventCb ()
|
||||||
, _edgeCapacityPercent(Cfg::getParamPercentage("kite.edgeCapacity", 80.0)->asDouble())
|
, _edgeCapacityPercent(Cfg::getParamPercentage("kite.edgeCapacity", 80.0)->asDouble())
|
||||||
, _expandStep (Cfg::getParamPercentage("kite.expandStep" ,100.0)->asDouble())
|
, _expandStep (Cfg::getParamPercentage("kite.expandStep" ,100.0)->asDouble())
|
||||||
, _globalMinBreak (DbU::lambda((double)Cfg::getParamInt("kite.globalMinBreak",29*50)->asInt())) // Ugly: direct uses of SxLib gauge.
|
|
||||||
, _ripupLimits ()
|
, _ripupLimits ()
|
||||||
, _ripupCost (Cfg::getParamInt("kite.ripupCost" , 3)->asInt())
|
, _ripupCost (Cfg::getParamInt("kite.ripupCost" , 3)->asInt())
|
||||||
, _eventsLimit (Cfg::getParamInt("kite.eventsLimit" ,4000000)->asInt())
|
, _eventsLimit (Cfg::getParamInt("kite.eventsLimit" ,4000000)->asInt())
|
||||||
|
@ -66,6 +65,24 @@ namespace Kite {
|
||||||
_ripupLimits[LocalRipupLimit] = Cfg::getParamInt("kite.localRipupLimit" , 7)->asInt();
|
_ripupLimits[LocalRipupLimit] = Cfg::getParamInt("kite.localRipupLimit" , 7)->asInt();
|
||||||
_ripupLimits[GlobalRipupLimit] = Cfg::getParamInt("kite.globalRipupLimit" , 5)->asInt();
|
_ripupLimits[GlobalRipupLimit] = Cfg::getParamInt("kite.globalRipupLimit" , 5)->asInt();
|
||||||
_ripupLimits[LongGlobalRipupLimit] = Cfg::getParamInt("kite.longGlobalRipupLimit" , 5)->asInt();
|
_ripupLimits[LongGlobalRipupLimit] = Cfg::getParamInt("kite.longGlobalRipupLimit" , 5)->asInt();
|
||||||
|
|
||||||
|
for ( size_t i=0 ; i<MaxMetalDepth ; ++i ) {
|
||||||
|
ostringstream paramName;
|
||||||
|
paramName << "kite.metal" << (i+1) << "MinBreak";
|
||||||
|
|
||||||
|
int threshold = 29*50;
|
||||||
|
switch ( i ) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
threshold = 2*50;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
threshold = 29*50;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
_globalMinBreaks[i] = DbU::lambda(Cfg::getParamInt(paramName.str(),threshold)->asInt());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -148,6 +165,13 @@ namespace Kite {
|
||||||
DbU::Unit Configuration::getGlobalThreshold () const
|
DbU::Unit Configuration::getGlobalThreshold () const
|
||||||
{ return _base->getGlobalThreshold(); }
|
{ return _base->getGlobalThreshold(); }
|
||||||
|
|
||||||
|
size_t Configuration::getHEdgeCapacity () const
|
||||||
|
{ return _base->getHEdgeCapacity(); }
|
||||||
|
|
||||||
|
|
||||||
|
size_t Configuration::getVEdgeCapacity () const
|
||||||
|
{ return _base->getVEdgeCapacity(); }
|
||||||
|
|
||||||
|
|
||||||
void Configuration::setAllowedDepth ( size_t allowedDepth )
|
void Configuration::setAllowedDepth ( size_t allowedDepth )
|
||||||
{ _base->setAllowedDepth(allowedDepth); }
|
{ _base->setAllowedDepth(allowedDepth); }
|
||||||
|
|
|
@ -474,8 +474,9 @@ namespace Kite {
|
||||||
<< "% [" << totalWireLength << "] "
|
<< "% [" << totalWireLength << "] "
|
||||||
<< (totalWireLength - routedWireLength) << " remains." << endl;
|
<< (totalWireLength - routedWireLength) << " remains." << endl;
|
||||||
|
|
||||||
|
float expandRatio = 1.0;
|
||||||
if ( _minimumWL != 0.0 ) {
|
if ( _minimumWL != 0.0 ) {
|
||||||
float expandRatio = totalWireLength / _minimumWL;
|
expandRatio = totalWireLength / _minimumWL;
|
||||||
cout << " - Wire Length Expand Ratio := "
|
cout << " - Wire Length Expand Ratio := "
|
||||||
<< setprecision(4) << expandRatio
|
<< setprecision(4) << expandRatio
|
||||||
<< "% [min:" << setprecision(9) << _minimumWL << "] "
|
<< "% [min:" << setprecision(9) << _minimumWL << "] "
|
||||||
|
@ -484,7 +485,10 @@ namespace Kite {
|
||||||
|
|
||||||
_toolSuccess = (unrouteds == 0);
|
_toolSuccess = (unrouteds == 0);
|
||||||
|
|
||||||
addMeasure<size_t> ( getCell(), "Segs", routeds+unrouteds );
|
addMeasure<size_t> ( getCell(), "Segs" , routeds+unrouteds );
|
||||||
|
addMeasure<unsigned long long> ( getCell(), "DWL(l)" , totalWireLength , 12 );
|
||||||
|
addMeasure<unsigned long long> ( getCell(), "fWL(l)" , totalWireLength-routedWireLength , 12);
|
||||||
|
addMeasure<double> ( getCell(), "WLER(%)", (expandRatio-1.0)*100.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -507,6 +511,11 @@ namespace Kite {
|
||||||
measuresLabels.push_back ( "algoS" );
|
measuresLabels.push_back ( "algoS" );
|
||||||
measuresLabels.push_back ( "finT" );
|
measuresLabels.push_back ( "finT" );
|
||||||
measuresLabels.push_back ( "Segs" );
|
measuresLabels.push_back ( "Segs" );
|
||||||
|
measuresLabels.push_back ( "DWL(l)" );
|
||||||
|
measuresLabels.push_back ( "fWL(l)" );
|
||||||
|
measuresLabels.push_back ( "WLER(%)" );
|
||||||
|
measuresLabels.push_back ( "Events" );
|
||||||
|
measuresLabels.push_back ( "UEvents" );
|
||||||
|
|
||||||
const MeasuresSet* measures = Measures::get(getCell());
|
const MeasuresSet* measures = Measures::get(getCell());
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "crlcore/Utilities.h"
|
#include "crlcore/Utilities.h"
|
||||||
#include "crlcore/AllianceFramework.h"
|
#include "crlcore/AllianceFramework.h"
|
||||||
|
#include "crlcore/Measures.h"
|
||||||
|
|
||||||
#include "kite/DataNegociate.h"
|
#include "kite/DataNegociate.h"
|
||||||
#include "kite/TrackElement.h"
|
#include "kite/TrackElement.h"
|
||||||
|
@ -151,6 +152,7 @@ namespace Kite {
|
||||||
using Hurricane::ltracein;
|
using Hurricane::ltracein;
|
||||||
using Hurricane::ltraceout;
|
using Hurricane::ltraceout;
|
||||||
using Hurricane::ForEachIterator;
|
using Hurricane::ForEachIterator;
|
||||||
|
using CRL::addMeasure;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
@ -544,6 +546,9 @@ namespace Kite {
|
||||||
,(RoutingEvent::getProcesseds() - RoutingEvent::getCloneds())) << endl;
|
,(RoutingEvent::getProcesseds() - RoutingEvent::getCloneds())) << endl;
|
||||||
cmess1 << Dots::asSizet(" - Biggest Events Chunk" ,biggestEventsCount) << endl;
|
cmess1 << Dots::asSizet(" - Biggest Events Chunk" ,biggestEventsCount) << endl;
|
||||||
cmess1 << Dots::asSizet(" - Biggest Routing Set" ,biggestRSsize) << endl;
|
cmess1 << Dots::asSizet(" - Biggest Routing Set" ,biggestRSsize) << endl;
|
||||||
|
|
||||||
|
addMeasure<size_t>( getCell(), "Events" , RoutingEvent::getProcesseds(), 12 );
|
||||||
|
addMeasure<size_t>( getCell(), "UEvents", RoutingEvent::getProcesseds()-RoutingEvent::getCloneds(), 12 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1161,8 +1161,11 @@ namespace {
|
||||||
for ( ; (begin < end) ; begin++ ) {
|
for ( ; (begin < end) ; begin++ ) {
|
||||||
other = track->getSegment(begin);
|
other = track->getSegment(begin);
|
||||||
|
|
||||||
if ( other->getNet() == segment->getNet() ) continue;
|
if ( other->getNet() == segment->getNet() ) continue;
|
||||||
if ( !other->getCanonicalInterval().intersect(overlap) ) continue;
|
if ( not other->getCanonicalInterval().intersect(overlap) ) {
|
||||||
|
if ( otherNet == NULL ) candidates.back().setBegin ( begin );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
ltrace(200) << " | Conflict: " << begin << " " << other << endl;
|
ltrace(200) << " | Conflict: " << begin << " " << other << endl;
|
||||||
|
|
||||||
if ( otherNet != other->getNet() ) {
|
if ( otherNet != other->getNet() ) {
|
||||||
|
@ -1244,12 +1247,15 @@ namespace {
|
||||||
//if ( track && (track->getAxis() < constraints.getVMin()) ) track = track->getNext();
|
//if ( track && (track->getAxis() < constraints.getVMin()) ) track = track->getNext();
|
||||||
//for ( ; !success && track && (track->getAxis() <= constraints.getVMax()) ; track = track->getNext() )
|
//for ( ; !success && track && (track->getAxis() <= constraints.getVMax()) ; track = track->getNext() )
|
||||||
|
|
||||||
if ( not success and (segment->getLength() >= Session::getConfiguration()->getGlobalMinBreak()) ) {
|
unsigned int depth = Session::getConfiguration()->getRoutingGauge()->getLayerDepth(segment->getLayer());
|
||||||
ltrace(200) << "Long global wire, break in the middle." << endl;
|
if ( not success ) {
|
||||||
Interval span;
|
if ( (segment->getLength() >= Session::getConfiguration()->getGlobalMinBreak(depth)) ) {
|
||||||
segment->getCanonical ( span );
|
ltrace(200) << "Long global wire, break in the middle." << endl;
|
||||||
|
Interval span;
|
||||||
|
segment->getCanonical ( span );
|
||||||
|
|
||||||
success = Manipulator(segment,*this).makeDogLeg ( span.getCenter() );
|
success = Manipulator(segment,*this).makeDogLeg ( span.getCenter() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( not success and segment->isGlobal() and (_costs.size() <= 1) ) {
|
if ( not success and segment->isGlobal() and (_costs.size() <= 1) ) {
|
||||||
|
|
|
@ -59,6 +59,7 @@ namespace Kite {
|
||||||
, LongGlobalRipupLimit=4
|
, LongGlobalRipupLimit=4
|
||||||
, RipupLimitsTableSize=5
|
, RipupLimitsTableSize=5
|
||||||
};
|
};
|
||||||
|
enum Constants { MaxMetalDepth=20 };
|
||||||
public:
|
public:
|
||||||
// Constructor & Destructor.
|
// Constructor & Destructor.
|
||||||
virtual Configuration* clone () const;
|
virtual Configuration* clone () const;
|
||||||
|
@ -78,6 +79,8 @@ namespace Kite {
|
||||||
virtual float getSaturateRatio () const;
|
virtual float getSaturateRatio () const;
|
||||||
virtual size_t getSaturateRp () const;
|
virtual size_t getSaturateRp () const;
|
||||||
virtual DbU::Unit getGlobalThreshold () const;
|
virtual DbU::Unit getGlobalThreshold () const;
|
||||||
|
virtual size_t getHEdgeCapacity () const;
|
||||||
|
virtual size_t getVEdgeCapacity () const;
|
||||||
virtual void setAllowedDepth ( size_t );
|
virtual void setAllowedDepth ( size_t );
|
||||||
virtual void setSaturateRatio ( float );
|
virtual void setSaturateRatio ( float );
|
||||||
virtual void setSaturateRp ( size_t );
|
virtual void setSaturateRp ( size_t );
|
||||||
|
@ -88,13 +91,13 @@ namespace Kite {
|
||||||
inline PostEventCb_t& getPostEventCb ();
|
inline PostEventCb_t& getPostEventCb ();
|
||||||
inline unsigned long getEventsLimit () const;
|
inline unsigned long getEventsLimit () const;
|
||||||
inline float getExpandStep () const;
|
inline float getExpandStep () const;
|
||||||
inline DbU::Unit getGlobalMinBreak () const;
|
inline DbU::Unit getGlobalMinBreak ( unsigned int depth ) const;
|
||||||
inline unsigned int getRipupCost () const;
|
inline unsigned int getRipupCost () const;
|
||||||
unsigned int getRipupLimit ( unsigned int type ) const;
|
unsigned int getRipupLimit ( unsigned int type ) const;
|
||||||
inline float getEdgeCapacityPercent () const;
|
inline float getEdgeCapacityPercent () const;
|
||||||
inline void setEventsLimit ( unsigned long );
|
inline void setEventsLimit ( unsigned long );
|
||||||
inline void setExpandStep ( float );
|
inline void setExpandStep ( float );
|
||||||
inline void setGlobalMinBreak ( DbU::Unit );
|
inline void setGlobalMinBreak ( unsigned int depth, DbU::Unit );
|
||||||
inline void setRipupCost ( unsigned int );
|
inline void setRipupCost ( unsigned int );
|
||||||
void setRipupLimit ( unsigned int limit, unsigned int type );
|
void setRipupLimit ( unsigned int limit, unsigned int type );
|
||||||
inline void setPostEventCb ( PostEventCb_t );
|
inline void setPostEventCb ( PostEventCb_t );
|
||||||
|
@ -108,8 +111,8 @@ namespace Kite {
|
||||||
PostEventCb_t _postEventCb;
|
PostEventCb_t _postEventCb;
|
||||||
float _edgeCapacityPercent;
|
float _edgeCapacityPercent;
|
||||||
float _expandStep;
|
float _expandStep;
|
||||||
DbU::Unit _globalMinBreak;
|
DbU::Unit _globalMinBreaks[MaxMetalDepth];
|
||||||
unsigned int _ripupLimits[RipupLimitsTableSize];
|
unsigned int _ripupLimits [RipupLimitsTableSize];
|
||||||
unsigned int _ripupCost;
|
unsigned int _ripupCost;
|
||||||
unsigned long _eventsLimit;
|
unsigned long _eventsLimit;
|
||||||
private:
|
private:
|
||||||
|
@ -125,12 +128,12 @@ namespace Kite {
|
||||||
inline unsigned int Configuration::getRipupCost () const { return _ripupCost; }
|
inline unsigned int Configuration::getRipupCost () const { return _ripupCost; }
|
||||||
inline float Configuration::getExpandStep () const { return _expandStep; }
|
inline float Configuration::getExpandStep () const { return _expandStep; }
|
||||||
inline float Configuration::getEdgeCapacityPercent () const { return _edgeCapacityPercent; }
|
inline float Configuration::getEdgeCapacityPercent () const { return _edgeCapacityPercent; }
|
||||||
inline DbU::Unit Configuration::getGlobalMinBreak () const { return _globalMinBreak; }
|
inline DbU::Unit Configuration::getGlobalMinBreak ( unsigned int depth ) const { return _globalMinBreaks[ (depth>=MaxMetalDepth) ? MaxMetalDepth-1 : depth ]; }
|
||||||
inline void Configuration::setRipupCost ( unsigned int cost ) { _ripupCost = cost; }
|
inline void Configuration::setRipupCost ( unsigned int cost ) { _ripupCost = cost; }
|
||||||
inline void Configuration::setExpandStep ( float step ) { _expandStep = step; }
|
inline void Configuration::setExpandStep ( float step ) { _expandStep = step; }
|
||||||
inline void Configuration::setPostEventCb ( PostEventCb_t cb ) { _postEventCb = cb; }
|
inline void Configuration::setPostEventCb ( PostEventCb_t cb ) { _postEventCb = cb; }
|
||||||
inline void Configuration::setEventsLimit ( unsigned long limit ) { _eventsLimit = limit; }
|
inline void Configuration::setEventsLimit ( unsigned long limit ) { _eventsLimit = limit; }
|
||||||
inline void Configuration::setGlobalMinBreak ( DbU::Unit threshold ) { _globalMinBreak = threshold; }
|
inline void Configuration::setGlobalMinBreak ( unsigned int depth, DbU::Unit threshold ) { _globalMinBreaks[ (depth>=MaxMetalDepth) ? MaxMetalDepth-1 : depth ] = threshold; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ namespace Kite {
|
||||||
inline unsigned int getRipupCost () const;
|
inline unsigned int getRipupCost () const;
|
||||||
inline float getExpandStep () const;
|
inline float getExpandStep () const;
|
||||||
inline float getEdgeCapacityPercent () const;
|
inline float getEdgeCapacityPercent () const;
|
||||||
inline DbU::Unit getGlobalMinBreak () const;
|
inline DbU::Unit getGlobalMinBreak ( unsigned int depth ) const;
|
||||||
inline GCellGrid* getGCellGrid () const;
|
inline GCellGrid* getGCellGrid () const;
|
||||||
virtual const Name& getName () const;
|
virtual const Name& getName () const;
|
||||||
inline Configuration::PostEventCb_t&
|
inline Configuration::PostEventCb_t&
|
||||||
|
@ -113,7 +113,7 @@ namespace Kite {
|
||||||
inline void setRipupCost ( unsigned int );
|
inline void setRipupCost ( unsigned int );
|
||||||
inline void setExpandStep ( float );
|
inline void setExpandStep ( float );
|
||||||
inline void setEdgeCapacityPercent ( float );
|
inline void setEdgeCapacityPercent ( float );
|
||||||
inline void setGlobalMinBreak ( DbU::Unit );
|
inline void setGlobalMinBreak ( unsigned int depth, DbU::Unit );
|
||||||
void preProcess ();
|
void preProcess ();
|
||||||
void buildBlockages ();
|
void buildBlockages ();
|
||||||
void buildPowerRails ();
|
void buildPowerRails ();
|
||||||
|
@ -176,7 +176,7 @@ namespace Kite {
|
||||||
inline unsigned int KiteEngine::getRipupCost () const { return _configuration->getRipupCost(); }
|
inline unsigned int KiteEngine::getRipupCost () const { return _configuration->getRipupCost(); }
|
||||||
inline float KiteEngine::getExpandStep () const { return _configuration->getExpandStep(); }
|
inline float KiteEngine::getExpandStep () const { return _configuration->getExpandStep(); }
|
||||||
inline float KiteEngine::getEdgeCapacityPercent () const { return _configuration->getEdgeCapacityPercent(); }
|
inline float KiteEngine::getEdgeCapacityPercent () const { return _configuration->getEdgeCapacityPercent(); }
|
||||||
inline DbU::Unit KiteEngine::getGlobalMinBreak () const { return _configuration->getGlobalMinBreak(); }
|
inline DbU::Unit KiteEngine::getGlobalMinBreak ( unsigned int depth ) const { return _configuration->getGlobalMinBreak(depth); }
|
||||||
inline unsigned int KiteEngine::getRipupLimit ( unsigned int type ) const { return _configuration->getRipupLimit(type); }
|
inline unsigned int KiteEngine::getRipupLimit ( unsigned int type ) const { return _configuration->getRipupLimit(type); }
|
||||||
inline GCellGrid* KiteEngine::getGCellGrid () const { return _kiteGrid; }
|
inline GCellGrid* KiteEngine::getGCellGrid () const { return _kiteGrid; }
|
||||||
inline NegociateWindow* KiteEngine::getNegociateWindow () { return _negociateWindow; }
|
inline NegociateWindow* KiteEngine::getNegociateWindow () { return _negociateWindow; }
|
||||||
|
@ -186,7 +186,7 @@ namespace Kite {
|
||||||
inline void KiteEngine::setRipupCost ( unsigned int cost ) { _configuration->setRipupCost(cost); }
|
inline void KiteEngine::setRipupCost ( unsigned int cost ) { _configuration->setRipupCost(cost); }
|
||||||
inline void KiteEngine::setExpandStep ( float step ) { _configuration->setExpandStep(step); }
|
inline void KiteEngine::setExpandStep ( float step ) { _configuration->setExpandStep(step); }
|
||||||
inline void KiteEngine::setEdgeCapacityPercent ( float percent ) { _configuration->setEdgeCapacityPercent(percent); }
|
inline void KiteEngine::setEdgeCapacityPercent ( float percent ) { _configuration->setEdgeCapacityPercent(percent); }
|
||||||
inline void KiteEngine::setGlobalMinBreak ( DbU::Unit threshold ) { _configuration->setGlobalMinBreak(threshold); }
|
inline void KiteEngine::setGlobalMinBreak ( unsigned int depth, DbU::Unit threshold ) { _configuration->setGlobalMinBreak(depth,threshold); }
|
||||||
inline void KiteEngine::setMinimumWL ( double minimum ) { _minimumWL = minimum; }
|
inline void KiteEngine::setMinimumWL ( double minimum ) { _minimumWL = minimum; }
|
||||||
inline void KiteEngine::setPostEventCb ( Configuration::PostEventCb_t cb ) { _configuration->setPostEventCb(cb); }
|
inline void KiteEngine::setPostEventCb ( Configuration::PostEventCb_t cb ) { _configuration->setPostEventCb(cb); }
|
||||||
inline void KiteEngine::printConfiguration () const { _configuration->print(getCell()); }
|
inline void KiteEngine::printConfiguration () const { _configuration->print(getCell()); }
|
||||||
|
|
Loading…
Reference in New Issue