mirror of
https://github.com/The-OpenROAD-Project/OpenSTA.git
synced 2026-09-03 06:33:07 +02:00
TransRiseFall -> RiseFall
This commit is contained in:
@@ -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_);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user