findParasitic cleanup

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-10-01 12:00:18 -07:00
parent 6708246ba5
commit 2d84d14a9f
3 changed files with 80 additions and 87 deletions

View File

@ -266,8 +266,9 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin,
const RiseFall *drvr_rf, const RiseFall *drvr_rf,
const DcalcAnalysisPt *dcalc_ap) const DcalcAnalysisPt *dcalc_ap)
{ {
Parasitic *parasitic = nullptr;
const Corner *corner = dcalc_ap->corner(); const Corner *corner = dcalc_ap->corner();
// set_load has precidence over parasitics. // set_load net has precidence over parasitics.
if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) {
const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt();
Parasitic *parasitic_network = Parasitic *parasitic_network =
@ -291,8 +292,7 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin,
} }
if (parasitic_network) { if (parasitic_network) {
Parasitic *parasitic = parasitic = reduce_->reduceToArnoldi(parasitic_network,
reduce_->reduceToArnoldi(parasitic_network,
drvr_pin, drvr_pin,
parasitic_ap->couplingCapFactor(), parasitic_ap->couplingCapFactor(),
drvr_rf, op_cond, corner, drvr_rf, op_cond, corner,
@ -301,12 +301,11 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin,
Net *net = network_->net(drvr_pin); Net *net = network_->net(drvr_pin);
parasitics_->deleteParasiticNetwork(net, parasitic_ap); parasitics_->deleteParasiticNetwork(net, parasitic_ap);
} }
// Arnoldi parasitics their own class that are not saved in the parasitic db. // Arnoldi parasitics are their own class that are not saved in the parasitic db.
unsaved_parasitics_.push_back(parasitic); unsaved_parasitics_.push_back(parasitic);
}
}
return parasitic; return parasitic;
}
}
return nullptr;
} }
ReducedParasiticType ReducedParasiticType

View File

@ -193,22 +193,17 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin,
const RiseFall *rf, const RiseFall *rf,
const DcalcAnalysisPt *dcalc_ap) const DcalcAnalysisPt *dcalc_ap)
{ {
const Corner *corner = dcalc_ap->corner();
// set_load has precidence over parasitics.
if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) {
Parasitic *parasitic = nullptr; Parasitic *parasitic = nullptr;
const Corner *corner = dcalc_ap->corner();
// set_load net has precidence over parasitics.
if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) {
const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt();
if (parasitics_->haveParasitics()) { if (parasitics_->haveParasitics()) {
// Prefer PiPoleResidue. // Prefer PiPoleResidue.
parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap);
parasitic_ap); if (parasitic == nullptr) {
if (parasitic)
return parasitic;
parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap);
if (parasitic) if (parasitic == nullptr) {
return parasitic;
Parasitic *parasitic_network = Parasitic *parasitic_network =
parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap);
if (parasitic_network) { if (parasitic_network) {
@ -219,10 +214,11 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin,
parasitic_ap); parasitic_ap);
parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap); parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap);
reduced_parasitic_drvrs_.push_back(drvr_pin); reduced_parasitic_drvrs_.push_back(drvr_pin);
return parasitic;
} }
} }
}
}
else {
const MinMax *cnst_min_max = dcalc_ap->constraintMinMax(); const MinMax *cnst_min_max = dcalc_ap->constraintMinMax();
Wireload *wireload = sdc_->wireload(cnst_min_max); Wireload *wireload = sdc_->wireload(cnst_min_max);
if (wireload) { if (wireload) {
@ -240,10 +236,10 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin,
// it for deletion after the drvr pin delay calc is finished. // it for deletion after the drvr pin delay calc is finished.
if (parasitic) if (parasitic)
unsaved_parasitics_.push_back(parasitic); unsaved_parasitics_.push_back(parasitic);
}
}
}
return parasitic; return parasitic;
}
}
return nullptr;
} }
ReducedParasiticType ReducedParasiticType

View File

@ -55,17 +55,15 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin,
const RiseFall *rf, const RiseFall *rf,
const DcalcAnalysisPt *dcalc_ap) const DcalcAnalysisPt *dcalc_ap)
{ {
Parasitic *parasitic = nullptr;
const Corner *corner = dcalc_ap->corner(); const Corner *corner = dcalc_ap->corner();
// set_load net has precidence over parasitics. // set_load net has precidence over parasitics.
if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) {
Parasitic *parasitic = nullptr;
const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt();
if (parasitics_->haveParasitics()) { if (parasitics_->haveParasitics()) {
// Prefer PiElmore. // Prefer PiElmore.
parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap);
if (parasitic) if (parasitic == nullptr) {
return parasitic;
Parasitic *parasitic_network = Parasitic *parasitic_network =
parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap);
if (parasitic_network) { if (parasitic_network) {
@ -76,10 +74,10 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin,
parasitic_ap); parasitic_ap);
parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap);
reduced_parasitic_drvrs_.push_back(drvr_pin); reduced_parasitic_drvrs_.push_back(drvr_pin);
return parasitic;
} }
} }
}
else {
const MinMax *cnst_min_max = dcalc_ap->constraintMinMax(); const MinMax *cnst_min_max = dcalc_ap->constraintMinMax();
Wireload *wireload = sdc_->wireload(cnst_min_max); Wireload *wireload = sdc_->wireload(cnst_min_max);
if (wireload) { if (wireload) {
@ -97,10 +95,10 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin,
// it for deletion after the drvr pin delay calc is finished. // it for deletion after the drvr pin delay calc is finished.
if (parasitic) if (parasitic)
unsaved_parasitics_.push_back(parasitic); unsaved_parasitics_.push_back(parasitic);
}
}
}
return parasitic; return parasitic;
}
}
return nullptr;
} }
ReducedParasiticType ReducedParasiticType