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:
Jean-Paul Chaput 2020-01-23 14:03:59 +01:00
parent 26610ba80c
commit eea67a9111
7 changed files with 47 additions and 15 deletions

View File

@ -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)

View File

@ -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.

View File

@ -1053,7 +1053,6 @@ namespace Etesian {
{
UpdateSession::open();
Box topAb = getBlockCell()->getAbutmentBox();
Transformation topTransformation;
if (getBlockInstance()) topTransformation = getBlockInstance()->getTransformation();
topTransformation.invert();

View File

@ -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;

View File

@ -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 );
}

View File

@ -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; }

View File

@ -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); }