New Etesian bloat profile "90%".

* New: In Etesian::BloatCells, new profile for hihgly saturated designs named
    "90%", as it add, on average, 90% of free space. This has been made for
    the "ao68000" of Staf Verhaegen and may needs some refinement as it is a
    bit brutal.
This commit is contained in:
Jean-Paul Chaput 2019-10-13 17:52:03 +02:00
parent 5bbeb0b062
commit 43ea63d98d
2 changed files with 45 additions and 3 deletions

View File

@ -121,6 +121,39 @@ namespace Etesian {
}
Bloat90Percents::Bloat90Percents ()
: BloatCell("90%")
{ }
Bloat90Percents::~Bloat90Percents ()
{ }
DbU::Unit Bloat90Percents::getDx ( const Cell* cell, const EtesianEngine* etesian ) const
{
int terminals = 0;
for ( Net* net : cell->getNets() ) {
if (net->isExternal() and not net->isPower()) ++terminals;
}
Box ab ( cell->getAbutmentBox() );
DbU::Unit vpitch = etesian->getVerticalPitch();;
int xsize = (ab.getWidth() + vpitch - 1) / vpitch;
// float termRatio = (float)terminals / (float)(ab.getWidth() / vpitch);
// if (termRatio > 0.5) {
// return vpitch*6;
// }
if (xsize < 4) return vpitch*11;
if (xsize < 6) return vpitch*8;
if (xsize < 8) return vpitch*6;
return vpitch*4;
}
bool BloatCells::select ( std::string profile )
{
BloatKey key ( profile );

View File

@ -90,6 +90,14 @@ namespace Etesian {
virtual ~Bloat3Metals ();
virtual DbU::Unit getDx ( const Cell*, const EtesianEngine* ) const;
};
class Bloat90Percents : public BloatCell {
public:
Bloat90Percents ();
virtual ~Bloat90Percents ();
virtual DbU::Unit getDx ( const Cell*, const EtesianEngine* ) const;
};
class BloatCells {
@ -114,9 +122,10 @@ namespace Etesian {
, _bloatCells()
, _dxSpace (0)
{
_bloatCells.insert( new BloatDisabled() );
_bloatCells.insert( new BloatNsxlib () );
_bloatCells.insert( new Bloat3Metals () );
_bloatCells.insert( new BloatDisabled () );
_bloatCells.insert( new BloatNsxlib () );
_bloatCells.insert( new Bloat3Metals () );
_bloatCells.insert( new Bloat90Percents() );
select( "disabled" );
}