ArcDelayCalc::reducedParasiticType()

This commit is contained in:
James Cherry 2020-11-30 19:25:27 -07:00
parent 4ed9f0e731
commit e0c4799a56
20 changed files with 54 additions and 24 deletions

View File

@ -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,

View File

@ -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,

View File

@ -98,6 +98,12 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin,
return nullptr;
}
ReducedParasiticType
LumpedCapDelayCalc::reducedParasiticType() const
{
return ReducedParasiticType::pi_elmore;
}
void
LumpedCapDelayCalc::finishDrvrPin()
{

View File

@ -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,

View File

@ -45,6 +45,12 @@ UnitDelayCalc::findParasitic(const Pin *,
return nullptr;
}
ReducedParasiticType
UnitDelayCalc::reducedParasiticType() const
{
return ReducedParasiticType::none;
}
void
UnitDelayCalc::inputPortDelay(const Pin *,
float,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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

View File

@ -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.

View File

@ -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;
}
}

View File

@ -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,

View File

@ -382,7 +382,7 @@ NullParasitics::otherNode(const ParasiticDevice *,
void
NullParasitics::reduceTo(Parasitic *,
const Net *,
ReduceParasiticsTo ,
ReducedParasiticType ,
const OperatingConditions *,
const Corner *,
const MinMax *,

View File

@ -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)
{

View File

@ -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_)

View File

@ -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,

View File

@ -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_;

View File

@ -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)
{

View File

@ -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;