ArcDelayCalc::reducedParasiticType()
This commit is contained in:
parent
4ed9f0e731
commit
e0c4799a56
|
|
@ -117,6 +117,7 @@ public:
|
|||
virtual Parasitic *findParasitic(const Pin *drvr_pin,
|
||||
const RiseFall *rf,
|
||||
const DcalcAnalysisPt *dcalc_ap);
|
||||
virtual ReducedParasiticType reducedParasiticType() const;
|
||||
virtual void gateDelay(const LibertyCell *drvr_cell,
|
||||
TimingArc *arc,
|
||||
const Slew &in_slew,
|
||||
|
|
@ -306,6 +307,12 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
ReducedParasiticType
|
||||
ArnoldiDelayCalc::reducedParasiticType() const
|
||||
{
|
||||
return ReducedParasiticType::arnoldi;
|
||||
}
|
||||
|
||||
void
|
||||
ArnoldiDelayCalc::inputPortDelay(const Pin *drvr_pin,
|
||||
float in_slew,
|
||||
|
|
|
|||
|
|
@ -129,6 +129,7 @@ public:
|
|||
virtual Parasitic *findParasitic(const Pin *drvr_pin,
|
||||
const RiseFall *rf,
|
||||
const DcalcAnalysisPt *dcalc_ap);
|
||||
virtual ReducedParasiticType reducedParasiticType() const;
|
||||
virtual void inputPortDelay(const Pin *port_pin,
|
||||
float in_slew,
|
||||
const RiseFall *rf,
|
||||
|
|
@ -252,6 +253,12 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
ReducedParasiticType
|
||||
DmpCeffTwoPoleDelayCalc::reducedParasiticType() const
|
||||
{
|
||||
return ReducedParasiticType::pi_pole_residue2;
|
||||
}
|
||||
|
||||
void
|
||||
DmpCeffTwoPoleDelayCalc::inputPortDelay(const Pin *port_pin,
|
||||
float in_slew,
|
||||
|
|
|
|||
|
|
@ -98,6 +98,12 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
ReducedParasiticType
|
||||
LumpedCapDelayCalc::reducedParasiticType() const
|
||||
{
|
||||
return ReducedParasiticType::pi_elmore;
|
||||
}
|
||||
|
||||
void
|
||||
LumpedCapDelayCalc::finishDrvrPin()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ public:
|
|||
virtual Parasitic *findParasitic(const Pin *drvr_pin,
|
||||
const RiseFall *rf,
|
||||
const DcalcAnalysisPt *dcalc_ap);
|
||||
virtual ReducedParasiticType reducedParasiticType() const;
|
||||
virtual void inputPortDelay(const Pin *port_pin,
|
||||
float in_slew,
|
||||
const RiseFall *rf,
|
||||
|
|
|
|||
|
|
@ -45,6 +45,12 @@ UnitDelayCalc::findParasitic(const Pin *,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
ReducedParasiticType
|
||||
UnitDelayCalc::reducedParasiticType() const
|
||||
{
|
||||
return ReducedParasiticType::none;
|
||||
}
|
||||
|
||||
void
|
||||
UnitDelayCalc::inputPortDelay(const Pin *,
|
||||
float,
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public:
|
|||
virtual Parasitic *findParasitic(const Pin *drvr_pin,
|
||||
const RiseFall *rf,
|
||||
const DcalcAnalysisPt *dcalc_ap);
|
||||
virtual ReducedParasiticType reducedParasiticType() const;
|
||||
virtual void gateDelay(const LibertyCell *drvr_cell,
|
||||
TimingArc *arc,
|
||||
const Slew &in_slew,
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include "LibertyClass.hh"
|
||||
#include "NetworkClass.hh"
|
||||
#include "Delay.hh"
|
||||
#include "ParasiticsClass.hh"
|
||||
#include "StaState.hh"
|
||||
|
||||
namespace sta {
|
||||
|
|
@ -54,7 +55,7 @@ public:
|
|||
virtual Parasitic *findParasitic(const Pin *drvr_pin,
|
||||
const RiseFall *rf,
|
||||
const DcalcAnalysisPt *dcalc_ap) = 0;
|
||||
|
||||
virtual ReducedParasiticType reducedParasiticType() const = 0;
|
||||
// Find the wire delays and slews for an input port without a driving cell.
|
||||
// This call primarily initializes the load delay/slew iterator.
|
||||
virtual void inputPortDelay(const Pin *port_pin,
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ public:
|
|||
// Reduce parasitic network to reduce_to model.
|
||||
virtual void reduceTo(Parasitic *parasitic,
|
||||
const Net *net,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
const MinMax *cnst_min_max,
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ public:
|
|||
// Reduce parasitic network to reduce_to model.
|
||||
virtual void reduceTo(Parasitic *parasitic,
|
||||
const Net *net,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
const MinMax *cnst_min_max,
|
||||
|
|
|
|||
|
|
@ -24,6 +24,6 @@ class ParasiticDevice;
|
|||
class ParasiticNode;
|
||||
class ParasiticAnalysisPt;
|
||||
|
||||
enum class ReduceParasiticsTo { pi_elmore, pi_pole_residue2, none };
|
||||
enum class ReducedParasiticType { pi_elmore, pi_pole_residue2, arnoldi, none };
|
||||
|
||||
} // namespace
|
||||
|
|
|
|||
|
|
@ -1068,7 +1068,7 @@ public:
|
|||
bool pin_cap_included,
|
||||
bool keep_coupling_caps,
|
||||
float coupling_cap_factor,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
bool delete_after_reduce,
|
||||
bool quiet);
|
||||
// Parasitics.
|
||||
|
|
|
|||
|
|
@ -1564,21 +1564,22 @@ ConcreteParasitics::otherNode(const ParasiticDevice *device,
|
|||
void
|
||||
ConcreteParasitics::reduceTo(Parasitic *parasitic,
|
||||
const Net *net,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
const MinMax *cnst_min_max,
|
||||
const ParasiticAnalysisPt *ap)
|
||||
{
|
||||
switch (reduce_to) {
|
||||
case ReduceParasiticsTo::pi_elmore:
|
||||
case ReducedParasiticType::pi_elmore:
|
||||
reduceToPiElmore(parasitic, net, op_cond, corner, cnst_min_max, ap);
|
||||
break;
|
||||
case ReduceParasiticsTo::pi_pole_residue2:
|
||||
case ReducedParasiticType::pi_pole_residue2:
|
||||
reduceToPiPoleResidue2(parasitic, net, op_cond, corner,
|
||||
cnst_min_max, ap);
|
||||
break;
|
||||
case ReduceParasiticsTo::none:
|
||||
case ReducedParasiticType::arnoldi:
|
||||
case ReducedParasiticType::none:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ public:
|
|||
|
||||
virtual void reduceTo(Parasitic *parasitic,
|
||||
const Net *net,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
const MinMax *cnst_min_max,
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ NullParasitics::otherNode(const ParasiticDevice *,
|
|||
void
|
||||
NullParasitics::reduceTo(Parasitic *,
|
||||
const Net *,
|
||||
ReduceParasiticsTo ,
|
||||
ReducedParasiticType ,
|
||||
const OperatingConditions *,
|
||||
const Corner *,
|
||||
const MinMax *,
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ using sta::Sta;
|
|||
using sta::cmdLinkedNetwork;
|
||||
using sta::Instance;
|
||||
using sta::MinMaxAll;
|
||||
using sta::ReduceParasiticsTo;
|
||||
using sta::ReducedParasiticType;
|
||||
using sta::RiseFall;
|
||||
using sta::Pin;
|
||||
using sta::TmpFloatSeq;
|
||||
|
|
@ -41,7 +41,7 @@ read_spef_cmd(const char *filename,
|
|||
bool pin_cap_included,
|
||||
bool keep_coupling_caps,
|
||||
float coupling_cap_factor,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
bool delete_after_reduce,
|
||||
bool quiet)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ readSpefFile(const char *filename,
|
|||
bool pin_cap_included,
|
||||
bool keep_coupling_caps,
|
||||
float coupling_cap_factor,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
bool delete_after_reduce,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
|
|
@ -86,7 +86,7 @@ SpefReader::SpefReader(const char *filename,
|
|||
bool pin_cap_included,
|
||||
bool keep_coupling_caps,
|
||||
float coupling_cap_factor,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
bool delete_after_reduce,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
|
|
@ -467,7 +467,7 @@ SpefReader::dspfFinish()
|
|||
// Checking "should" be done by report_annotated_parasitics.
|
||||
if (!quiet_)
|
||||
parasitics_->check(parasitic_);
|
||||
if (reduce_to_ != ReduceParasiticsTo::none) {
|
||||
if (reduce_to_ != ReducedParasiticType::none) {
|
||||
parasitics_->reduceTo(parasitic_, net_, reduce_to_, op_cond_,
|
||||
corner_, cnst_min_max_, ap_);
|
||||
if (delete_after_reduce_)
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ readSpefFile(const char *filename,
|
|||
bool pin_cap_included,
|
||||
bool keep_coupling_caps,
|
||||
float coupling_cap_factor,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
bool delete_after_reduce,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public:
|
|||
bool pin_cap_included,
|
||||
bool keep_coupling_caps,
|
||||
float coupling_cap_factor,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
bool delete_after_reduce,
|
||||
const OperatingConditions *op_cond,
|
||||
const Corner *corner,
|
||||
|
|
@ -145,7 +145,7 @@ private:
|
|||
bool increment_;
|
||||
bool pin_cap_included_;
|
||||
bool keep_coupling_caps_;
|
||||
ReduceParasiticsTo reduce_to_;
|
||||
ReducedParasiticType reduce_to_;
|
||||
bool delete_after_reduce_;
|
||||
const OperatingConditions *op_cond_;
|
||||
const Corner *corner_;
|
||||
|
|
|
|||
|
|
@ -3574,7 +3574,7 @@ Sta::readSpef(const char *filename,
|
|||
bool pin_cap_included,
|
||||
bool keep_coupling_caps,
|
||||
float coupling_cap_factor,
|
||||
ReduceParasiticsTo reduce_to,
|
||||
ReducedParasiticType reduce_to,
|
||||
bool delete_after_reduce,
|
||||
bool quiet)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1365,15 +1365,15 @@ using namespace sta;
|
|||
Tcl_SetObjResult(interp, obj);
|
||||
}
|
||||
|
||||
%typemap(in) ReduceParasiticsTo {
|
||||
%typemap(in) ReducedParasiticType {
|
||||
int length;
|
||||
char *arg = Tcl_GetStringFromObj($input, &length);
|
||||
if (stringEq(arg, "pi_elmore"))
|
||||
$1 = ReduceParasiticsTo::pi_elmore;
|
||||
$1 = ReducedParasiticType::pi_elmore;
|
||||
else if (stringEq(arg, "pi_pole_residue2"))
|
||||
$1 = ReduceParasiticsTo::pi_pole_residue2;
|
||||
$1 = ReducedParasiticType::pi_pole_residue2;
|
||||
else if (stringEq(arg, "none"))
|
||||
$1 = ReduceParasiticsTo::none;
|
||||
$1 = ReducedParasiticType::none;
|
||||
else {
|
||||
tclError(interp, "Error: %s pi_elmore, pi_pole_residue2, or none.", arg);
|
||||
return TCL_ERROR;
|
||||
|
|
|
|||
Loading…
Reference in New Issue