TransRiseFall -> RiseFall

This commit is contained in:
James Cherry
2019-11-11 15:30:19 -07:00
parent bdab2acb09
commit cc1bd6b5ab
129 changed files with 3258 additions and 3251 deletions
+44 -44
View File
@@ -290,7 +290,7 @@ ConcretePiElmoreEstimated::ConcretePiElmoreEstimated(float c2,
float elmore_res,
float elmore_cap,
bool elmore_use_load_cap,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op,
const Corner *corner,
const MinMax *min_max,
@@ -299,7 +299,7 @@ ConcretePiElmoreEstimated::ConcretePiElmoreEstimated(float c2,
elmore_res_(elmore_res),
elmore_cap_(elmore_cap),
elmore_use_load_cap_(elmore_use_load_cap),
tr_(tr),
rf_(rf),
op_cond_(op),
corner_(corner),
min_max_(min_max),
@@ -328,7 +328,7 @@ ConcretePiElmoreEstimated::findElmore(const Pin *load_pin,
{
float load_cap = 0.0;
if (elmore_use_load_cap_)
load_cap = sdc_->pinCapacitance(load_pin, tr_, op_cond_,
load_cap = sdc_->pinCapacitance(load_pin, rf_, op_cond_,
corner_, min_max_);
elmore = elmore_res_ * (elmore_cap_ + load_cap);
exists = true;
@@ -875,20 +875,20 @@ ConcreteParasitics::clear()
int
ConcreteParasitics::parasiticAnalysisPtIndex(const ParasiticAnalysisPt *ap,
const TransRiseFall *tr) const
const RiseFall *rf) const
{
return ap->index() * TransRiseFall::index_count + tr->index();
return ap->index() * RiseFall::index_count + rf->index();
}
void
ConcreteParasitics::deleteParasitics()
{
int ap_count = corners_->parasiticAnalysisPtCount();
int ap_tr_count = ap_count * TransRiseFall::index_count;
int ap_rf_count = ap_count * RiseFall::index_count;
for (auto drvr_parasitics : drvr_parasitic_map_) {
ConcreteParasitic **parasitics = drvr_parasitics.second;
if (parasitics) {
for (int i = 0; i < ap_tr_count; i++)
for (int i = 0; i < ap_rf_count; i++)
delete parasitics[i];
delete [] parasitics;
}
@@ -912,10 +912,10 @@ ConcreteParasitics::deleteParasitics(const Pin *drvr_pin,
{
ConcreteParasitic **parasitics = drvr_parasitic_map_[drvr_pin];
if (parasitics) {
for (auto tr : TransRiseFall::range()) {
int ap_tr_index = parasiticAnalysisPtIndex(ap, tr);
delete parasitics[ap_tr_index];
parasitics[ap_tr_index] = nullptr;
for (auto tr : RiseFall::range()) {
int ap_rf_index = parasiticAnalysisPtIndex(ap, tr);
delete parasitics[ap_rf_index];
parasitics[ap_rf_index] = nullptr;
}
}
}
@@ -1017,8 +1017,8 @@ ConcreteParasitics::deleteDrvrReducedParasitics(const Pin *drvr_pin)
ConcreteParasitic **parasitics = drvr_parasitic_map_[drvr_pin];
if (parasitics) {
int ap_count = corners_->parasiticAnalysisPtCount();
int ap_tr_count = ap_count * TransRiseFall::index_count;
for (int i = 0; i < ap_tr_count; i++)
int ap_rf_count = ap_count * RiseFall::index_count;
for (int i = 0; i < ap_rf_count; i++)
delete parasitics[i];
delete [] parasitics;
}
@@ -1036,18 +1036,18 @@ ConcreteParasitics::isPiElmore(Parasitic *parasitic) const
Parasitic *
ConcreteParasitics::findPiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const
{
if (!drvr_parasitic_map_.empty()) {
int ap_tr_index = parasiticAnalysisPtIndex(ap, tr);
int ap_rf_index = parasiticAnalysisPtIndex(ap, rf);
UniqueLock lock(lock_);
ConcreteParasitic **parasitics = drvr_parasitic_map_.findKey(drvr_pin);
if (parasitics) {
ConcreteParasitic *parasitic = parasitics[ap_tr_index];
if (parasitic == nullptr && tr == TransRiseFall::fall()) {
ap_tr_index = parasiticAnalysisPtIndex(ap, TransRiseFall::rise());
parasitic = parasitics[ap_tr_index];
ConcreteParasitic *parasitic = parasitics[ap_rf_index];
if (parasitic == nullptr && rf == RiseFall::fall()) {
ap_rf_index = parasiticAnalysisPtIndex(ap, RiseFall::rise());
parasitic = parasitics[ap_rf_index];
}
if (parasitic && parasitic->isPiElmore())
return parasitic;
@@ -1058,7 +1058,7 @@ ConcreteParasitics::findPiElmore(const Pin *drvr_pin,
Parasitic *
ConcreteParasitics::makePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2,
float rpi,
@@ -1068,14 +1068,14 @@ ConcreteParasitics::makePiElmore(const Pin *drvr_pin,
ConcreteParasitic **parasitics = drvr_parasitic_map_.findKey(drvr_pin);
if (parasitics == nullptr) {
int ap_count = corners_->parasiticAnalysisPtCount();
int ap_tr_count = ap_count * TransRiseFall::index_count;
parasitics = new ConcreteParasitic*[ap_tr_count];
for (int i = 0; i < ap_tr_count; i++)
int ap_rf_count = ap_count * RiseFall::index_count;
parasitics = new ConcreteParasitic*[ap_rf_count];
for (int i = 0; i < ap_rf_count; i++)
parasitics[i] = nullptr;
drvr_parasitic_map_[drvr_pin] = parasitics;
}
int ap_tr_index = parasiticAnalysisPtIndex(ap, tr);
ConcreteParasitic *parasitic = parasitics[ap_tr_index];
int ap_rf_index = parasiticAnalysisPtIndex(ap, rf);
ConcreteParasitic *parasitic = parasitics[ap_rf_index];
ConcretePiElmore *pi_elmore = nullptr;
if (parasitic) {
if (parasitic->isPiElmore()) {
@@ -1085,12 +1085,12 @@ ConcreteParasitics::makePiElmore(const Pin *drvr_pin,
else {
delete parasitic;
pi_elmore = new ConcretePiElmore(c2, rpi, c1);
parasitics[ap_tr_index] = pi_elmore;
parasitics[ap_rf_index] = pi_elmore;
}
}
else {
pi_elmore = new ConcretePiElmore(c2, rpi, c1);
parasitics[ap_tr_index] = pi_elmore;
parasitics[ap_rf_index] = pi_elmore;
}
return pi_elmore;
}
@@ -1156,18 +1156,18 @@ ConcreteParasitics::isPiPoleResidue(Parasitic* parasitic) const
Parasitic *
ConcreteParasitics::findPiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const
{
if (!drvr_parasitic_map_.empty()) {
int ap_tr_index = parasiticAnalysisPtIndex(ap, tr);
int ap_rf_index = parasiticAnalysisPtIndex(ap, rf);
UniqueLock lock(lock_);
ConcreteParasitic **parasitics = drvr_parasitic_map_.findKey(drvr_pin);
if (parasitics) {
ConcreteParasitic *parasitic = parasitics[ap_tr_index];
if (parasitic == nullptr && tr == TransRiseFall::fall()) {
ap_tr_index = parasiticAnalysisPtIndex(ap, TransRiseFall::rise());
parasitic = parasitics[ap_tr_index];
ConcreteParasitic *parasitic = parasitics[ap_rf_index];
if (parasitic == nullptr && rf == RiseFall::fall()) {
ap_rf_index = parasiticAnalysisPtIndex(ap, RiseFall::rise());
parasitic = parasitics[ap_rf_index];
}
if (parasitic->isPiPoleResidue())
return parasitic;
@@ -1178,7 +1178,7 @@ ConcreteParasitics::findPiPoleResidue(const Pin *drvr_pin,
Parasitic *
ConcreteParasitics::makePiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2,
float rpi,
@@ -1188,14 +1188,14 @@ ConcreteParasitics::makePiPoleResidue(const Pin *drvr_pin,
ConcreteParasitic **parasitics = drvr_parasitic_map_.findKey(drvr_pin);
if (parasitics == nullptr) {
int ap_count = corners_->parasiticAnalysisPtCount();
int ap_tr_count = ap_count * TransRiseFall::index_count;
parasitics = new ConcreteParasitic*[ap_tr_count];
for (int i = 0; i < ap_tr_count; i++)
int ap_rf_count = ap_count * RiseFall::index_count;
parasitics = new ConcreteParasitic*[ap_rf_count];
for (int i = 0; i < ap_rf_count; i++)
parasitics[i] = nullptr;
drvr_parasitic_map_[drvr_pin] = parasitics;
}
int ap_tr_index = parasiticAnalysisPtIndex(ap, tr);
ConcreteParasitic *parasitic = parasitics[ap_tr_index];
int ap_rf_index = parasiticAnalysisPtIndex(ap, rf);
ConcreteParasitic *parasitic = parasitics[ap_rf_index];
ConcretePiPoleResidue *pi_pole_residue = nullptr;
if (parasitic) {
if (parasitic->isPiElmore()) {
@@ -1205,12 +1205,12 @@ ConcreteParasitics::makePiPoleResidue(const Pin *drvr_pin,
else {
delete parasitic;
pi_pole_residue = new ConcretePiPoleResidue(c2, rpi, c1);
parasitics[ap_tr_index] = pi_pole_residue;
parasitics[ap_rf_index] = pi_pole_residue;
}
}
else {
pi_pole_residue = new ConcretePiPoleResidue(c2, rpi, c1);
parasitics[ap_tr_index] = pi_pole_residue;
parasitics[ap_rf_index] = pi_pole_residue;
}
return pi_pole_residue;
}
@@ -1652,7 +1652,7 @@ ConcreteParasitics::reduceToPiPoleResidue2(Parasitic *parasitic,
Parasitic *
ConcreteParasitics::estimatePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const Wireload *wireload,
float fanout,
float net_pin_cap,
@@ -1663,14 +1663,14 @@ ConcreteParasitics::estimatePiElmore(const Pin *drvr_pin,
{
float c2, rpi, c1, elmore_res, elmore_cap;
bool elmore_use_load_cap;
estimatePiElmore(drvr_pin, tr, wireload, fanout, net_pin_cap,
estimatePiElmore(drvr_pin, rf, wireload, fanout, net_pin_cap,
op_cond, corner, min_max, this,
c2, rpi, c1,
elmore_res, elmore_cap, elmore_use_load_cap);
return new ConcretePiElmoreEstimated(c2, rpi, c1, elmore_res, elmore_cap,
elmore_use_load_cap,
tr, op_cond, corner, min_max,
rf, op_cond, corner, min_max,
sdc_);
}
+6 -6
View File
@@ -61,10 +61,10 @@ public:
virtual bool isPiElmore(Parasitic *parasitic) const;
virtual Parasitic *findPiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const;
virtual Parasitic *makePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2, float rpi, float c1);
@@ -80,12 +80,12 @@ public:
virtual bool isPiPoleResidue(Parasitic* parasitic) const;
virtual Parasitic *findPiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const;
virtual Parasitic *findPoleResidue(const Parasitic *parasitic,
const Pin *load_pin) const;
virtual Parasitic *makePiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2, float rpi, float c1);
virtual void setPoleResidue(Parasitic *parasitic, const Pin *load_pin,
@@ -150,7 +150,7 @@ public:
ParasiticNode *node) const;
virtual Parasitic *estimatePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const Wireload *wireload,
float fanout,
float net_pin_cap,
@@ -196,7 +196,7 @@ public:
protected:
int parasiticAnalysisPtIndex(const ParasiticAnalysisPt *ap,
const TransRiseFall *tr) const;
const RiseFall *rf) const;
Parasitic *ensureRspf(const Pin *drvr_pin);
void makeAnalysisPtAfter();
void deleteReducedParasitics(const Pin *pin);
+2 -2
View File
@@ -157,7 +157,7 @@ public:
float elmore_res,
float elmore_cap,
bool elmore_use_load_cap,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *min_max,
@@ -174,7 +174,7 @@ private:
float elmore_res_;
float elmore_cap_;
bool elmore_use_load_cap_;
const TransRiseFall *tr_;
const RiseFall *rf_;
const OperatingConditions *op_cond_;
const Corner *corner_;
const MinMax *min_max_;
+11 -11
View File
@@ -28,7 +28,7 @@ namespace sta {
// loads when driven by a different pin.
void
EstimateParasitics::estimatePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const Wireload *wireload,
float fanout,
float net_pin_cap,
@@ -52,7 +52,7 @@ EstimateParasitics::estimatePiElmore(const Pin *drvr_pin,
switch (tree) {
case WireloadTree::worst_case:
estimatePiElmoreWorst(drvr_pin, wireload_cap, wireload_res,
fanout, net_pin_cap, tr, op_cond, corner,
fanout, net_pin_cap, rf, op_cond, corner,
min_max, sta,
c2, rpi, c1, elmore_res,
elmore_cap, elmore_use_load_cap);
@@ -60,13 +60,13 @@ EstimateParasitics::estimatePiElmore(const Pin *drvr_pin,
case WireloadTree::balanced:
case WireloadTree::unknown:
estimatePiElmoreBalanced(drvr_pin, wireload_cap, wireload_res,
fanout, net_pin_cap, tr, op_cond,
fanout, net_pin_cap, rf, op_cond,
corner, min_max,sta,
c2, rpi, c1, elmore_res,
elmore_cap, elmore_use_load_cap);
break;
case WireloadTree::best_case:
estimatePiElmoreBest(drvr_pin, wireload_cap, net_pin_cap, tr,
estimatePiElmoreBest(drvr_pin, wireload_cap, net_pin_cap, rf,
op_cond, corner, min_max,
c2, rpi, c1, elmore_res, elmore_cap,
elmore_use_load_cap);
@@ -79,7 +79,7 @@ void
EstimateParasitics::estimatePiElmoreBest(const Pin *,
float wireload_cap,
float net_pin_cap,
const TransRiseFall *,
const RiseFall *,
const OperatingConditions *,
const Corner *,
const MinMax *,
@@ -106,7 +106,7 @@ EstimateParasitics::estimatePiElmoreWorst(const Pin *drvr_pin,
float wireload_res,
float,
float net_pin_cap,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *min_max,
@@ -120,7 +120,7 @@ EstimateParasitics::estimatePiElmoreWorst(const Pin *drvr_pin,
{
Sdc *sdc = sta->sdc();
float drvr_pin_cap = 0.0;
drvr_pin_cap = sdc->pinCapacitance(drvr_pin, tr, op_cond, corner, min_max);
drvr_pin_cap = sdc->pinCapacitance(drvr_pin, rf, op_cond, corner, min_max);
c2 = drvr_pin_cap;
rpi = wireload_res;
c1 = net_pin_cap - drvr_pin_cap + wireload_cap;
@@ -138,7 +138,7 @@ EstimateParasitics::estimatePiElmoreBalanced(const Pin *drvr_pin,
float wireload_res,
float fanout,
float net_pin_cap,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *min_max,
@@ -168,7 +168,7 @@ EstimateParasitics::estimatePiElmoreBalanced(const Pin *drvr_pin,
double y1 = 0.0;
double y2 = 0.0;
double y3 = 0.0;
y1 = sdc->pinCapacitance(drvr_pin, tr, op_cond, corner, min_max);
y1 = sdc->pinCapacitance(drvr_pin, rf, op_cond, corner, min_max);
PinConnectedPinIterator *load_iter =
network->connectedPinIterator(drvr_pin);
while (load_iter->hasNext()) {
@@ -178,10 +178,10 @@ EstimateParasitics::estimatePiElmoreBalanced(const Pin *drvr_pin,
Port *port = network->port(load_pin);
double load_cap = 0.0;
if (network->isLeaf(load_pin))
load_cap = sdc->pinCapacitance(load_pin, tr, op_cond,
load_cap = sdc->pinCapacitance(load_pin, rf, op_cond,
corner, min_max);
else if (network->isTopLevelPort(load_pin))
load_cap = sdc->portExtCap(port, tr, min_max);
load_cap = sdc->portExtCap(port, rf, min_max);
else
internalError("load pin not leaf or top level");
double cap = load_cap + cap_fanout;
+4 -4
View File
@@ -31,7 +31,7 @@ public:
protected:
// Helper function for wireload estimation.
void estimatePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const Wireload *wireload,
float fanout,
float net_pin_cap,
@@ -49,7 +49,7 @@ protected:
void estimatePiElmoreBest(const Pin *drvr_pin,
float net_pin_cap,
float wireload_cap,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *min_max,
@@ -65,7 +65,7 @@ protected:
float wireload_res,
float fanout,
float net_pin_cap,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *min_max,
@@ -79,7 +79,7 @@ protected:
float wireload_res,
float fanout,
float net_pin_cap,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *min_max,
+5 -5
View File
@@ -74,7 +74,7 @@ NullParasitics::capacitance(Parasitic *) const
Parasitic *
NullParasitics::findPiElmore(const Pin *,
const TransRiseFall *,
const RiseFall *,
const ParasiticAnalysisPt *) const
{
return nullptr;
@@ -82,7 +82,7 @@ NullParasitics::findPiElmore(const Pin *,
Parasitic *
NullParasitics::makePiElmore(const Pin *,
const TransRiseFall *,
const RiseFall *,
const ParasiticAnalysisPt *,
float,
float,
@@ -154,7 +154,7 @@ NullParasitics::isPiPoleResidue(Parasitic* ) const
Parasitic *
NullParasitics::findPiPoleResidue(const Pin *,
const TransRiseFall *,
const RiseFall *,
const ParasiticAnalysisPt *) const
{
return nullptr;
@@ -162,7 +162,7 @@ NullParasitics::findPiPoleResidue(const Pin *,
Parasitic *
NullParasitics::makePiPoleResidue(const Pin *,
const TransRiseFall *,
const RiseFall *,
const ParasiticAnalysisPt *,
float,
float,
@@ -432,7 +432,7 @@ NullParasitics::reduceToPiPoleResidue2(Parasitic *,
Parasitic *
NullParasitics::estimatePiElmore(const Pin *,
const TransRiseFall *,
const RiseFall *,
const Wireload *,
float,
float,
+5 -5
View File
@@ -42,10 +42,10 @@ public:
virtual Parasitic *
findPiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const;
virtual Parasitic *makePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2, float rpi, float c1);
virtual bool isPiElmore(Parasitic *parasitic) const;
@@ -66,10 +66,10 @@ public:
virtual bool isPiPoleResidue(Parasitic* parasitic) const;
virtual Parasitic *
findPiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const;
virtual Parasitic *makePiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2, float rpi,
float c1);
@@ -173,7 +173,7 @@ public:
const ParasiticAnalysisPt *ap);
virtual Parasitic *
estimatePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const Wireload *wireload,
float fanout,
float net_pin_cap,
+5 -5
View File
@@ -77,10 +77,10 @@ public:
// capacitor on the driver pin.
virtual bool isPiElmore(Parasitic *parasitic) const = 0;
virtual Parasitic *findPiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const = 0;
virtual Parasitic *makePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2,
float rpi,
@@ -115,10 +115,10 @@ public:
// Pi model driver load with pole/residue interconnect model to load pins.
virtual bool isPiPoleResidue(Parasitic* parasitic) const = 0;
virtual Parasitic *findPiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap) const=0;
virtual Parasitic *makePiPoleResidue(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const ParasiticAnalysisPt *ap,
float c2,
float rpi,
@@ -262,7 +262,7 @@ public:
// Estimate parasitic as pi elmore using wireload model.
virtual Parasitic *estimatePiElmore(const Pin *drvr_pin,
const TransRiseFall *tr,
const RiseFall *rf,
const Wireload *wireload,
float fanout,
float net_pin_cap,
+9 -9
View File
@@ -25,7 +25,7 @@ using sta::cmdLinkedNetwork;
using sta::Instance;
using sta::MinMaxAll;
using sta::ReduceParasiticsTo;
using sta::TransRiseFall;
using sta::RiseFall;
using sta::Pin;
using sta::TmpFloatSeq;
@@ -56,12 +56,12 @@ read_spef_cmd(const char *filename,
TmpFloatSeq *
find_pi_elmore(Pin *drvr_pin,
TransRiseFall *tr,
RiseFall *rf,
MinMax *min_max)
{
float c2, rpi, c1;
bool exists;
Sta::sta()->findPiElmore(drvr_pin, tr, min_max, c2, rpi, c1, exists);
Sta::sta()->findPiElmore(drvr_pin, rf, min_max, c2, rpi, c1, exists);
TmpFloatSeq *floats = new FloatSeq;
if (exists) {
floats->push_back(c2);
@@ -74,34 +74,34 @@ find_pi_elmore(Pin *drvr_pin,
float
find_elmore(Pin *drvr_pin,
Pin *load_pin,
TransRiseFall *tr,
RiseFall *rf,
MinMax *min_max)
{
float elmore = 0.0;
bool exists;
Sta::sta()->findElmore(drvr_pin, load_pin, tr, min_max, elmore, exists);
Sta::sta()->findElmore(drvr_pin, load_pin, rf, min_max, elmore, exists);
return elmore;
}
void
set_pi_model_cmd(Pin *drvr_pin,
TransRiseFall *tr,
RiseFall *rf,
MinMaxAll *min_max,
float c2,
float rpi,
float c1)
{
Sta::sta()->makePiElmore(drvr_pin, tr, min_max, c2, rpi, c1);
Sta::sta()->makePiElmore(drvr_pin, rf, min_max, c2, rpi, c1);
}
void
set_elmore_cmd(Pin *drvr_pin,
Pin *load_pin,
TransRiseFall *tr,
RiseFall *rf,
MinMaxAll *min_max,
float elmore)
{
Sta::sta()->setElmore(drvr_pin, load_pin, tr, min_max, elmore);
Sta::sta()->setElmore(drvr_pin, load_pin, rf, min_max, elmore);
}
%} // inline
+19 -19
View File
@@ -40,7 +40,7 @@ public:
ParasiticNode *drvr_node,
bool includes_pin_caps,
float coupling_cap_factor,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *cnst_min_max,
@@ -71,7 +71,7 @@ protected:
bool includes_pin_caps_;
float coupling_cap_multiplier_;
const TransRiseFall *tr_;
const RiseFall *rf_;
const OperatingConditions *op_cond_;
const Corner *corner_;
const MinMax *cnst_min_max_;
@@ -84,7 +84,7 @@ protected:
ReduceToPi::ReduceToPi(StaState *sta) :
StaState(sta),
coupling_cap_multiplier_(1.0),
tr_(nullptr),
rf_(nullptr),
op_cond_(nullptr),
corner_(nullptr),
cnst_min_max_(nullptr),
@@ -101,7 +101,7 @@ ReduceToPi::reduceToPi(const Pin *drvr_pin,
ParasiticNode *drvr_node,
bool includes_pin_caps,
float coupling_cap_factor,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *cnst_min_max,
@@ -112,7 +112,7 @@ ReduceToPi::reduceToPi(const Pin *drvr_pin,
{
includes_pin_caps_ = includes_pin_caps;
coupling_cap_multiplier_ = coupling_cap_factor;
tr_ = tr;
rf_ = rf;
op_cond_ = op_cond;
corner_ = corner;
cnst_min_max_ = cnst_min_max;
@@ -212,13 +212,13 @@ ReduceToPi::pinCapacitance(ParasiticNode *node)
LibertyPort *lib_port = network_->libertyPort(port);
if (lib_port) {
if (!includes_pin_caps_) {
pin_cap = sdc_->pinCapacitance(pin, tr_, op_cond_, corner_,
pin_cap = sdc_->pinCapacitance(pin, rf_, op_cond_, corner_,
cnst_min_max_);
pin_caps_one_value_ &= lib_port->capacitanceIsOneValue();
}
}
else if (network_->isTopLevelPort(pin))
pin_cap = sdc_->portExtCap(port, tr_, cnst_min_max_);
pin_cap = sdc_->portExtCap(port, rf_, cnst_min_max_);
}
return pin_cap;
}
@@ -276,7 +276,7 @@ public:
const Pin *drvr_pin,
ParasiticNode *drvr_node,
float coupling_cap_factor,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *cnst_min_max,
@@ -308,11 +308,11 @@ reduceToPiElmore(Parasitic *parasitic_network,
sta->network()->pathName(drvr_pin));
ReduceToPiElmore reducer(sta);
reducer.makePiElmore(parasitic_network, drvr_pin, drvr_node,
coupling_cap_factor, TransRiseFall::rise(),
coupling_cap_factor, RiseFall::rise(),
op_cond, corner, cnst_min_max, ap);
if (!reducer.pinCapsOneValue())
reducer.makePiElmore(parasitic_network, drvr_pin, drvr_node,
coupling_cap_factor, TransRiseFall::fall(),
coupling_cap_factor, RiseFall::fall(),
op_cond, corner, cnst_min_max, ap);
}
}
@@ -327,7 +327,7 @@ ReduceToPiElmore::makePiElmore(Parasitic *parasitic_network,
const Pin *drvr_pin,
ParasiticNode *drvr_node,
float coupling_cap_factor,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *cnst_min_max,
@@ -337,9 +337,9 @@ ReduceToPiElmore::makePiElmore(Parasitic *parasitic_network,
reduceToPi(drvr_pin, drvr_node,
parasitics_->includesPinCaps(parasitic_network),
coupling_cap_factor,
tr, op_cond, corner, cnst_min_max, ap,
rf, op_cond, corner, cnst_min_max, ap,
c2, rpi, c1);
Parasitic *pi_elmore = parasitics_->makePiElmore(drvr_pin, tr, ap,
Parasitic *pi_elmore = parasitics_->makePiElmore(drvr_pin, rf, ap,
c2, rpi, c1);
parasitics_->setIsReducedParasiticNetwork(pi_elmore, true);
reduceElmoreDfs(drvr_pin, drvr_node, 0, 0.0, pi_elmore, ap);
@@ -401,7 +401,7 @@ public:
const Pin *drvr_pin,
ParasiticNode *drvr_node,
float coupling_cap_factor,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *cnst_min_max,
@@ -475,11 +475,11 @@ reduceToPiPoleResidue2(Parasitic *parasitic_network,
sta->network()->pathName(drvr_pin));
ReduceToPiPoleResidue2 reducer(sta);
reducer.makePiPoleResidue2(parasitic_network, drvr_pin, drvr_node,
coupling_cap_factor, TransRiseFall::rise(),
coupling_cap_factor, RiseFall::rise(),
op_cond, corner, cnst_min_max, ap);
if (!reducer.pinCapsOneValue())
reducer.makePiPoleResidue2(parasitic_network, drvr_pin, drvr_node,
coupling_cap_factor, TransRiseFall::fall(),
coupling_cap_factor, RiseFall::fall(),
op_cond, corner, cnst_min_max, ap);
}
}
@@ -489,7 +489,7 @@ ReduceToPiPoleResidue2::makePiPoleResidue2(Parasitic *parasitic_network,
const Pin *drvr_pin,
ParasiticNode *drvr_node,
float coupling_cap_factor,
const TransRiseFall *tr,
const RiseFall *rf,
const OperatingConditions *op_cond,
const Corner *corner,
const MinMax *cnst_min_max,
@@ -499,10 +499,10 @@ ReduceToPiPoleResidue2::makePiPoleResidue2(Parasitic *parasitic_network,
reduceToPi(drvr_pin, drvr_node,
parasitics_->includesPinCaps(parasitic_network),
coupling_cap_factor,
tr, op_cond, corner, cnst_min_max, ap,
rf, op_cond, corner, cnst_min_max, ap,
c2, rpi, c1);
Parasitic *pi_pole_residue = parasitics_->makePiPoleResidue(drvr_pin,
tr, ap,
rf, ap,
c2, rpi, c1);
parasitics_->setIsReducedParasiticNetwork(pi_pole_residue, true);
findPolesResidues(parasitic_network, pi_pole_residue,
+2 -2
View File
@@ -408,7 +408,7 @@ SpefReader::rspfDrvrBegin(Pin *drvr_pin,
if (drvr_pin) {
// Incremental parasitics do not overwrite existing parasitics.
if (!(increment_ &&
parasitics_->findPiElmore(drvr_pin, TransRiseFall::rise(), ap_))) {
parasitics_->findPiElmore(drvr_pin, RiseFall::rise(), ap_))) {
float c2 = pi->c2()->value(triple_index_) * cap_scale_;
float rpi = pi->r1()->value(triple_index_) * res_scale_;
float c1 = pi->c1()->value(triple_index_) * cap_scale_;
@@ -416,7 +416,7 @@ SpefReader::rspfDrvrBegin(Pin *drvr_pin,
parasitics_->deleteParasitics(drvr_pin, ap_);
// Only one parasitic, save it under rise transition.
parasitic_ = parasitics_->makePiElmore(drvr_pin,
TransRiseFall::rise(),
RiseFall::rise(),
ap_, c2, rpi, c1);
}
}