From 288d1c70b9cabb74c6c1b1194713b422a26f3a4f Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sun, 23 Oct 2022 17:44:45 +0200 Subject: [PATCH] New bloat profile for channel routing (named "channel"). --- etesian/src/BloatCells.cpp | 33 ++++++++++++++++++++++++++++++++ etesian/src/etesian/BloatCells.h | 9 +++++++++ 2 files changed, 42 insertions(+) diff --git a/etesian/src/BloatCells.cpp b/etesian/src/BloatCells.cpp index 35a0e122..9bdf343d 100644 --- a/etesian/src/BloatCells.cpp +++ b/etesian/src/BloatCells.cpp @@ -147,6 +147,39 @@ namespace Etesian { } + BloatChannel::BloatChannel () + : BloatCell("channel") + { } + + + BloatChannel::~BloatChannel () + { } + + + DbU::Unit BloatChannel::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->getSliceStep();; + 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*4; + // if (xsize < 6) return vpitch*2; + // if (xsize < 8) return vpitch*1; + + return vpitch*3; + } + + Bloat90Percents::Bloat90Percents () : BloatCell("90%") { } diff --git a/etesian/src/etesian/BloatCells.h b/etesian/src/etesian/BloatCells.h index 80e1fbb4..221a1b09 100644 --- a/etesian/src/etesian/BloatCells.h +++ b/etesian/src/etesian/BloatCells.h @@ -99,6 +99,14 @@ namespace Etesian { }; + class BloatChannel : public BloatCell { + public: + BloatChannel (); + virtual ~BloatChannel (); + virtual DbU::Unit getDx ( const Cell*, const EtesianEngine* ) const; + }; + + class Bloat90Percents : public BloatCell { public: Bloat90Percents (); @@ -133,6 +141,7 @@ namespace Etesian { _bloatCells.insert( new BloatNsxlib () ); _bloatCells.insert( new BloatFlexlib () ); _bloatCells.insert( new Bloat3Metals () ); + _bloatCells.insert( new BloatChannel () ); _bloatCells.insert( new Bloat90Percents() ); select( "disabled" ); }