function names with trans -> edge
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
1107ee2527
commit
3481d3c48b
|
|
@ -370,7 +370,7 @@ ArnoldiDelayCalc::gateDelay(const LibertyCell *drvr_cell,
|
||||||
Slew &drvr_slew)
|
Slew &drvr_slew)
|
||||||
{
|
{
|
||||||
input_port_ = false;
|
input_port_ = false;
|
||||||
drvr_rf_ = arc->toTrans()->asRiseFall();
|
drvr_rf_ = arc->toEdge()->asRiseFall();
|
||||||
drvr_library_ = drvr_cell->libertyLibrary();
|
drvr_library_ = drvr_cell->libertyLibrary();
|
||||||
drvr_parasitic_ = drvr_parasitic;
|
drvr_parasitic_ = drvr_parasitic;
|
||||||
ConcreteParasitic *drvr_cparasitic =
|
ConcreteParasitic *drvr_cparasitic =
|
||||||
|
|
|
||||||
|
|
@ -91,9 +91,9 @@ proc report_edge_dcalc { edge corner min_max digits } {
|
||||||
while {[$arc_iter has_next]} {
|
while {[$arc_iter has_next]} {
|
||||||
set arc [$arc_iter next]
|
set arc [$arc_iter next]
|
||||||
set from [get_name [$from_pin port]]
|
set from [get_name [$from_pin port]]
|
||||||
set from_rf [$arc from_trans]
|
set from_rf [$arc from_edge]
|
||||||
set to [get_name [$to_pin port]]
|
set to [get_name [$to_pin port]]
|
||||||
set to_rf [$arc to_trans]
|
set to_rf [$arc to_edge]
|
||||||
report_line "$from $from_rf -> $to $to_rf"
|
report_line "$from $from_rf -> $to $to_rf"
|
||||||
report_line [report_delay_calc_cmd $edge $arc $corner $min_max $digits]
|
report_line [report_delay_calc_cmd $edge $arc $corner $min_max $digits]
|
||||||
if { [$edge delay_annotated $arc $corner $min_max] } {
|
if { [$edge delay_annotated $arc $corner $min_max] } {
|
||||||
|
|
|
||||||
|
|
@ -1566,7 +1566,7 @@ DmpCeffDelayCalc::gateDelay(const LibertyCell *drvr_cell,
|
||||||
Slew &drvr_slew)
|
Slew &drvr_slew)
|
||||||
{
|
{
|
||||||
input_port_ = false;
|
input_port_ = false;
|
||||||
drvr_rf_ = arc->toTrans()->asRiseFall();
|
drvr_rf_ = arc->toEdge()->asRiseFall();
|
||||||
drvr_library_ = drvr_cell->libertyLibrary();
|
drvr_library_ = drvr_cell->libertyLibrary();
|
||||||
drvr_parasitic_ = drvr_parasitic;
|
drvr_parasitic_ = drvr_parasitic;
|
||||||
GateTimingModel *model = gateModel(arc, dcalc_ap);
|
GateTimingModel *model = gateModel(arc, dcalc_ap);
|
||||||
|
|
|
||||||
|
|
@ -285,7 +285,7 @@ DmpCeffTwoPoleDelayCalc::gateDelay(const LibertyCell *drvr_cell,
|
||||||
{
|
{
|
||||||
parasitic_is_pole_residue_ = parasitics_->isPiPoleResidue(drvr_parasitic);
|
parasitic_is_pole_residue_ = parasitics_->isPiPoleResidue(drvr_parasitic);
|
||||||
const LibertyLibrary *drvr_library = drvr_cell->libertyLibrary();
|
const LibertyLibrary *drvr_library = drvr_cell->libertyLibrary();
|
||||||
const RiseFall *rf = arc->toTrans()->asRiseFall();
|
const RiseFall *rf = arc->toEdge()->asRiseFall();
|
||||||
vth_ = drvr_library->outputThreshold(rf);
|
vth_ = drvr_library->outputThreshold(rf);
|
||||||
vl_ = drvr_library->slewLowerThreshold(rf);
|
vl_ = drvr_library->slewLowerThreshold(rf);
|
||||||
vh_ = drvr_library->slewUpperThreshold(rf);
|
vh_ = drvr_library->slewUpperThreshold(rf);
|
||||||
|
|
|
||||||
|
|
@ -766,8 +766,8 @@ GraphDelayCalc1::findInputDriverDelay(LibertyCell *drvr_cell,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
if (arc->toTrans()->asRiseFall() == rf) {
|
if (arc->toEdge()->asRiseFall() == rf) {
|
||||||
float from_slew = from_slews[arc->fromTrans()->index()];
|
float from_slew = from_slews[arc->fromEdge()->index()];
|
||||||
findInputArcDelay(drvr_cell, drvr_pin, drvr_vertex,
|
findInputArcDelay(drvr_cell, drvr_pin, drvr_vertex,
|
||||||
arc, from_slew, dcalc_ap);
|
arc, from_slew, dcalc_ap);
|
||||||
}
|
}
|
||||||
|
|
@ -789,11 +789,11 @@ GraphDelayCalc1::findInputArcDelay(LibertyCell *drvr_cell,
|
||||||
{
|
{
|
||||||
debugPrint(debug_, "delay_calc", 3, " %s %s -> %s %s (%s)",
|
debugPrint(debug_, "delay_calc", 3, " %s %s -> %s %s (%s)",
|
||||||
arc->from()->name(),
|
arc->from()->name(),
|
||||||
arc->fromTrans()->asString(),
|
arc->fromEdge()->asString(),
|
||||||
arc->to()->name(),
|
arc->to()->name(),
|
||||||
arc->toTrans()->asString(),
|
arc->toEdge()->asString(),
|
||||||
arc->role()->asString());
|
arc->role()->asString());
|
||||||
RiseFall *drvr_rf = arc->toTrans()->asRiseFall();
|
RiseFall *drvr_rf = arc->toEdge()->asRiseFall();
|
||||||
if (drvr_rf) {
|
if (drvr_rf) {
|
||||||
DcalcAPIndex ap_index = dcalc_ap->index();
|
DcalcAPIndex ap_index = dcalc_ap->index();
|
||||||
const Pvt *pvt = dcalc_ap->operatingConditions();
|
const Pvt *pvt = dcalc_ap->operatingConditions();
|
||||||
|
|
@ -1023,7 +1023,7 @@ GraphDelayCalc1::findDriverEdgeDelays(LibertyCell *drvr_cell,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
const RiseFall *rf = arc->toTrans()->asRiseFall();
|
const RiseFall *rf = arc->toEdge()->asRiseFall();
|
||||||
Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin, rf,
|
Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin, rf,
|
||||||
dcalc_ap);
|
dcalc_ap);
|
||||||
float related_out_cap = 0.0;
|
float related_out_cap = 0.0;
|
||||||
|
|
@ -1267,16 +1267,16 @@ GraphDelayCalc1::findArcDelay(LibertyCell *drvr_cell,
|
||||||
ArcDelayCalc *arc_delay_calc)
|
ArcDelayCalc *arc_delay_calc)
|
||||||
{
|
{
|
||||||
bool delay_changed = false;
|
bool delay_changed = false;
|
||||||
RiseFall *from_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *from_rf = arc->fromEdge()->asRiseFall();
|
||||||
RiseFall *drvr_rf = arc->toTrans()->asRiseFall();
|
RiseFall *drvr_rf = arc->toEdge()->asRiseFall();
|
||||||
if (from_rf && drvr_rf) {
|
if (from_rf && drvr_rf) {
|
||||||
DcalcAPIndex ap_index = dcalc_ap->index();
|
DcalcAPIndex ap_index = dcalc_ap->index();
|
||||||
debugPrint(debug_, "delay_calc", 3,
|
debugPrint(debug_, "delay_calc", 3,
|
||||||
" %s %s -> %s %s (%s) corner:%s/%s",
|
" %s %s -> %s %s (%s) corner:%s/%s",
|
||||||
arc->from()->name(),
|
arc->from()->name(),
|
||||||
arc->fromTrans()->asString(),
|
arc->fromEdge()->asString(),
|
||||||
arc->to()->name(),
|
arc->to()->name(),
|
||||||
arc->toTrans()->asString(),
|
arc->toEdge()->asString(),
|
||||||
arc->role()->asString(),
|
arc->role()->asString(),
|
||||||
dcalc_ap->corner()->name(),
|
dcalc_ap->corner()->name(),
|
||||||
dcalc_ap->delayMinMax()->asString());
|
dcalc_ap->delayMinMax()->asString());
|
||||||
|
|
@ -1350,7 +1350,7 @@ GraphDelayCalc1::multiDrvrGateDelay(MultiDrvrNet *multi_drvr,
|
||||||
intrinsic_delay, intrinsic_slew);
|
intrinsic_delay, intrinsic_slew);
|
||||||
ArcDelay parallel_delay;
|
ArcDelay parallel_delay;
|
||||||
Slew parallel_slew;
|
Slew parallel_slew;
|
||||||
const RiseFall *drvr_rf = arc->toTrans()->asRiseFall();
|
const RiseFall *drvr_rf = arc->toEdge()->asRiseFall();
|
||||||
multi_drvr->parallelDelaySlew(drvr_rf, dcalc_ap, arc_delay_calc, this,
|
multi_drvr->parallelDelaySlew(drvr_rf, dcalc_ap, arc_delay_calc, this,
|
||||||
parallel_delay, parallel_slew);
|
parallel_delay, parallel_slew);
|
||||||
|
|
||||||
|
|
@ -1396,10 +1396,10 @@ GraphDelayCalc1::findMultiDrvrGateDelay(MultiDrvrNet *multi_drvr,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set1);
|
TimingArcSetArcIterator arc_iter(arc_set1);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc1 = arc_iter.next();
|
TimingArc *arc1 = arc_iter.next();
|
||||||
RiseFall *drvr_rf1 = arc1->toTrans()->asRiseFall();
|
RiseFall *drvr_rf1 = arc1->toEdge()->asRiseFall();
|
||||||
if (drvr_rf1 == drvr_rf) {
|
if (drvr_rf1 == drvr_rf) {
|
||||||
Vertex *from_vertex1 = edge1->from(graph_);
|
Vertex *from_vertex1 = edge1->from(graph_);
|
||||||
RiseFall *from_rf1 = arc1->fromTrans()->asRiseFall();
|
RiseFall *from_rf1 = arc1->fromEdge()->asRiseFall();
|
||||||
Slew from_slew1 = edgeFromSlew(from_vertex1, from_rf1, edge1, dcalc_ap);
|
Slew from_slew1 = edgeFromSlew(from_vertex1, from_rf1, edge1, dcalc_ap);
|
||||||
ArcDelay intrinsic_delay1;
|
ArcDelay intrinsic_delay1;
|
||||||
Slew intrinsic_slew1;
|
Slew intrinsic_slew1;
|
||||||
|
|
@ -1538,8 +1538,8 @@ GraphDelayCalc1::findCheckEdgeDelays(Edge *edge,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
RiseFall *from_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *from_rf = arc->fromEdge()->asRiseFall();
|
||||||
RiseFall *to_rf = arc->toTrans()->asRiseFall();
|
RiseFall *to_rf = arc->toEdge()->asRiseFall();
|
||||||
if (from_rf && to_rf) {
|
if (from_rf && to_rf) {
|
||||||
const LibertyPort *related_out_port = arc_set->relatedOut();
|
const LibertyPort *related_out_port = arc_set->relatedOut();
|
||||||
const Pin *related_out_pin = 0;
|
const Pin *related_out_pin = 0;
|
||||||
|
|
@ -1558,9 +1558,9 @@ GraphDelayCalc1::findCheckEdgeDelays(Edge *edge,
|
||||||
debugPrint(debug_, "delay_calc", 3,
|
debugPrint(debug_, "delay_calc", 3,
|
||||||
" %s %s -> %s %s (%s)",
|
" %s %s -> %s %s (%s)",
|
||||||
arc_set->from()->name(),
|
arc_set->from()->name(),
|
||||||
arc->fromTrans()->asString(),
|
arc->fromEdge()->asString(),
|
||||||
arc_set->to()->name(),
|
arc_set->to()->name(),
|
||||||
arc->toTrans()->asString(),
|
arc->toEdge()->asString(),
|
||||||
arc_set->role()->asString());
|
arc_set->role()->asString());
|
||||||
debugPrint(debug_, "delay_calc", 3,
|
debugPrint(debug_, "delay_calc", 3,
|
||||||
" from_slew = %s to_slew = %s",
|
" from_slew = %s to_slew = %s",
|
||||||
|
|
@ -1624,8 +1624,8 @@ GraphDelayCalc1::ceff(Edge *edge,
|
||||||
const Pvt *pvt = sdc_->pvt(inst, dcalc_ap->constraintMinMax());
|
const Pvt *pvt = sdc_->pvt(inst, dcalc_ap->constraintMinMax());
|
||||||
if (pvt == nullptr)
|
if (pvt == nullptr)
|
||||||
pvt = dcalc_ap->operatingConditions();
|
pvt = dcalc_ap->operatingConditions();
|
||||||
RiseFall *from_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *from_rf = arc->fromEdge()->asRiseFall();
|
||||||
RiseFall *to_rf = arc->toTrans()->asRiseFall();
|
RiseFall *to_rf = arc->toEdge()->asRiseFall();
|
||||||
if (from_rf && to_rf) {
|
if (from_rf && to_rf) {
|
||||||
const LibertyPort *related_out_port = arc_set->relatedOut();
|
const LibertyPort *related_out_port = arc_set->relatedOut();
|
||||||
const Pin *related_out_pin = 0;
|
const Pin *related_out_pin = 0;
|
||||||
|
|
@ -1671,8 +1671,8 @@ GraphDelayCalc1::reportDelayCalc(Edge *edge,
|
||||||
const Pvt *pvt = sdc_->pvt(inst, dcalc_ap->constraintMinMax());
|
const Pvt *pvt = sdc_->pvt(inst, dcalc_ap->constraintMinMax());
|
||||||
if (pvt == nullptr)
|
if (pvt == nullptr)
|
||||||
pvt = dcalc_ap->operatingConditions();
|
pvt = dcalc_ap->operatingConditions();
|
||||||
RiseFall *from_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *from_rf = arc->fromEdge()->asRiseFall();
|
||||||
RiseFall *to_rf = arc->toTrans()->asRiseFall();
|
RiseFall *to_rf = arc->toEdge()->asRiseFall();
|
||||||
if (from_rf && to_rf) {
|
if (from_rf && to_rf) {
|
||||||
const LibertyPort *related_out_port = arc_set->relatedOut();
|
const LibertyPort *related_out_port = arc_set->relatedOut();
|
||||||
const Pin *related_out_pin = 0;
|
const Pin *related_out_pin = 0;
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ LumpedCapDelayCalc::gateDelay(const LibertyCell *drvr_cell,
|
||||||
drvr_slew = delay_zero;
|
drvr_slew = delay_zero;
|
||||||
drvr_slew_ = 0.0;
|
drvr_slew_ = 0.0;
|
||||||
}
|
}
|
||||||
drvr_rf_ = arc->toTrans()->asRiseFall();
|
drvr_rf_ = arc->toEdge()->asRiseFall();
|
||||||
drvr_library_ = drvr_cell->libertyLibrary();
|
drvr_library_ = drvr_cell->libertyLibrary();
|
||||||
multi_drvr_slew_factor_ = 1.0F;
|
multi_drvr_slew_factor_ = 1.0F;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ SimpleRCDelayCalc::gateDelay(const LibertyCell *drvr_cell,
|
||||||
Slew &drvr_slew)
|
Slew &drvr_slew)
|
||||||
{
|
{
|
||||||
drvr_parasitic_ = drvr_parasitic;
|
drvr_parasitic_ = drvr_parasitic;
|
||||||
drvr_rf_ = arc->toTrans()->asRiseFall();
|
drvr_rf_ = arc->toEdge()->asRiseFall();
|
||||||
drvr_cell_ = drvr_cell;
|
drvr_cell_ = drvr_cell;
|
||||||
drvr_library_ = drvr_cell->libertyLibrary();
|
drvr_library_ = drvr_cell->libertyLibrary();
|
||||||
pvt_ = pvt;
|
pvt_ = pvt;
|
||||||
|
|
|
||||||
|
|
@ -459,7 +459,7 @@ public:
|
||||||
LibertyPort *&enable_port,
|
LibertyPort *&enable_port,
|
||||||
FuncExpr *&enable_func,
|
FuncExpr *&enable_func,
|
||||||
RiseFall *&enable_rf) const;
|
RiseFall *&enable_rf) const;
|
||||||
RiseFall *latchCheckEnableTrans(TimingArcSet *check_set);
|
RiseFall *latchCheckEnableEdge(TimingArcSet *check_set);
|
||||||
bool isDisabledConstraint() const { return is_disabled_constraint_; }
|
bool isDisabledConstraint() const { return is_disabled_constraint_; }
|
||||||
LibertyCell *cornerCell(int ap_index);
|
LibertyCell *cornerCell(int ap_index);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -247,8 +247,10 @@ public:
|
||||||
~TimingArc();
|
~TimingArc();
|
||||||
LibertyPort *from() const { return set_->from(); }
|
LibertyPort *from() const { return set_->from(); }
|
||||||
LibertyPort *to() const { return set_->to(); }
|
LibertyPort *to() const { return set_->to(); }
|
||||||
Transition *fromTrans() const { return from_rf_; }
|
Transition *fromEdge() const { return from_rf_; }
|
||||||
Transition *toTrans() const { return to_rf_; }
|
Transition *fromTrans() const __attribute__ ((deprecated)) { return from_rf_; }
|
||||||
|
Transition *toEdge() const { return to_rf_; }
|
||||||
|
Transition *toTrans() const __attribute__ ((deprecated)) { return to_rf_; }
|
||||||
TimingRole *role() const { return set_->role(); }
|
TimingRole *role() const { return set_->role(); }
|
||||||
TimingArcSet *set() const { return set_; }
|
TimingArcSet *set() const { return set_; }
|
||||||
TimingSense sense() const;
|
TimingSense sense() const;
|
||||||
|
|
|
||||||
|
|
@ -1567,7 +1567,7 @@ class LatchEnable
|
||||||
public:
|
public:
|
||||||
LatchEnable(LibertyPort *data,
|
LatchEnable(LibertyPort *data,
|
||||||
LibertyPort *enable,
|
LibertyPort *enable,
|
||||||
RiseFall *enable_rf,
|
RiseFall *enable_edge,
|
||||||
FuncExpr *enable_func,
|
FuncExpr *enable_func,
|
||||||
LibertyPort *output,
|
LibertyPort *output,
|
||||||
TimingArcSet *d_to_q,
|
TimingArcSet *d_to_q,
|
||||||
|
|
@ -1577,7 +1577,7 @@ public:
|
||||||
LibertyPort *output() const { return output_; }
|
LibertyPort *output() const { return output_; }
|
||||||
LibertyPort *enable() const { return enable_; }
|
LibertyPort *enable() const { return enable_; }
|
||||||
FuncExpr *enableFunc() const { return enable_func_; }
|
FuncExpr *enableFunc() const { return enable_func_; }
|
||||||
RiseFall *enableTransition() const { return enable_rf_; }
|
RiseFall *enableEdge() const { return enable_edge_; }
|
||||||
TimingArcSet *dToQ() const { return d_to_q_; }
|
TimingArcSet *dToQ() const { return d_to_q_; }
|
||||||
TimingArcSet *enToQ() const { return en_to_q_; }
|
TimingArcSet *enToQ() const { return en_to_q_; }
|
||||||
TimingArcSet *setupCheck() const { return setup_check_; }
|
TimingArcSet *setupCheck() const { return setup_check_; }
|
||||||
|
|
@ -1587,7 +1587,7 @@ private:
|
||||||
|
|
||||||
LibertyPort *data_;
|
LibertyPort *data_;
|
||||||
LibertyPort *enable_;
|
LibertyPort *enable_;
|
||||||
RiseFall *enable_rf_;
|
RiseFall *enable_edge_;
|
||||||
FuncExpr *enable_func_;
|
FuncExpr *enable_func_;
|
||||||
LibertyPort *output_;
|
LibertyPort *output_;
|
||||||
TimingArcSet *d_to_q_;
|
TimingArcSet *d_to_q_;
|
||||||
|
|
@ -1597,7 +1597,7 @@ private:
|
||||||
|
|
||||||
LatchEnable::LatchEnable(LibertyPort *data,
|
LatchEnable::LatchEnable(LibertyPort *data,
|
||||||
LibertyPort *enable,
|
LibertyPort *enable,
|
||||||
RiseFall *enable_rf,
|
RiseFall *enable_edge,
|
||||||
FuncExpr *enable_func,
|
FuncExpr *enable_func,
|
||||||
LibertyPort *output,
|
LibertyPort *output,
|
||||||
TimingArcSet *d_to_q,
|
TimingArcSet *d_to_q,
|
||||||
|
|
@ -1605,7 +1605,7 @@ LatchEnable::LatchEnable(LibertyPort *data,
|
||||||
TimingArcSet *setup_check) :
|
TimingArcSet *setup_check) :
|
||||||
data_(data),
|
data_(data),
|
||||||
enable_(enable),
|
enable_(enable),
|
||||||
enable_rf_(enable_rf),
|
enable_edge_(enable_edge),
|
||||||
enable_func_(enable_func),
|
enable_func_(enable_func),
|
||||||
output_(output),
|
output_(output),
|
||||||
d_to_q_(d_to_q),
|
d_to_q_(d_to_q),
|
||||||
|
|
@ -1643,8 +1643,8 @@ LibertyCell::makeLatchEnables(Report *report,
|
||||||
TimingArcSetArcIterator check_arc_iter(setup_check);
|
TimingArcSetArcIterator check_arc_iter(setup_check);
|
||||||
if (check_arc_iter.hasNext()) {
|
if (check_arc_iter.hasNext()) {
|
||||||
TimingArc *check_arc = check_arc_iter.next();
|
TimingArc *check_arc = check_arc_iter.next();
|
||||||
RiseFall *en_rf = latch_enable->enableTransition();
|
RiseFall *en_rf = latch_enable->enableEdge();
|
||||||
RiseFall *check_rf = check_arc->fromTrans()->asRiseFall();
|
RiseFall *check_rf = check_arc->fromEdge()->asRiseFall();
|
||||||
if (check_rf == en_rf) {
|
if (check_rf == en_rf) {
|
||||||
report->warn(4, "cell %s/%s %s -> %s latch enable %s_edge timing arc is inconsistent with %s -> %s setup_%s check.",
|
report->warn(4, "cell %s/%s %s -> %s latch enable %s_edge timing arc is inconsistent with %s -> %s setup_%s check.",
|
||||||
library_->name(),
|
library_->name(),
|
||||||
|
|
@ -1780,23 +1780,23 @@ LibertyCell::latchEnable(TimingArcSet *d_to_q_set,
|
||||||
// Return values.
|
// Return values.
|
||||||
LibertyPort *&enable_port,
|
LibertyPort *&enable_port,
|
||||||
FuncExpr *&enable_func,
|
FuncExpr *&enable_func,
|
||||||
RiseFall *&enable_rf) const
|
RiseFall *&enable_edge) const
|
||||||
{
|
{
|
||||||
enable_port = nullptr;
|
enable_port = nullptr;
|
||||||
LatchEnable *latch_enable = latch_d_to_q_map_.findKey(d_to_q_set);
|
LatchEnable *latch_enable = latch_d_to_q_map_.findKey(d_to_q_set);
|
||||||
if (latch_enable) {
|
if (latch_enable) {
|
||||||
enable_port = latch_enable->enable();
|
enable_port = latch_enable->enable();
|
||||||
enable_func = latch_enable->enableFunc();
|
enable_func = latch_enable->enableFunc();
|
||||||
enable_rf = latch_enable->enableTransition();
|
enable_edge = latch_enable->enableEdge();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RiseFall *
|
RiseFall *
|
||||||
LibertyCell::latchCheckEnableTrans(TimingArcSet *check_set)
|
LibertyCell::latchCheckEnableEdge(TimingArcSet *check_set)
|
||||||
{
|
{
|
||||||
LatchEnable *latch_enable = latch_check_map_.findKey(check_set);
|
LatchEnable *latch_enable = latch_check_map_.findKey(check_set);
|
||||||
if (latch_enable)
|
if (latch_enable)
|
||||||
return latch_enable->enableTransition();
|
return latch_enable->enableEdge();
|
||||||
else
|
else
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -2024,7 +2024,7 @@ LibertyPort::driveResistance(const RiseFall *rf,
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
if (rf == nullptr
|
if (rf == nullptr
|
||||||
|| arc->toTrans()->asRiseFall() == rf) {
|
|| arc->toEdge()->asRiseFall() == rf) {
|
||||||
float drive = arc->driveResistance();
|
float drive = arc->driveResistance();
|
||||||
if (drive > 0.0) {
|
if (drive > 0.0) {
|
||||||
if (min_max->compare(drive, max_drive))
|
if (min_max->compare(drive, max_drive))
|
||||||
|
|
@ -2062,7 +2062,7 @@ LibertyPort::intrinsicDelay(const RiseFall *rf,
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
if (rf == nullptr
|
if (rf == nullptr
|
||||||
|| arc->toTrans()->asRiseFall() == rf) {
|
|| arc->toEdge()->asRiseFall() == rf) {
|
||||||
ArcDelay delay = arc->intrinsicDelay();
|
ArcDelay delay = arc->intrinsicDelay();
|
||||||
if (delayGreater(delay, 0.0, sta)) {
|
if (delayGreater(delay, 0.0, sta)) {
|
||||||
if (delayGreater(delay, max_delay, min_max, sta))
|
if (delayGreater(delay, max_delay, min_max, sta))
|
||||||
|
|
|
||||||
|
|
@ -257,7 +257,7 @@ TimingArcSet::addTimingArc(TimingArc *arc)
|
||||||
criticalError(243, "timing arc max index exceeded\n");
|
criticalError(243, "timing arc max index exceeded\n");
|
||||||
arcs_.push_back(arc);
|
arcs_.push_back(arc);
|
||||||
|
|
||||||
int from_rf_index = arc->fromTrans()->asRiseFall()->index();
|
int from_rf_index = arc->fromEdge()->asRiseFall()->index();
|
||||||
if (from_arc1_[from_rf_index] == nullptr)
|
if (from_arc1_[from_rf_index] == nullptr)
|
||||||
from_arc1_[from_rf_index] = arc;
|
from_arc1_[from_rf_index] = arc;
|
||||||
else if (from_arc2_[from_rf_index] == nullptr)
|
else if (from_arc2_[from_rf_index] == nullptr)
|
||||||
|
|
@ -277,7 +277,7 @@ TimingArcSet::deleteTimingArc(TimingArc *arc)
|
||||||
arcs_[arc->index()] = last_arc;
|
arcs_[arc->index()] = last_arc;
|
||||||
arcs_.pop_back();
|
arcs_.pop_back();
|
||||||
}
|
}
|
||||||
int from_rf_index = arc->fromTrans()->asRiseFall()->index();
|
int from_rf_index = arc->fromEdge()->asRiseFall()->index();
|
||||||
if (from_arc1_[from_rf_index] == arc) {
|
if (from_arc1_[from_rf_index] == arc) {
|
||||||
from_arc1_[from_rf_index] = from_arc2_[from_rf_index];
|
from_arc1_[from_rf_index] = from_arc2_[from_rf_index];
|
||||||
from_arc2_[from_rf_index] = nullptr;
|
from_arc2_[from_rf_index] = nullptr;
|
||||||
|
|
@ -332,13 +332,13 @@ TimingArcSet::isRisingFallingEdge() const
|
||||||
{
|
{
|
||||||
int arc_count = arcs_.size();
|
int arc_count = arcs_.size();
|
||||||
if (arc_count == 2) {
|
if (arc_count == 2) {
|
||||||
RiseFall *from_rf1 = arcs_[0]->fromTrans()->asRiseFall();
|
RiseFall *from_rf1 = arcs_[0]->fromEdge()->asRiseFall();
|
||||||
RiseFall *from_rf2 = arcs_[1]->fromTrans()->asRiseFall();
|
RiseFall *from_rf2 = arcs_[1]->fromEdge()->asRiseFall();
|
||||||
if (from_rf1 == from_rf2)
|
if (from_rf1 == from_rf2)
|
||||||
return from_rf1;
|
return from_rf1;
|
||||||
}
|
}
|
||||||
if (arcs_.size() == 1)
|
if (arcs_.size() == 1)
|
||||||
return arcs_[0]->fromTrans()->asRiseFall();
|
return arcs_[0]->fromEdge()->asRiseFall();
|
||||||
else
|
else
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -476,15 +476,15 @@ timingArcsLess(const TimingArcSet *set1,
|
||||||
while (arc_iter1.hasNext() && arc_iter2.hasNext()) {
|
while (arc_iter1.hasNext() && arc_iter2.hasNext()) {
|
||||||
TimingArc *arc1 = arc_iter1.next();
|
TimingArc *arc1 = arc_iter1.next();
|
||||||
TimingArc *arc2 = arc_iter2.next();
|
TimingArc *arc2 = arc_iter2.next();
|
||||||
int from_index1 = arc1->fromTrans()->index();
|
int from_index1 = arc1->fromEdge()->index();
|
||||||
int from_index2 = arc2->fromTrans()->index();
|
int from_index2 = arc2->fromEdge()->index();
|
||||||
if (from_index1 < from_index2)
|
if (from_index1 < from_index2)
|
||||||
return true;
|
return true;
|
||||||
if (from_index1 > from_index2)
|
if (from_index1 > from_index2)
|
||||||
return false;
|
return false;
|
||||||
// from_index1 == from_index2
|
// from_index1 == from_index2
|
||||||
int to_index1 = arc1->toTrans()->index();
|
int to_index1 = arc1->toEdge()->index();
|
||||||
int to_index2 = arc2->toTrans()->index();
|
int to_index2 = arc2->toEdge()->index();
|
||||||
if (to_index1 < to_index2)
|
if (to_index1 < to_index2)
|
||||||
return true;
|
return true;
|
||||||
if (to_index1 > to_index2)
|
if (to_index1 > to_index2)
|
||||||
|
|
@ -575,8 +575,8 @@ bool
|
||||||
TimingArc::equiv(const TimingArc *arc1,
|
TimingArc::equiv(const TimingArc *arc1,
|
||||||
const TimingArc *arc2)
|
const TimingArc *arc2)
|
||||||
{
|
{
|
||||||
return arc1->fromTrans() == arc2->fromTrans()
|
return arc1->fromEdge() == arc2->fromEdge()
|
||||||
&& arc1->toTrans() == arc2->toTrans();
|
&& arc1->toEdge() == arc2->toEdge();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -282,7 +282,7 @@ SdfReader::setEdgeDelays(Edge *edge,
|
||||||
if (triple_count == 1)
|
if (triple_count == 1)
|
||||||
triple_index = 0;
|
triple_index = 0;
|
||||||
else
|
else
|
||||||
triple_index = arc->toTrans()->sdfTripleIndex();
|
triple_index = arc->toEdge()->sdfTripleIndex();
|
||||||
SdfTriple *triple = (*triples)[triple_index];
|
SdfTriple *triple = (*triples)[triple_index];
|
||||||
setEdgeArcDelays(edge, arc, triple);
|
setEdgeArcDelays(edge, arc, triple);
|
||||||
}
|
}
|
||||||
|
|
@ -388,8 +388,8 @@ SdfReader::iopath(SdfPortSpec *from_edge,
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
if ((from_edge->transition() == Transition::riseFall())
|
if ((from_edge->transition() == Transition::riseFall())
|
||||||
|| (arc->fromTrans() == from_edge->transition())) {
|
|| (arc->fromEdge() == from_edge->transition())) {
|
||||||
size_t triple_index = arc->toTrans()->sdfTripleIndex();
|
size_t triple_index = arc->toEdge()->sdfTripleIndex();
|
||||||
SdfTriple *triple = nullptr;
|
SdfTriple *triple = nullptr;
|
||||||
if (triple_index < triple_count)
|
if (triple_index < triple_count)
|
||||||
triple = (*triples)[triple_index];
|
triple = (*triples)[triple_index];
|
||||||
|
|
@ -532,9 +532,9 @@ SdfReader::annotateCheckEdges(Pin *data_pin,
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
if (((data_edge->transition() == Transition::riseFall())
|
if (((data_edge->transition() == Transition::riseFall())
|
||||||
|| (arc->toTrans() == data_edge->transition()))
|
|| (arc->toEdge() == data_edge->transition()))
|
||||||
&& ((clk_edge->transition() == Transition::riseFall())
|
&& ((clk_edge->transition() == Transition::riseFall())
|
||||||
|| (arc->fromTrans() == clk_edge->transition()))) {
|
|| (arc->fromEdge() == clk_edge->transition()))) {
|
||||||
setEdgeArcDelays(edge, arc, triple);
|
setEdgeArcDelays(edge, arc, triple);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -425,7 +425,7 @@ SdfWriter::writeArcDelays(Edge *edge)
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
RiseFall *rf = arc->toTrans()->asRiseFall();
|
RiseFall *rf = arc->toEdge()->asRiseFall();
|
||||||
ArcDelay min_delay = graph_->arcDelay(edge, arc, arc_delay_min_index_);
|
ArcDelay min_delay = graph_->arcDelay(edge, arc, arc_delay_min_index_);
|
||||||
delays.setValue(rf, MinMax::min(), delayAsFloat(min_delay));
|
delays.setValue(rf, MinMax::min(), delayAsFloat(min_delay));
|
||||||
|
|
||||||
|
|
@ -582,8 +582,8 @@ SdfWriter::writeCheck(Edge *edge,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
RiseFall *clk_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *clk_rf = arc->fromEdge()->asRiseFall();
|
||||||
RiseFall *data_rf = arc->toTrans()->asRiseFall();;
|
RiseFall *data_rf = arc->toEdge()->asRiseFall();;
|
||||||
arcs[clk_rf->index()][data_rf->index()] = arc;
|
arcs[clk_rf->index()][data_rf->index()] = arc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -662,7 +662,7 @@ SdfWriter::writeCheck(Edge *edge,
|
||||||
|
|
||||||
if (use_data_edge)
|
if (use_data_edge)
|
||||||
gzprintf(stream_, "(%s %s)",
|
gzprintf(stream_, "(%s %s)",
|
||||||
sdfEdge(arc->toTrans()),
|
sdfEdge(arc->toEdge()),
|
||||||
sdfPortName(to_pin));
|
sdfPortName(to_pin));
|
||||||
else
|
else
|
||||||
gzprintf(stream_, "%s", sdfPortName(to_pin));
|
gzprintf(stream_, "%s", sdfPortName(to_pin));
|
||||||
|
|
@ -677,7 +677,7 @@ SdfWriter::writeCheck(Edge *edge,
|
||||||
|
|
||||||
if (use_clk_edge)
|
if (use_clk_edge)
|
||||||
gzprintf(stream_, "(%s %s)",
|
gzprintf(stream_, "(%s %s)",
|
||||||
sdfEdge(arc->fromTrans()),
|
sdfEdge(arc->fromEdge()),
|
||||||
sdfPortName(from_pin));
|
sdfPortName(from_pin));
|
||||||
else
|
else
|
||||||
gzprintf(stream_, "%s", sdfPortName(from_pin));
|
gzprintf(stream_, "%s", sdfPortName(from_pin));
|
||||||
|
|
|
||||||
|
|
@ -198,8 +198,8 @@ CheckMaxSkews:: visitMaxSkewChecks(Vertex *vertex,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
RiseFall *clk_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *clk_rf = arc->fromEdge()->asRiseFall();
|
||||||
RiseFall *ref_rf = arc->toTrans()->asRiseFall();
|
RiseFall *ref_rf = arc->toEdge()->asRiseFall();
|
||||||
VertexPathIterator clk_path_iter(vertex, clk_rf, clk_min_max, search);
|
VertexPathIterator clk_path_iter(vertex, clk_rf, clk_min_max, search);
|
||||||
while (clk_path_iter.hasNext()) {
|
while (clk_path_iter.hasNext()) {
|
||||||
PathVertex *clk_path = clk_path_iter.next();
|
PathVertex *clk_path = clk_path_iter.next();
|
||||||
|
|
|
||||||
|
|
@ -284,7 +284,7 @@ FindRegVisitor::findInferedSequential(LibertyCell *cell,
|
||||||
TimingArcSet *set = set_iter.next();
|
TimingArcSet *set = set_iter.next();
|
||||||
TimingArcSetArcIterator arc_iter(set);
|
TimingArcSetArcIterator arc_iter(set);
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
RiseFall *arc_clk_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *arc_clk_rf = arc->fromEdge()->asRiseFall();
|
||||||
bool tr_matches = (clk_rf == RiseFallBoth::riseFall()
|
bool tr_matches = (clk_rf == RiseFallBoth::riseFall()
|
||||||
|| (arc_clk_rf == clk_rf1
|
|| (arc_clk_rf == clk_rf1
|
||||||
&& clk_sense == TimingSense::positive_unate)
|
&& clk_sense == TimingSense::positive_unate)
|
||||||
|
|
|
||||||
|
|
@ -363,7 +363,7 @@ Latches::latchOutArrival(Path *data_path,
|
||||||
en_clk_info->uncertainties(),
|
en_clk_info->uncertainties(),
|
||||||
path_ap,
|
path_ap,
|
||||||
crpr_clk_path);
|
crpr_clk_path);
|
||||||
RiseFall *q_rf = d_q_arc->toTrans()->asRiseFall();
|
RiseFall *q_rf = d_q_arc->toEdge()->asRiseFall();
|
||||||
ExceptionStateSet *states = nullptr;
|
ExceptionStateSet *states = nullptr;
|
||||||
// Latch data pin is a valid exception -from pin.
|
// Latch data pin is a valid exception -from pin.
|
||||||
if (sdc_->exceptionFromStates(data_path->pin(this),
|
if (sdc_->exceptionFromStates(data_path->pin(this),
|
||||||
|
|
@ -425,8 +425,8 @@ Latches::latchSetupMargin(Vertex *data_vertex,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *check_arc = arc_iter.next();
|
TimingArc *check_arc = arc_iter.next();
|
||||||
if (check_arc->toTrans()->asRiseFall() == data_rf
|
if (check_arc->toEdge()->asRiseFall() == data_rf
|
||||||
&& check_arc->fromTrans()->asRiseFall() == disable_rf)
|
&& check_arc->fromEdge()->asRiseFall() == disable_rf)
|
||||||
return search_->deratedDelay(from_vertex, check_arc, edge,
|
return search_->deratedDelay(from_vertex, check_arc, edge,
|
||||||
false, path_ap);
|
false, path_ap);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -905,7 +905,7 @@ edgeDelayProperty(Edge *edge,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *arc = arc_iter.next();
|
TimingArc *arc = arc_iter.next();
|
||||||
RiseFall *to_rf = arc->toTrans()->asRiseFall();
|
RiseFall *to_rf = arc->toEdge()->asRiseFall();
|
||||||
if (to_rf == rf) {
|
if (to_rf == rf) {
|
||||||
for (auto corner : *sta->corners()) {
|
for (auto corner : *sta->corners()) {
|
||||||
DcalcAnalysisPt *dcalc_ap = corner->findDcalcAnalysisPt(min_max);
|
DcalcAnalysisPt *dcalc_ap = corner->findDcalcAnalysisPt(min_max);
|
||||||
|
|
|
||||||
|
|
@ -586,7 +586,7 @@ ReportPath::latchDesc(const PathEndLatchCheck *end)
|
||||||
TimingArc *check_arc = end->checkArc();
|
TimingArc *check_arc = end->checkArc();
|
||||||
TimingArcSet *check_set = check_arc->set();
|
TimingArcSet *check_set = check_arc->set();
|
||||||
LibertyCell *cell = check_set->from()->libertyCell();
|
LibertyCell *cell = check_set->from()->libertyCell();
|
||||||
RiseFall *enable_rf = cell->latchCheckEnableTrans(check_set);
|
RiseFall *enable_rf = cell->latchCheckEnableEdge(check_set);
|
||||||
return latchDesc(enable_rf);
|
return latchDesc(enable_rf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1394,8 +1394,8 @@ ReportPath::reportShort(MaxSkewCheck *check)
|
||||||
TimingArc *check_arc = check->checkArc();
|
TimingArc *check_arc = check->checkArc();
|
||||||
auto what = stdstrPrint("%s (%s->%s)",
|
auto what = stdstrPrint("%s (%s->%s)",
|
||||||
clk_pin_name,
|
clk_pin_name,
|
||||||
check_arc->fromTrans()->asString(),
|
check_arc->fromEdge()->asString(),
|
||||||
check_arc->toTrans()->asString());
|
check_arc->toEdge()->asString());
|
||||||
reportDescription(what.c_str(), line);
|
reportDescription(what.c_str(), line);
|
||||||
const EarlyLate *early_late = EarlyLate::early();
|
const EarlyLate *early_late = EarlyLate::early();
|
||||||
reportSpaceFieldDelay(check->maxSkew(this), early_late, line);
|
reportSpaceFieldDelay(check->maxSkew(this), early_late, line);
|
||||||
|
|
@ -1797,7 +1797,7 @@ ReportPath::clkRegLatchDesc(const PathEnd *end)
|
||||||
{
|
{
|
||||||
// Goofy libraries can have registers with both rising and falling
|
// Goofy libraries can have registers with both rising and falling
|
||||||
// clk->q timing arcs. Try and match the timing check transition.
|
// clk->q timing arcs. Try and match the timing check transition.
|
||||||
const RiseFall *check_clk_rf=end->checkArc()->fromTrans()->asRiseFall();
|
const RiseFall *check_clk_rf=end->checkArc()->fromEdge()->asRiseFall();
|
||||||
TimingArcSet *clk_set = nullptr;
|
TimingArcSet *clk_set = nullptr;
|
||||||
TimingArcSet *clk_rf_set = nullptr;
|
TimingArcSet *clk_rf_set = nullptr;
|
||||||
Vertex *tgt_clk_vertex = end->targetClkPath()->vertex(this);
|
Vertex *tgt_clk_vertex = end->targetClkPath()->vertex(this);
|
||||||
|
|
@ -3286,11 +3286,11 @@ ReportPath::edgeRegLatchDesc(Edge *first_edge,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (role == TimingRole::regClkToQ())
|
else if (role == TimingRole::regClkToQ())
|
||||||
return regDesc(first_arc->fromTrans()->asRiseFall());
|
return regDesc(first_arc->fromEdge()->asRiseFall());
|
||||||
else if (role == TimingRole::latchEnToQ())
|
else if (role == TimingRole::latchEnToQ())
|
||||||
return latchDesc(first_arc->fromTrans()->asRiseFall());
|
return latchDesc(first_arc->fromEdge()->asRiseFall());
|
||||||
// Who knows...
|
// Who knows...
|
||||||
return regDesc(first_arc->fromTrans()->asRiseFall());
|
return regDesc(first_arc->fromEdge()->asRiseFall());
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
|
|
|
||||||
|
|
@ -2063,7 +2063,7 @@ PathVisitor::visitArc(const Pin *from_pin,
|
||||||
PathAnalysisPt *path_ap)
|
PathAnalysisPt *path_ap)
|
||||||
{
|
{
|
||||||
if (arc) {
|
if (arc) {
|
||||||
RiseFall *to_rf = arc->toTrans()->asRiseFall();
|
RiseFall *to_rf = arc->toEdge()->asRiseFall();
|
||||||
if (searchThru(from_vertex, from_rf, edge, to_vertex, to_rf))
|
if (searchThru(from_vertex, from_rf, edge, to_vertex, to_rf))
|
||||||
return visitFromPath(from_pin, from_vertex, from_rf, from_path,
|
return visitFromPath(from_pin, from_vertex, from_rf, from_path,
|
||||||
edge, arc, to_pin, to_vertex, to_rf,
|
edge, arc, to_pin, to_vertex, to_rf,
|
||||||
|
|
@ -3006,7 +3006,7 @@ Search::timingDerate(Vertex *from_vertex,
|
||||||
TimingRole *role = edge->role();
|
TimingRole *role = edge->role();
|
||||||
const Pin *pin = from_vertex->pin();
|
const Pin *pin = from_vertex->pin();
|
||||||
if (role->isWire()) {
|
if (role->isWire()) {
|
||||||
const RiseFall *rf = arc->toTrans()->asRiseFall();
|
const RiseFall *rf = arc->toEdge()->asRiseFall();
|
||||||
return sdc_->timingDerateNet(pin, derate_clk_data, rf,
|
return sdc_->timingDerateNet(pin, derate_clk_data, rf,
|
||||||
path_ap->pathMinMax());
|
path_ap->pathMinMax());
|
||||||
}
|
}
|
||||||
|
|
@ -3015,11 +3015,11 @@ Search::timingDerate(Vertex *from_vertex,
|
||||||
const RiseFall *rf;
|
const RiseFall *rf;
|
||||||
if (role->isTimingCheck()) {
|
if (role->isTimingCheck()) {
|
||||||
derate_type = TimingDerateCellType::cell_check;
|
derate_type = TimingDerateCellType::cell_check;
|
||||||
rf = arc->toTrans()->asRiseFall();
|
rf = arc->toEdge()->asRiseFall();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
derate_type = TimingDerateCellType::cell_delay;
|
derate_type = TimingDerateCellType::cell_delay;
|
||||||
rf = arc->fromTrans()->asRiseFall();
|
rf = arc->fromEdge()->asRiseFall();
|
||||||
}
|
}
|
||||||
return sdc_->timingDerateInstance(pin, derate_type, derate_clk_data, rf,
|
return sdc_->timingDerateInstance(pin, derate_type, derate_clk_data, rf,
|
||||||
path_ap->pathMinMax());
|
path_ap->pathMinMax());
|
||||||
|
|
|
||||||
|
|
@ -176,8 +176,8 @@ searchThru(const Edge *edge,
|
||||||
const TimingArc *arc,
|
const TimingArc *arc,
|
||||||
const Graph *graph)
|
const Graph *graph)
|
||||||
{
|
{
|
||||||
RiseFall *from_rf = arc->fromTrans()->asRiseFall();
|
RiseFall *from_rf = arc->fromEdge()->asRiseFall();
|
||||||
RiseFall *to_rf = arc->toTrans()->asRiseFall();
|
RiseFall *to_rf = arc->toEdge()->asRiseFall();
|
||||||
// Ignore transitions other than rise/fall.
|
// Ignore transitions other than rise/fall.
|
||||||
return from_rf && to_rf
|
return from_rf && to_rf
|
||||||
&& searchThru(edge->from(graph), from_rf, edge, edge->to(graph), to_rf);
|
&& searchThru(edge->from(graph), from_rf, edge, edge->to(graph), to_rf);
|
||||||
|
|
|
||||||
|
|
@ -149,8 +149,8 @@ VisitPathEnds::visitCheckEnd(const Pin *pin,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *check_arc = arc_iter.next();
|
TimingArc *check_arc = arc_iter.next();
|
||||||
RiseFall *clk_rf = check_arc->fromTrans()->asRiseFall();
|
RiseFall *clk_rf = check_arc->fromEdge()->asRiseFall();
|
||||||
if (check_arc->toTrans()->asRiseFall() == end_rf
|
if (check_arc->toEdge()->asRiseFall() == end_rf
|
||||||
&& clk_rf) {
|
&& clk_rf) {
|
||||||
VertexPathIterator tgt_clk_path_iter(tgt_clk_vertex, clk_rf,
|
VertexPathIterator tgt_clk_path_iter(tgt_clk_vertex, clk_rf,
|
||||||
tgt_clk_path_ap, this);
|
tgt_clk_path_ap, this);
|
||||||
|
|
@ -253,8 +253,8 @@ VisitPathEnds::visitCheckEndUnclked(const Pin *pin,
|
||||||
TimingArcSetArcIterator arc_iter(arc_set);
|
TimingArcSetArcIterator arc_iter(arc_set);
|
||||||
while (arc_iter.hasNext()) {
|
while (arc_iter.hasNext()) {
|
||||||
TimingArc *check_arc = arc_iter.next();
|
TimingArc *check_arc = arc_iter.next();
|
||||||
RiseFall *clk_rf = check_arc->fromTrans()->asRiseFall();
|
RiseFall *clk_rf = check_arc->fromEdge()->asRiseFall();
|
||||||
if (check_arc->toTrans()->asRiseFall() == end_rf
|
if (check_arc->toEdge()->asRiseFall() == end_rf
|
||||||
&& clk_rf
|
&& clk_rf
|
||||||
&& (!filtered
|
&& (!filtered
|
||||||
|| search_->matchesFilter(path, nullptr))) {
|
|| search_->matchesFilter(path, nullptr))) {
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ proc report_edge_ { edge vertex_from_name_proc vertex_to_name_proc } {
|
||||||
if { [timing_arc_disabled $edge $arc] } {
|
if { [timing_arc_disabled $edge $arc] } {
|
||||||
set disable_reason " disabled"
|
set disable_reason " disabled"
|
||||||
}
|
}
|
||||||
report_line " [$arc from_trans] -> [$arc to_trans] $delays_fmt$disable_reason"
|
report_line " [$arc from_edge] -> [$arc to_edge] $delays_fmt$disable_reason"
|
||||||
}
|
}
|
||||||
$iter finish
|
$iter finish
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -721,7 +721,7 @@ proc set_assigned_delay2 {from_vertex to_vertex to_rf corner min_max delay} {
|
||||||
while {[$arc_iter has_next]} {
|
while {[$arc_iter has_next]} {
|
||||||
set arc [$arc_iter next]
|
set arc [$arc_iter next]
|
||||||
if { $to_rf == "rise_fall" \
|
if { $to_rf == "rise_fall" \
|
||||||
|| $to_rf eq [$arc to_trans_name] } {
|
|| $to_rf eq [$arc to_edge_name] } {
|
||||||
set_arc_delay $edge $arc $corner $min_max $delay
|
set_arc_delay $edge $arc $corner $min_max $delay
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -833,9 +833,9 @@ proc set_assigned_check2 { from_vertex from_rf to_vertex to_rf \
|
||||||
while {[$arc_iter has_next]} {
|
while {[$arc_iter has_next]} {
|
||||||
set arc [$arc_iter next]
|
set arc [$arc_iter next]
|
||||||
if { ($from_rf eq "rise_fall" \
|
if { ($from_rf eq "rise_fall" \
|
||||||
|| $from_rf eq [$arc from_trans_name]) \
|
|| $from_rf eq [$arc from_edge_name]) \
|
||||||
&& ($to_rf eq "rise_fall" \
|
&& ($to_rf eq "rise_fall" \
|
||||||
|| $to_rf eq [$arc to_trans_name]) \
|
|| $to_rf eq [$arc to_edge_name]) \
|
||||||
&& [$arc role] eq $role \
|
&& [$arc role] eq $role \
|
||||||
&& ($cond eq "" || [$arc sdf_cond] eq $cond) } {
|
&& ($cond eq "" || [$arc sdf_cond] eq $cond) } {
|
||||||
set_arc_delay $edge $arc $corner $min_max $check_value
|
set_arc_delay $edge $arc $corner $min_max $check_value
|
||||||
|
|
|
||||||
|
|
@ -5727,10 +5727,10 @@ void finish() { delete self; }
|
||||||
%extend TimingArc {
|
%extend TimingArc {
|
||||||
LibertyPort *from() { return self->from(); }
|
LibertyPort *from() { return self->from(); }
|
||||||
LibertyPort *to() { return self->to(); }
|
LibertyPort *to() { return self->to(); }
|
||||||
Transition *from_trans() { return self->fromTrans(); }
|
Transition *from_edge() { return self->fromEdge(); }
|
||||||
const char *from_trans_name() { return self->fromTrans()->asRiseFall()->name(); }
|
const char *from_edge_name() { return self->fromEdge()->asRiseFall()->name(); }
|
||||||
Transition *to_trans() { return self->toTrans(); }
|
Transition *to_edge() { return self->toEdge(); }
|
||||||
const char *to_trans_name() { return self->toTrans()->asRiseFall()->name(); }
|
const char *to_edge_name() { return self->toEdge()->asRiseFall()->name(); }
|
||||||
TimingRole *role() { return self->role(); }
|
TimingRole *role() { return self->role(); }
|
||||||
} // TimingArc methods
|
} // TimingArc methods
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue