New parameter "katana.trackFill" to control the dummy fill ratio.

This commit is contained in:
Jean-Paul Chaput 2021-06-27 20:16:42 +02:00
parent 106bc89cb5
commit c6f703b1cc
4 changed files with 12 additions and 3 deletions

View File

@ -51,6 +51,7 @@ namespace Katana {
, _ripupCost (Cfg::getParamInt ("katana.ripupCost" , 3)->asInt()) , _ripupCost (Cfg::getParamInt ("katana.ripupCost" , 3)->asInt())
, _eventsLimit (Cfg::getParamInt ("katana.eventsLimit" ,4000000)->asInt()) , _eventsLimit (Cfg::getParamInt ("katana.eventsLimit" ,4000000)->asInt())
, _bloatOverloadAdd (Cfg::getParamInt ("katana.bloatOverloadAdd" , 4)->asInt()) , _bloatOverloadAdd (Cfg::getParamInt ("katana.bloatOverloadAdd" , 4)->asInt())
, _trackFill (Cfg::getParamInt ("katana.trackFill" , 0)->asInt())
, _flags (0) , _flags (0)
, _profileEventCosts (Cfg::getParamBool("katana.profileEventCosts" ,false )->asBool()) , _profileEventCosts (Cfg::getParamBool("katana.profileEventCosts" ,false )->asBool())
, _runRealignStage (Cfg::getParamBool("katana.runRealignStage" ,true )->asBool()) , _runRealignStage (Cfg::getParamBool("katana.runRealignStage" ,true )->asBool())
@ -99,6 +100,7 @@ namespace Katana {
, _ripupCost (other._ripupCost) , _ripupCost (other._ripupCost)
, _eventsLimit (other._eventsLimit) , _eventsLimit (other._eventsLimit)
, _bloatOverloadAdd (other._bloatOverloadAdd) , _bloatOverloadAdd (other._bloatOverloadAdd)
, _trackFill (other._trackFill)
, _flags (other._flags) , _flags (other._flags)
, _profileEventCosts (other._profileEventCosts) , _profileEventCosts (other._profileEventCosts)
, _runRealignStage (other._runRealignStage) , _runRealignStage (other._runRealignStage)
@ -188,6 +190,7 @@ namespace Katana {
cout << Dots::asUInt (" - Ripup limit, globals" ,_ripupLimits[GlobalRipupLimit]) << endl; cout << Dots::asUInt (" - Ripup limit, globals" ,_ripupLimits[GlobalRipupLimit]) << endl;
cout << Dots::asUInt (" - Ripup limit, long globals" ,_ripupLimits[LongGlobalRipupLimit]) << endl; cout << Dots::asUInt (" - Ripup limit, long globals" ,_ripupLimits[LongGlobalRipupLimit]) << endl;
cout << Dots::asUInt (" - Bloat overload additional penalty" ,_bloatOverloadAdd) << endl; cout << Dots::asUInt (" - Bloat overload additional penalty" ,_bloatOverloadAdd) << endl;
cout << Dots::asUInt (" - Fill every nth track" ,_trackFill) << endl;
Super::print( cell ); Super::print( cell );
} }

View File

@ -1168,7 +1168,8 @@ namespace Katana {
void Track::fillHole ( DbU::Unit umin, DbU::Unit umax ) const 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()->getType() == Constant::PinOnly) return;
if (getLayerGauge()->getDepth() > getKatanaEngine()->getConfiguration()->getAllowedDepth()) return; if (getLayerGauge()->getDepth() > getKatanaEngine()->getConfiguration()->getAllowedDepth()) return;

View File

@ -1,14 +1,14 @@
// -*- mode: C++; explicit-buffer-name: "Configuration.h<katana>" -*- // -*- mode: C++; explicit-buffer-name: "Configuration.h<katana>" -*-
// //
// This file is part of the Coriolis Software. // 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 | // | 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 | // | K i t e - D e t a i l e d R o u t e r |
// | | // | |
// | Author : Jean-Paul CHAPUT | // | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Header : "./katana/Configuration.h" | // | C++ Header : "./katana/Configuration.h" |
// +-----------------------------------------------------------------+ // +-----------------------------------------------------------------+
@ -81,6 +81,7 @@ namespace Katana {
inline uint32_t getHTracksReservedMin () const; inline uint32_t getHTracksReservedMin () const;
inline uint32_t getVTracksReservedMin () const; inline uint32_t getVTracksReservedMin () const;
inline uint32_t getTermSatThreshold () const; inline uint32_t getTermSatThreshold () const;
inline uint32_t getTrackFill () const;
inline void setEventsLimit ( uint64_t ); inline void setEventsLimit ( uint64_t );
inline void setRipupCost ( uint32_t ); inline void setRipupCost ( uint32_t );
void setRipupLimit ( uint32_t limit, uint32_t type ); void setRipupLimit ( uint32_t limit, uint32_t type );
@ -112,6 +113,7 @@ namespace Katana {
uint32_t _ripupCost; uint32_t _ripupCost;
uint64_t _eventsLimit; uint64_t _eventsLimit;
uint32_t _bloatOverloadAdd; uint32_t _bloatOverloadAdd;
uint32_t _trackFill;
unsigned int _flags; unsigned int _flags;
bool _profileEventCosts; bool _profileEventCosts;
bool _runRealignStage; bool _runRealignStage;
@ -135,6 +137,7 @@ namespace Katana {
inline uint32_t Configuration::getHTracksReservedMin () const { return _hTracksReservedMin; } inline uint32_t Configuration::getHTracksReservedMin () const { return _hTracksReservedMin; }
inline uint32_t Configuration::getVTracksReservedMin () const { return _vTracksReservedMin; } inline uint32_t Configuration::getVTracksReservedMin () const { return _vTracksReservedMin; }
inline uint32_t Configuration::getTermSatThreshold () const { return _termSatThreshold; } 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::setBloatOverloadAdd ( uint32_t add ) { _bloatOverloadAdd = add; }
inline void Configuration::setRipupCost ( uint32_t cost ) { _ripupCost = cost; } inline void Configuration::setRipupCost ( uint32_t cost ) { _ripupCost = cost; }
inline void Configuration::setPostEventCb ( PostEventCb_t cb ) { _postEventCb = cb; } inline void Configuration::setPostEventCb ( PostEventCb_t cb ) { _postEventCb = cb; }

View File

@ -95,6 +95,7 @@ namespace Katana {
inline uint32_t getVTracksReservedLocal () const; inline uint32_t getVTracksReservedLocal () const;
inline uint32_t getTermSatReservedLocal () const; inline uint32_t getTermSatReservedLocal () const;
inline uint32_t getTermSatThreshold () const; inline uint32_t getTermSatThreshold () const;
inline uint32_t getTrackFill () const;
inline bool profileEventCosts () const; inline bool profileEventCosts () const;
virtual const Name& getName () const; virtual const Name& getName () const;
inline Configuration::PostEventCb_t& inline Configuration::PostEventCb_t&
@ -211,6 +212,7 @@ namespace Katana {
inline uint32_t KatanaEngine::getTermSatReservedLocal () const { return _configuration->getTermSatReservedLocal(); } inline uint32_t KatanaEngine::getTermSatReservedLocal () const { return _configuration->getTermSatReservedLocal(); }
inline uint32_t KatanaEngine::getTermSatThreshold () const { return _configuration->getTermSatThreshold(); } 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::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 bool KatanaEngine::profileEventCosts () const { return _configuration->profileEventCosts(); }
inline const DataSymmetricMap& KatanaEngine::getSymmetrics () const { return _symmetrics; } inline const DataSymmetricMap& KatanaEngine::getSymmetrics () const { return _symmetrics; }
inline Block* KatanaEngine::getBlock ( size_t i ) const { return (i < _blocks.size()) ? _blocks[i] : NULL; } inline Block* KatanaEngine::getBlock ( size_t i ) const { return (i < _blocks.size()) ? _blocks[i] : NULL; }