findParasitic cleanup
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
6708246ba5
commit
2d84d14a9f
|
|
@ -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,22 +292,20 @@ 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,
|
cnst_min_max, parasitic_ap);
|
||||||
cnst_min_max, parasitic_ap);
|
|
||||||
if (delete_parasitic_network) {
|
if (delete_parasitic_network) {
|
||||||
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 nullptr;
|
return parasitic;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReducedParasiticType
|
ReducedParasiticType
|
||||||
|
|
|
||||||
|
|
@ -193,57 +193,53 @@ DmpCeffTwoPoleDelayCalc::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 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 PiPoleResidue.
|
// Prefer PiPoleResidue.
|
||||||
parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf,
|
parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap);
|
||||||
parasitic_ap);
|
if (parasitic == nullptr) {
|
||||||
if (parasitic)
|
parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap);
|
||||||
return parasitic;
|
if (parasitic == nullptr) {
|
||||||
|
Parasitic *parasitic_network =
|
||||||
parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap);
|
parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap);
|
||||||
if (parasitic)
|
if (parasitic_network) {
|
||||||
return parasitic;
|
parasitics_->reduceToPiPoleResidue2(parasitic_network, drvr_pin,
|
||||||
|
dcalc_ap->operatingConditions(),
|
||||||
Parasitic *parasitic_network =
|
corner,
|
||||||
parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap);
|
dcalc_ap->constraintMinMax(),
|
||||||
if (parasitic_network) {
|
parasitic_ap);
|
||||||
parasitics_->reduceToPiPoleResidue2(parasitic_network, drvr_pin,
|
parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap);
|
||||||
dcalc_ap->operatingConditions(),
|
reduced_parasitic_drvrs_.push_back(drvr_pin);
|
||||||
corner,
|
}
|
||||||
dcalc_ap->constraintMinMax(),
|
}
|
||||||
parasitic_ap);
|
|
||||||
parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap);
|
|
||||||
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) {
|
||||||
float pin_cap, wire_cap, fanout;
|
float pin_cap, wire_cap, fanout;
|
||||||
bool has_wire_cap;
|
bool has_wire_cap;
|
||||||
graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap,
|
graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap,
|
||||||
pin_cap, wire_cap, fanout, has_wire_cap);
|
pin_cap, wire_cap, fanout, has_wire_cap);
|
||||||
parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload,
|
parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload,
|
||||||
fanout, pin_cap,
|
fanout, pin_cap,
|
||||||
dcalc_ap->operatingConditions(),
|
dcalc_ap->operatingConditions(),
|
||||||
corner,
|
corner,
|
||||||
cnst_min_max,
|
cnst_min_max,
|
||||||
parasitic_ap);
|
parasitic_ap);
|
||||||
// Estimated parasitics are not recorded in the "database", so
|
// Estimated parasitics are not recorded in the "database", so
|
||||||
// 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 nullptr;
|
return parasitic;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReducedParasiticType
|
ReducedParasiticType
|
||||||
|
|
|
||||||
|
|
@ -55,52 +55,50 @@ 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 =
|
||||||
|
parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap);
|
||||||
Parasitic *parasitic_network =
|
if (parasitic_network) {
|
||||||
parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap);
|
parasitics_->reduceToPiElmore(parasitic_network, drvr_pin,
|
||||||
if (parasitic_network) {
|
dcalc_ap->operatingConditions(),
|
||||||
parasitics_->reduceToPiElmore(parasitic_network, drvr_pin,
|
corner,
|
||||||
dcalc_ap->operatingConditions(),
|
dcalc_ap->constraintMinMax(),
|
||||||
corner,
|
parasitic_ap);
|
||||||
dcalc_ap->constraintMinMax(),
|
parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap);
|
||||||
parasitic_ap);
|
reduced_parasitic_drvrs_.push_back(drvr_pin);
|
||||||
parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap);
|
}
|
||||||
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) {
|
||||||
float pin_cap, wire_cap, fanout;
|
float pin_cap, wire_cap, fanout;
|
||||||
bool has_wire_cap;
|
bool has_wire_cap;
|
||||||
graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap,
|
graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap,
|
||||||
pin_cap, wire_cap, fanout, has_wire_cap);
|
pin_cap, wire_cap, fanout, has_wire_cap);
|
||||||
parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload,
|
parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload,
|
||||||
fanout, pin_cap,
|
fanout, pin_cap,
|
||||||
dcalc_ap->operatingConditions(),
|
dcalc_ap->operatingConditions(),
|
||||||
corner,
|
corner,
|
||||||
cnst_min_max,
|
cnst_min_max,
|
||||||
parasitic_ap);
|
parasitic_ap);
|
||||||
// Estimated parasitics are not recorded in the "database", so save
|
// Estimated parasitics are not recorded in the "database", so save
|
||||||
// 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 nullptr;
|
return parasitic;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReducedParasiticType
|
ReducedParasiticType
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue