merge ConcreteElmore into ConcretePiElmore

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-06-01 19:35:58 -07:00
parent 36fce30a30
commit 3b2c6e1df6
2 changed files with 24 additions and 60 deletions

View File

@ -144,44 +144,6 @@ ConcreteParasitic::nodeIterator()
////////////////////////////////////////////////////////////////
ConcreteElmore::ConcreteElmore() :
loads_(nullptr)
{
}
ConcreteElmore::~ConcreteElmore()
{
delete loads_;
}
void
ConcreteElmore::findElmore(const Pin *load_pin,
float &elmore,
bool &exists) const
{
if (loads_)
loads_->findKey(load_pin, elmore, exists);
else
exists = false;
}
void
ConcreteElmore::deleteLoad(const Pin *load_pin)
{
loads_->erase(load_pin);
}
void
ConcreteElmore::setElmore(const Pin *load_pin,
float elmore)
{
if (loads_ == nullptr)
loads_ = new ConcreteElmoreLoadMap;
(*loads_)[load_pin] = elmore;
}
////////////////////////////////////////////////////////////////
ConcretePi::ConcretePi(float c2,
float rpi,
float c1) :
@ -230,10 +192,15 @@ ConcretePiElmore::ConcretePiElmore(float c2,
float rpi,
float c1) :
ConcretePi(c2, rpi, c1),
ConcreteElmore()
loads_(nullptr)
{
}
ConcretePiElmore::~ConcretePiElmore()
{
delete loads_;
}
float
ConcretePiElmore::capacitance() const
{
@ -273,14 +240,25 @@ ConcretePiElmore::findElmore(const Pin *load_pin,
float &elmore,
bool &exists) const
{
ConcreteElmore::findElmore(load_pin, elmore, exists);
if (loads_)
loads_->findKey(load_pin, elmore, exists);
else
exists = false;
}
void
ConcretePiElmore::setElmore(const Pin *load_pin,
float elmore)
{
ConcreteElmore::setElmore(load_pin, elmore);
if (loads_ == nullptr)
loads_ = new ConcreteElmoreLoadMap;
(*loads_)[load_pin] = elmore;
}
void
ConcretePiElmore::deleteLoad(const Pin *load_pin)
{
loads_->erase(load_pin);
}
////////////////////////////////////////////////////////////////

View File

@ -82,24 +82,6 @@ public:
virtual ParasiticNodeIterator *nodeIterator();
};
class ConcreteElmore
{
public:
void findElmore(const Pin *load_pin,
float &elmore,
bool &exists) const;
void deleteLoad(const Pin *load_pin);
void setElmore(const Pin *load_pin,
float elmore);
protected:
ConcreteElmore();
virtual ~ConcreteElmore();
private:
ConcreteElmoreLoadMap *loads_;
};
// Pi model for a driver pin.
class ConcretePi
{
@ -126,13 +108,13 @@ protected:
// Pi model for a driver pin and the elmore delay to each load.
class ConcretePiElmore : public ConcretePi,
public ConcreteElmore,
public ConcreteParasitic
{
public:
ConcretePiElmore(float c2,
float rpi,
float c1);
virtual ~ConcretePiElmore();
virtual bool isPiElmore() const { return true; }
virtual bool isPiModel() const { return true; }
virtual float capacitance() const;
@ -143,6 +125,10 @@ public:
virtual void findElmore(const Pin *load_pin, float &elmore,
bool &exists) const;
virtual void setElmore(const Pin *load_pin, float elmore);
void deleteLoad(const Pin *load_pin);
private:
ConcreteElmoreLoadMap *loads_;
};
// PiElmore from wireload model estimate.