Separate the antenna max. WL into two distinct settings.

Split "antennaMaxWL" into :
* "etesian.antennaGateMaxWL"  : max length *without* any diode.
* "etesian.antennaDiodeMaxWL" : max length that *one* diode can support.
This commit is contained in:
Jean-Paul Chaput 2021-05-22 15:04:13 +02:00
parent 4b2c120478
commit dbdef9901f
4 changed files with 56 additions and 39 deletions

View File

@ -68,7 +68,8 @@ namespace Etesian {
, _spareBufferName ( Cfg::getParamString ("spares.buffer" ,"buf_x8" )->asString() ) , _spareBufferName ( Cfg::getParamString ("spares.buffer" ,"buf_x8" )->asString() )
, _bloat ( Cfg::getParamString ("etesian.bloat" ,"disabled" )->asString() ) , _bloat ( Cfg::getParamString ("etesian.bloat" ,"disabled" )->asString() )
, _latchUpDistance ( Cfg::getParamInt ("etesian.latchUpDistance",0 )->asInt() ) , _latchUpDistance ( Cfg::getParamInt ("etesian.latchUpDistance",0 )->asInt() )
, _antennaMaxWL ( Cfg::getParamInt ("etesian.antennaMaxWL" ,0 )->asInt() ) , _antennaGateMaxWL ( Cfg::getParamInt ("etesian.antennaGateMaxWL" ,0 )->asInt() )
, _antennaDiodeMaxWL( Cfg::getParamInt ("etesian.antennaDiodeMaxWL" ,0 )->asInt() )
{ {
string gaugeName = Cfg::getParamString("anabatic.routingGauge","sxlib")->asString(); string gaugeName = Cfg::getParamString("anabatic.routingGauge","sxlib")->asString();
if (cg == NULL) { if (cg == NULL) {
@ -86,6 +87,14 @@ namespace Etesian {
_rg = rg->getClone(); _rg = rg->getClone();
_cg = cg->getClone(); _cg = cg->getClone();
if (_antennaGateMaxWL and not _antennaDiodeMaxWL) {
_antennaDiodeMaxWL = _antennaGateMaxWL;
cerr << Warning( "Etesian::Configuration(): \"etesian.antennaGateMaxWL\" is defined but not \"etesian.antennaDiodeMaxWL\".\n"
" Setting both to %s"
, DbU::getValueString(_antennaGateMaxWL).c_str()
) << endl;
}
} }
@ -103,7 +112,8 @@ namespace Etesian {
, _spareBufferName ( other._spareBufferName ) , _spareBufferName ( other._spareBufferName )
, _bloat ( other._bloat ) , _bloat ( other._bloat )
, _latchUpDistance ( other._latchUpDistance ) , _latchUpDistance ( other._latchUpDistance )
, _antennaMaxWL ( other._antennaMaxWL ) , _antennaGateMaxWL ( other._antennaGateMaxWL )
, _antennaDiodeMaxWL( other._antennaDiodeMaxWL )
{ {
if (other._rg) _rg = other._rg->getClone(); if (other._rg) _rg = other._rg->getClone();
if (other._cg) _cg = other._cg->getClone(); if (other._cg) _cg = other._cg->getClone();
@ -132,7 +142,8 @@ namespace Etesian {
cmess1 << Dots::asPercentage(" - Aspect Ratio" ,_aspectRatio ) << endl; cmess1 << Dots::asPercentage(" - Aspect Ratio" ,_aspectRatio ) << endl;
cmess1 << Dots::asString (" - Bloat model" ,_bloat ) << endl; cmess1 << Dots::asString (" - Bloat model" ,_bloat ) << endl;
cmess1 << Dots::asPercentage(" - Antenna Insert" ,_antennaInsertThreshold ) << endl; cmess1 << Dots::asPercentage(" - Antenna Insert" ,_antennaInsertThreshold ) << endl;
cmess1 << Dots::asString (" - Antenna Max. WL" ,DbU::getValueString(_antennaMaxWL )) << endl; cmess1 << Dots::asString (" - Antenna gate Max. WL" ,DbU::getValueString(_antennaGateMaxWL )) << endl;
cmess1 << Dots::asString (" - Antenna diode Max. WL",DbU::getValueString(_antennaDiodeMaxWL)) << endl;
cmess1 << Dots::asString (" - Latch up Distance",DbU::getValueString(_latchUpDistance)) << endl; cmess1 << Dots::asString (" - Latch up Distance",DbU::getValueString(_latchUpDistance)) << endl;
} }
@ -167,7 +178,8 @@ namespace Etesian {
record->add ( getSlot( "_spareBufferName" , _spareBufferName ) ); record->add ( getSlot( "_spareBufferName" , _spareBufferName ) );
record->add ( getSlot( "_bloat" , _bloat ) ); record->add ( getSlot( "_bloat" , _bloat ) );
record->add ( DbU::getValueSlot( "_latchUpDistance" , &_latchUpDistance ) ); record->add ( DbU::getValueSlot( "_latchUpDistance" , &_latchUpDistance ) );
record->add ( DbU::getValueSlot( "_antennaMaxWL" , &_antennaMaxWL ) ); record->add ( DbU::getValueSlot( "_antennaGateMaxWL" , &_antennaGateMaxWL ) );
record->add ( DbU::getValueSlot( "_antennaDiodeMaxWL", &_antennaDiodeMaxWL ) );
return record; return record;
} }

View File

@ -1285,7 +1285,7 @@ namespace Etesian {
void EtesianEngine::antennaProtect () void EtesianEngine::antennaProtect ()
{ {
DbU::Unit maxWL = getAntennaMaxWL(); DbU::Unit maxWL = getAntennaGateMaxWL();
if (not maxWL) return; if (not maxWL) return;
cmess1 << " o Inserting antenna effect protection." << endl; cmess1 << " o Inserting antenna effect protection." << endl;

View File

@ -73,7 +73,8 @@ namespace Etesian {
inline string getSpareBufferName () const; inline string getSpareBufferName () const;
inline string getBloat () const; inline string getBloat () const;
inline DbU::Unit getLatchUpDistance () const; inline DbU::Unit getLatchUpDistance () const;
inline DbU::Unit getAntennaMaxWL () const; inline DbU::Unit getAntennaGateMaxWL () const;
inline DbU::Unit getAntennaDiodeMaxWL () const;
inline void setSpaceMargin ( double ); inline void setSpaceMargin ( double );
inline void setAspectRatio ( double ); inline void setAspectRatio ( double );
void print ( Cell* ) const; void print ( Cell* ) const;
@ -96,7 +97,8 @@ namespace Etesian {
string _spareBufferName; string _spareBufferName;
string _bloat; string _bloat;
DbU::Unit _latchUpDistance; DbU::Unit _latchUpDistance;
DbU::Unit _antennaMaxWL; DbU::Unit _antennaGateMaxWL;
DbU::Unit _antennaDiodeMaxWL;
private: private:
Configuration ( const Configuration& ); Configuration ( const Configuration& );
Configuration& operator= ( const Configuration& ); Configuration& operator= ( const Configuration& );
@ -117,7 +119,8 @@ namespace Etesian {
inline string Configuration::getSpareBufferName () const { return _spareBufferName; } inline string Configuration::getSpareBufferName () const { return _spareBufferName; }
inline string Configuration::getBloat () const { return _bloat; } inline string Configuration::getBloat () const { return _bloat; }
inline DbU::Unit Configuration::getLatchUpDistance () const { return _latchUpDistance; } inline DbU::Unit Configuration::getLatchUpDistance () const { return _latchUpDistance; }
inline DbU::Unit Configuration::getAntennaMaxWL () const { return _antennaMaxWL; } inline DbU::Unit Configuration::getAntennaGateMaxWL () const { return _antennaGateMaxWL; }
inline DbU::Unit Configuration::getAntennaDiodeMaxWL () const { return _antennaDiodeMaxWL; }
inline void Configuration::setSpaceMargin ( double margin ) { _spaceMargin = margin; } inline void Configuration::setSpaceMargin ( double margin ) { _spaceMargin = margin; }
inline void Configuration::setAspectRatio ( double ratio ) { _aspectRatio = ratio; } inline void Configuration::setAspectRatio ( double ratio ) { _aspectRatio = ratio; }

View File

@ -93,7 +93,8 @@ namespace Etesian {
inline double getSpaceMargin () const; inline double getSpaceMargin () const;
inline double getAspectRatio () const; inline double getAspectRatio () const;
inline double getAntennaInsertThreshold () const; inline double getAntennaInsertThreshold () const;
inline DbU::Unit getAntennaMaxWL () const; inline DbU::Unit getAntennaGateMaxWL () const;
inline DbU::Unit getAntennaDiodeMaxWL () const;
inline DbU::Unit getLatchUpDistance () const; inline DbU::Unit getLatchUpDistance () const;
inline const FeedCells& getFeedCells () const; inline const FeedCells& getFeedCells () const;
inline const BufferCells& getBufferCells () const; inline const BufferCells& getBufferCells () const;
@ -209,7 +210,8 @@ namespace Etesian {
inline double EtesianEngine::getSpaceMargin () const { return getConfiguration()->getSpaceMargin(); } inline double EtesianEngine::getSpaceMargin () const { return getConfiguration()->getSpaceMargin(); }
inline double EtesianEngine::getAspectRatio () const { return getConfiguration()->getAspectRatio(); } inline double EtesianEngine::getAspectRatio () const { return getConfiguration()->getAspectRatio(); }
inline double EtesianEngine::getAntennaInsertThreshold () const { return getConfiguration()->getAntennaInsertThreshold(); } inline double EtesianEngine::getAntennaInsertThreshold () const { return getConfiguration()->getAntennaInsertThreshold(); }
inline DbU::Unit EtesianEngine::getAntennaMaxWL () const { return getConfiguration()->getAntennaMaxWL(); } inline DbU::Unit EtesianEngine::getAntennaGateMaxWL () const { return getConfiguration()->getAntennaGateMaxWL(); }
inline DbU::Unit EtesianEngine::getAntennaDiodeMaxWL () const { return getConfiguration()->getAntennaDiodeMaxWL(); }
inline DbU::Unit EtesianEngine::getLatchUpDistance () const { return getConfiguration()->getLatchUpDistance(); } inline DbU::Unit EtesianEngine::getLatchUpDistance () const { return getConfiguration()->getLatchUpDistance(); }
inline void EtesianEngine::useFeed ( Cell* cell ) { _feedCells.useFeed(cell); } inline void EtesianEngine::useFeed ( Cell* cell ) { _feedCells.useFeed(cell); }
inline const FeedCells& EtesianEngine::getFeedCells () const { return _feedCells; } inline const FeedCells& EtesianEngine::getFeedCells () const { return _feedCells; }