Added static bloat profile in Katana.
* Change: In bootstrap/FindBoostrap.cmake, remove the -fsanitize=address as it requires the "san" librarie which may be difficult to install. * Change: In CRL/symbolic/cmos45/kite.py, decrease the METAL3 pitch from 10l to 8l. This is for testing with 4 routing metal only technology like AMS c35b4 symbolic. * Change: In Katana/BloatProfile, add static bloat option, that is, only cell bloated in the first pass will be bloated again in subsequent ones. Add a "katana.bloatOverloadAdd" parameter to more easily control the amount added to the computed overload. * Change: In Oroshi, start integration of multi capacitors as generator. Translate generator parameter into CapacitorStack ones. Add code for routing unit capacitor.
This commit is contained in:
parent
26610ba80c
commit
eea67a9111
|
@ -94,9 +94,11 @@
|
|||
set(ADDTIONAL_FLAGS "")
|
||||
set(CXX_STANDARD "c++11")
|
||||
endif()
|
||||
set(CMAKE_C_FLAGS_DEBUG " -Wall -fsanitize=address ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C Compiler Debug options." FORCE)
|
||||
#set(CMAKE_C_FLAGS_DEBUG " -Wall -fsanitize=address ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C Compiler Debug options." FORCE)
|
||||
set(CMAKE_C_FLAGS_DEBUG " -Wall ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C Compiler Debug options." FORCE)
|
||||
set(CMAKE_C_FLAGS_RELEASE " -Wall -O2 ${ADDTIONAL_FLAGS} -DNDEBUG" CACHE STRING "C Compiler Release options." FORCE)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-std=${CXX_STANDARD} -Wall -fsanitize=address ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C++ Compiler Debug options." FORCE)
|
||||
#set(CMAKE_CXX_FLAGS_DEBUG "-std=${CXX_STANDARD} -Wall -fsanitize=address ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C++ Compiler Debug options." FORCE)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-std=${CXX_STANDARD} -Wall ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C++ Compiler Debug options." FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-std=${CXX_STANDARD} -Wall -O2 ${ADDTIONAL_FLAGS} -DNDEBUG" CACHE STRING "C++ Compiler Release options." FORCE)
|
||||
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL3') # meta
|
|||
, 2 # depth.
|
||||
, 0.0 # density (deprecated).
|
||||
, l(0) # track offset from AB.
|
||||
, l(10) # track pitch.
|
||||
, l(8) # track pitch.
|
||||
, l(3) # wire width.
|
||||
, l(2) # VIA side (that is VIA12).
|
||||
, l(8) # obstacle dW.
|
||||
|
|
|
@ -1053,7 +1053,6 @@ namespace Etesian {
|
|||
{
|
||||
UpdateSession::open();
|
||||
|
||||
Box topAb = getBlockCell()->getAbutmentBox();
|
||||
Transformation topTransformation;
|
||||
if (getBlockInstance()) topTransformation = getBlockInstance()->getTransformation();
|
||||
topTransformation.invert();
|
||||
|
|
|
@ -118,11 +118,13 @@ namespace {
|
|||
|
||||
class Slice {
|
||||
public:
|
||||
inline Slice ( Slices*, GCell* );
|
||||
inline DbU::Unit getY () const;
|
||||
inline void add ( Occurrence );
|
||||
inline void sort ();
|
||||
void tagOverloadeds ( size_t& count, size_t& newCount );
|
||||
inline Slice ( Slices*, GCell* );
|
||||
inline bool useStaticBloatProfile () const;
|
||||
inline uint32_t getBloatOverloadAdd () const;
|
||||
inline DbU::Unit getY () const;
|
||||
inline void add ( Occurrence );
|
||||
inline void sort ();
|
||||
void tagOverloadeds ( size_t& count, size_t& newCount );
|
||||
private:
|
||||
Slices* _owner;
|
||||
GCell* _left;
|
||||
|
@ -240,6 +242,14 @@ namespace {
|
|||
}
|
||||
|
||||
|
||||
inline bool Slice::useStaticBloatProfile () const
|
||||
{ return _owner->getKatana()->useStaticBloatProfile(); }
|
||||
|
||||
|
||||
inline uint32_t Slice::getBloatOverloadAdd () const
|
||||
{ return _owner->getKatana()->getBloatOverloadAdd(); }
|
||||
|
||||
|
||||
void Slice::tagOverloadeds ( size_t& count, size_t& newCount )
|
||||
{
|
||||
GCell* gcell = _left;
|
||||
|
@ -269,12 +279,13 @@ namespace {
|
|||
if (iLeft >= _instances.size()) break;
|
||||
|
||||
if (overload) {
|
||||
overload += 4;
|
||||
overload += getBloatOverloadAdd();
|
||||
|
||||
for ( size_t i=iLeft ; i<iRight ; ++i ) {
|
||||
BloatState* state = BloatExtension::get( _instances[i].getOccurrence() );
|
||||
if (not state) {
|
||||
if (_owner->getKatana()->getPassNumber() > 0) continue;
|
||||
if ( (_owner->getKatana()->getPassNumber() > 0) and useStaticBloatProfile() )
|
||||
continue;
|
||||
|
||||
state = BloatExtension::create( _instances[i].getOccurrence(), overload );
|
||||
++newCount;
|
||||
|
|
|
@ -48,6 +48,7 @@ namespace Katana {
|
|||
, _ripupLimits ()
|
||||
, _ripupCost (Cfg::getParamInt ("katana.ripupCost" , 3)->asInt())
|
||||
, _eventsLimit (Cfg::getParamInt ("katana.eventsLimit" ,4000000)->asInt())
|
||||
, _bloatOverloadAdd (Cfg::getParamInt ("katana.bloatOverloadAdd" , 4)->asInt())
|
||||
, _flags (0)
|
||||
, _profileEventCosts (Cfg::getParamBool("katana.profileEventCosts" ,false )->asBool())
|
||||
{
|
||||
|
@ -57,7 +58,8 @@ namespace Katana {
|
|||
_ripupLimits[LongGlobalRipupLimit] = Cfg::getParamInt("katana.longGlobalRipupLimit" , 5)->asInt();
|
||||
_ripupLimits[ShortNetRipupLimit] = Cfg::getParamInt("katana.shortNetRipupLimit" ,16)->asInt();
|
||||
|
||||
if (Cfg::getParamBool("katana.useGlobalEstimate",false)->asBool()) _flags |= UseGlobalEstimate;
|
||||
if (Cfg::getParamBool("katana.useGlobalEstimate" ,false)->asBool()) _flags |= UseGlobalEstimate;
|
||||
if (Cfg::getParamBool("katana.useStaticBloatProfile",true )->asBool()) _flags |= UseStaticBloatProfile;
|
||||
|
||||
// for ( size_t i=0 ; i<MaxMetalDepth ; ++i ) {
|
||||
// ostringstream paramName;
|
||||
|
@ -91,6 +93,8 @@ namespace Katana {
|
|||
, _ripupLimits ()
|
||||
, _ripupCost (other._ripupCost)
|
||||
, _eventsLimit (other._eventsLimit)
|
||||
, _bloatOverloadAdd (other._bloatOverloadAdd)
|
||||
, _flags (other._flags)
|
||||
, _profileEventCosts (other._profileEventCosts)
|
||||
{
|
||||
_ripupLimits[StrapRipupLimit] = other._ripupLimits[StrapRipupLimit];
|
||||
|
@ -158,6 +162,7 @@ namespace Katana {
|
|||
cout << " o Configuration of ToolEngine<Katana> for Cell <" << cell->getName() << ">" << endl;
|
||||
cout << Dots::asUInt (" - Dijkstra GR search halo" ,getSearchHalo()) << endl;
|
||||
cout << Dots::asBool (" - Use GR density estimate" ,useGlobalEstimate()) << endl;
|
||||
cout << Dots::asBool (" - Use static bloat profile" ,useStaticBloatProfile()) << endl;
|
||||
cout << Dots::asDouble(" - GCell saturate ratio (LA)" ,getSaturateRatio()) << endl;
|
||||
cout << Dots::asUInt (" - Edge max H reserved local" ,_hTracksReservedLocal) << endl;
|
||||
cout << Dots::asUInt (" - Edge max V reserved local" ,_vTracksReservedLocal) << endl;
|
||||
|
@ -168,6 +173,7 @@ namespace Katana {
|
|||
cout << Dots::asUInt (" - Ripup limit, locals" ,_ripupLimits[LocalRipupLimit]) << endl;
|
||||
cout << Dots::asUInt (" - Ripup limit, globals" ,_ripupLimits[GlobalRipupLimit]) << endl;
|
||||
cout << Dots::asUInt (" - Ripup limit, long globals" ,_ripupLimits[LongGlobalRipupLimit]) << endl;
|
||||
cout << Dots::asUInt (" - Bloat overload additional penalty" ,_bloatOverloadAdd) << endl;
|
||||
|
||||
Super::print( cell );
|
||||
}
|
||||
|
|
|
@ -52,9 +52,10 @@ namespace Katana {
|
|||
, ShortNetRipupLimit = 4
|
||||
, RipupLimitsTableSize = 5
|
||||
};
|
||||
enum Constants { MaxMetalDepth = 20 };
|
||||
enum Flag { UseClockTree = (1 << 0)
|
||||
, UseGlobalEstimate = (1 << 1)
|
||||
enum Constants { MaxMetalDepth = 20 };
|
||||
enum Flag { UseClockTree = (1 << 0)
|
||||
, UseGlobalEstimate = (1 << 1)
|
||||
, UseStaticBloatProfile = (1 << 2)
|
||||
};
|
||||
public:
|
||||
// Constructor & Destructor.
|
||||
|
@ -64,6 +65,7 @@ namespace Katana {
|
|||
// Decorateds.
|
||||
inline bool useClockTree () const;
|
||||
inline bool useGlobalEstimate () const;
|
||||
inline bool useStaticBloatProfile () const;
|
||||
inline bool profileEventCosts () const;
|
||||
// Methods.
|
||||
inline Anabatic::Configuration* base ();
|
||||
|
@ -73,6 +75,7 @@ namespace Katana {
|
|||
inline uint32_t getRipupCost () const;
|
||||
uint32_t getRipupLimit ( uint32_t type ) const;
|
||||
inline uint32_t getSearchHalo () const;
|
||||
inline uint32_t getBloatOverloadAdd () const;
|
||||
inline uint32_t getHTracksReservedLocal () const;
|
||||
inline uint32_t getVTracksReservedLocal () const;
|
||||
inline uint32_t getTermSatReservedLocal () const;
|
||||
|
@ -81,6 +84,7 @@ namespace Katana {
|
|||
inline void setRipupCost ( uint32_t );
|
||||
void setRipupLimit ( uint32_t limit, uint32_t type );
|
||||
inline void setPostEventCb ( PostEventCb_t );
|
||||
inline void setBloatOverloadAdd ( uint32_t );
|
||||
void setHTracksReservedLocal ( uint32_t );
|
||||
void setVTracksReservedLocal ( uint32_t );
|
||||
inline void setFlags ( unsigned int );
|
||||
|
@ -101,6 +105,7 @@ namespace Katana {
|
|||
uint32_t _ripupLimits [RipupLimitsTableSize];
|
||||
uint32_t _ripupCost;
|
||||
uint64_t _eventsLimit;
|
||||
uint32_t _bloatOverloadAdd;
|
||||
unsigned int _flags;
|
||||
bool _profileEventCosts;
|
||||
private:
|
||||
|
@ -116,15 +121,18 @@ namespace Katana {
|
|||
inline uint64_t Configuration::getEventsLimit () const { return _eventsLimit; }
|
||||
inline uint32_t Configuration::getSearchHalo () const { return _searchHalo; }
|
||||
inline uint32_t Configuration::getRipupCost () const { return _ripupCost; }
|
||||
inline uint32_t Configuration::getBloatOverloadAdd () const { return _bloatOverloadAdd; }
|
||||
inline uint32_t Configuration::getHTracksReservedLocal () const { return _hTracksReservedLocal; }
|
||||
inline uint32_t Configuration::getVTracksReservedLocal () const { return _vTracksReservedLocal; }
|
||||
inline uint32_t Configuration::getTermSatReservedLocal () const { return _termSatReservedLocal; }
|
||||
inline uint32_t Configuration::getTermSatThreshold () const { return _termSatThreshold; }
|
||||
inline void Configuration::setBloatOverloadAdd ( uint32_t add ) { _bloatOverloadAdd = add; }
|
||||
inline void Configuration::setRipupCost ( uint32_t cost ) { _ripupCost = cost; }
|
||||
inline void Configuration::setPostEventCb ( PostEventCb_t cb ) { _postEventCb = cb; }
|
||||
inline void Configuration::setEventsLimit ( uint64_t limit ) { _eventsLimit = limit; }
|
||||
inline bool Configuration::useClockTree () const { return _flags & UseClockTree; }
|
||||
inline bool Configuration::useGlobalEstimate () const { return _flags & UseGlobalEstimate; }
|
||||
inline bool Configuration::useStaticBloatProfile () const { return _flags & UseStaticBloatProfile; }
|
||||
inline bool Configuration::profileEventCosts () const { return _profileEventCosts; }
|
||||
inline void Configuration::setFlags ( unsigned int flags ) { _flags |= flags; }
|
||||
inline void Configuration::unsetFlags ( unsigned int flags ) { _flags &= ~flags; }
|
||||
|
|
|
@ -78,6 +78,7 @@ namespace Katana {
|
|||
inline bool isDetailedRoutingSuccess () const;
|
||||
inline bool useClockTree () const;
|
||||
inline bool useGlobalEstimate () const;
|
||||
inline bool useStaticBloatProfile () const;
|
||||
inline CellViewer* getViewer () const;
|
||||
inline AnabaticEngine* base ();
|
||||
inline Configuration* getKatanaConfiguration ();
|
||||
|
@ -88,6 +89,7 @@ namespace Katana {
|
|||
uint32_t getRipupLimit ( const TrackElement* ) const;
|
||||
inline uint32_t getRipupCost () const;
|
||||
inline uint32_t getSearchHalo () const;
|
||||
inline uint32_t getBloatOverloadAdd () const;
|
||||
inline uint32_t getHTracksReservedLocal () const;
|
||||
inline uint32_t getVTracksReservedLocal () const;
|
||||
inline uint32_t getTermSatReservedLocal () const;
|
||||
|
@ -117,6 +119,7 @@ namespace Katana {
|
|||
inline void setMinimumWL ( double );
|
||||
inline void setRipupLimit ( uint32_t type, uint32_t );
|
||||
inline void setRipupCost ( uint32_t );
|
||||
inline void setBloatOverloadAdd ( uint32_t );
|
||||
inline void setHTracksReservedLocal ( uint32_t );
|
||||
inline void setVTracksReservedLocal ( uint32_t );
|
||||
inline void addBlock ( Block* );
|
||||
|
@ -189,6 +192,7 @@ namespace Katana {
|
|||
inline bool KatanaEngine::isDetailedRoutingSuccess() const { return (_successState & DetailedRoutingSuccess); }
|
||||
inline bool KatanaEngine::useClockTree () const { return _configuration->useClockTree(); }
|
||||
inline bool KatanaEngine::useGlobalEstimate () const { return _configuration->useGlobalEstimate(); }
|
||||
inline bool KatanaEngine::useStaticBloatProfile () const { return _configuration->useStaticBloatProfile(); }
|
||||
inline CellViewer* KatanaEngine::getViewer () const { return _viewer; }
|
||||
inline AnabaticEngine* KatanaEngine::base () { return static_cast<AnabaticEngine*>(this); }
|
||||
inline Configuration* KatanaEngine::getKatanaConfiguration () { return _configuration; }
|
||||
|
@ -197,6 +201,7 @@ namespace Katana {
|
|||
inline uint64_t KatanaEngine::getEventsLimit () const { return _configuration->getEventsLimit(); }
|
||||
inline uint32_t KatanaEngine::getRipupCost () const { return _configuration->getRipupCost(); }
|
||||
inline uint32_t KatanaEngine::getSearchHalo () const { return _configuration->getSearchHalo(); }
|
||||
inline uint32_t KatanaEngine::getBloatOverloadAdd () const { return _configuration->getBloatOverloadAdd(); }
|
||||
inline uint32_t KatanaEngine::getHTracksReservedLocal () const { return _configuration->getHTracksReservedLocal(); }
|
||||
inline uint32_t KatanaEngine::getVTracksReservedLocal () const { return _configuration->getVTracksReservedLocal(); }
|
||||
inline uint32_t KatanaEngine::getTermSatReservedLocal () const { return _configuration->getTermSatReservedLocal(); }
|
||||
|
@ -211,6 +216,7 @@ namespace Katana {
|
|||
inline void KatanaEngine::setEventLimit ( uint64_t limit ) { _configuration->setEventsLimit(limit); }
|
||||
inline void KatanaEngine::setRipupLimit ( uint32_t type, uint32_t limit ) { _configuration->setRipupLimit(limit,type); }
|
||||
inline void KatanaEngine::setRipupCost ( uint32_t cost ) { _configuration->setRipupCost(cost); }
|
||||
inline void KatanaEngine::setBloatOverloadAdd ( uint32_t add ) { _configuration->setBloatOverloadAdd(add); }
|
||||
inline void KatanaEngine::setHTracksReservedLocal ( uint32_t reserved ) { _configuration->setHTracksReservedLocal(reserved); }
|
||||
inline void KatanaEngine::setVTracksReservedLocal ( uint32_t reserved ) { _configuration->setVTracksReservedLocal(reserved); }
|
||||
inline void KatanaEngine::addBlock ( Block* block ) { _blocks.push_back(block); }
|
||||
|
|
Loading…
Reference in New Issue