diff --git a/katana/src/Configuration.cpp b/katana/src/Configuration.cpp index fccce7b2..9c26768c 100644 --- a/katana/src/Configuration.cpp +++ b/katana/src/Configuration.cpp @@ -51,6 +51,7 @@ namespace Katana { , _ripupCost (Cfg::getParamInt ("katana.ripupCost" , 3)->asInt()) , _eventsLimit (Cfg::getParamInt ("katana.eventsLimit" ,4000000)->asInt()) , _bloatOverloadAdd (Cfg::getParamInt ("katana.bloatOverloadAdd" , 4)->asInt()) + , _trackFill (Cfg::getParamInt ("katana.trackFill" , 0)->asInt()) , _flags (0) , _profileEventCosts (Cfg::getParamBool("katana.profileEventCosts" ,false )->asBool()) , _runRealignStage (Cfg::getParamBool("katana.runRealignStage" ,true )->asBool()) @@ -99,6 +100,7 @@ namespace Katana { , _ripupCost (other._ripupCost) , _eventsLimit (other._eventsLimit) , _bloatOverloadAdd (other._bloatOverloadAdd) + , _trackFill (other._trackFill) , _flags (other._flags) , _profileEventCosts (other._profileEventCosts) , _runRealignStage (other._runRealignStage) @@ -188,6 +190,7 @@ namespace Katana { 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; + cout << Dots::asUInt (" - Fill every nth track" ,_trackFill) << endl; Super::print( cell ); } diff --git a/katana/src/Track.cpp b/katana/src/Track.cpp index 459bb3b8..494f7131 100644 --- a/katana/src/Track.cpp +++ b/katana/src/Track.cpp @@ -1168,7 +1168,8 @@ namespace Katana { void Track::fillHole ( DbU::Unit umin, DbU::Unit umax ) const { - if (getIndex() % 2) return; + if (not getKatanaEngine()->getTrackFill()) return; + if (getIndex() % getKatanaEngine()->getTrackFill() != 0) return; if (getLayerGauge()->getType() == Constant::PinOnly) return; if (getLayerGauge()->getDepth() > getKatanaEngine()->getConfiguration()->getAllowedDepth()) return; diff --git a/katana/src/katana/Configuration.h b/katana/src/katana/Configuration.h index c238dbbf..22e50028 100644 --- a/katana/src/katana/Configuration.h +++ b/katana/src/katana/Configuration.h @@ -1,14 +1,14 @@ // -*- mode: C++; explicit-buffer-name: "Configuration.h" -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC 2008-2018, All Rights Reserved +// Copyright (c) SU 2008-2021, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | // | K i t e - D e t a i l e d R o u t e r | // | | // | Author : Jean-Paul CHAPUT | -// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | E-mail : Jean-Paul.Chaput@lip6.fr | // | =============================================================== | // | C++ Header : "./katana/Configuration.h" | // +-----------------------------------------------------------------+ @@ -81,6 +81,7 @@ namespace Katana { inline uint32_t getHTracksReservedMin () const; inline uint32_t getVTracksReservedMin () const; inline uint32_t getTermSatThreshold () const; + inline uint32_t getTrackFill () const; inline void setEventsLimit ( uint64_t ); inline void setRipupCost ( uint32_t ); void setRipupLimit ( uint32_t limit, uint32_t type ); @@ -112,6 +113,7 @@ namespace Katana { uint32_t _ripupCost; uint64_t _eventsLimit; uint32_t _bloatOverloadAdd; + uint32_t _trackFill; unsigned int _flags; bool _profileEventCosts; bool _runRealignStage; @@ -135,6 +137,7 @@ namespace Katana { inline uint32_t Configuration::getHTracksReservedMin () const { return _hTracksReservedMin; } inline uint32_t Configuration::getVTracksReservedMin () const { return _vTracksReservedMin; } inline uint32_t Configuration::getTermSatThreshold () const { return _termSatThreshold; } + inline uint32_t Configuration::getTrackFill () const { return _trackFill; } 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; } diff --git a/katana/src/katana/KatanaEngine.h b/katana/src/katana/KatanaEngine.h index a1a9c64f..3036aeab 100644 --- a/katana/src/katana/KatanaEngine.h +++ b/katana/src/katana/KatanaEngine.h @@ -95,6 +95,7 @@ namespace Katana { inline uint32_t getVTracksReservedLocal () const; inline uint32_t getTermSatReservedLocal () const; inline uint32_t getTermSatThreshold () const; + inline uint32_t getTrackFill () const; inline bool profileEventCosts () const; virtual const Name& getName () const; inline Configuration::PostEventCb_t& @@ -211,6 +212,7 @@ namespace Katana { inline uint32_t KatanaEngine::getTermSatReservedLocal () const { return _configuration->getTermSatReservedLocal(); } inline uint32_t KatanaEngine::getTermSatThreshold () const { return _configuration->getTermSatThreshold(); } inline uint32_t KatanaEngine::getRipupLimit ( uint32_t type ) const { return _configuration->getRipupLimit(type); } + inline uint32_t KatanaEngine::getTrackFill () const { return _configuration->getTrackFill(); } inline bool KatanaEngine::profileEventCosts () const { return _configuration->profileEventCosts(); } inline const DataSymmetricMap& KatanaEngine::getSymmetrics () const { return _symmetrics; } inline Block* KatanaEngine::getBlock ( size_t i ) const { return (i < _blocks.size()) ? _blocks[i] : NULL; }