TimingArc::intrinsicDelay, driveResistance
This commit is contained in:
parent
c2d66ac62a
commit
b0f0de488f
|
|
@ -258,6 +258,8 @@ public:
|
|||
TimingArc *cornerArc(int ap_index);
|
||||
void setCornerArc(TimingArc *corner_arc,
|
||||
int ap_index);
|
||||
float driveResistance() const;
|
||||
float intrinsicDelay() const;
|
||||
|
||||
static bool equiv(const TimingArc *arc1,
|
||||
const TimingArc *arc2);
|
||||
|
|
|
|||
|
|
@ -2011,11 +2011,10 @@ LibertyPort::driveResistance(const RiseFall *rf,
|
|||
TimingArc *arc = arc_iter.next();
|
||||
if (rf == nullptr
|
||||
|| arc->toTrans()->asRiseFall() == rf) {
|
||||
GateTimingModel *model = dynamic_cast<GateTimingModel*>(arc->model());
|
||||
if (model) {
|
||||
float drive = model->driveResistance(liberty_cell_, nullptr);
|
||||
if (min_max->compare(drive, max_drive))
|
||||
max_drive = drive;
|
||||
float drive = arc->driveResistance();
|
||||
if (drive > 0.0) {
|
||||
if (min_max->compare(drive, max_drive))
|
||||
max_drive = drive;
|
||||
found_drive = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -2049,18 +2048,13 @@ LibertyPort::intrinsicDelay(const RiseFall *rf,
|
|||
TimingArc *arc = arc_iter.next();
|
||||
if (rf == nullptr
|
||||
|| arc->toTrans()->asRiseFall() == rf) {
|
||||
GateTimingModel *model = dynamic_cast<GateTimingModel*>(arc->model());
|
||||
if (model) {
|
||||
ArcDelay arc_delay;
|
||||
Slew slew;
|
||||
model->gateDelay(liberty_cell_, nullptr, 0.0, 0.0, 0.0, false,
|
||||
arc_delay, slew);
|
||||
float delay = delayAsFloat(arc_delay);
|
||||
float delay = arc->intrinsicDelay();
|
||||
if (delay > 0.0) {
|
||||
if (min_max->compare(delay, max_delay))
|
||||
max_delay = delay;
|
||||
found_delay = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,6 +134,34 @@ TimingArcAttrs::setOcvArcDepth(float depth)
|
|||
ocv_arc_depth_ = depth;
|
||||
}
|
||||
|
||||
float
|
||||
TimingArc::driveResistance() const
|
||||
{
|
||||
GateTimingModel *model = dynamic_cast<GateTimingModel*>(model_);
|
||||
if (model) {
|
||||
LibertyCell *cell = set_->libertyCell();
|
||||
return model->driveResistance(cell, nullptr);
|
||||
}
|
||||
else
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
float
|
||||
TimingArc::intrinsicDelay() const
|
||||
{
|
||||
GateTimingModel *model = dynamic_cast<GateTimingModel*>(model_);
|
||||
if (model) {
|
||||
LibertyCell *cell = set_->libertyCell();
|
||||
ArcDelay arc_delay;
|
||||
Slew slew;
|
||||
model->gateDelay(cell, nullptr, 0.0, 0.0, 0.0, false,
|
||||
arc_delay, slew);
|
||||
return arc_delay;
|
||||
}
|
||||
else
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
TimingArcSet *TimingArcSet::wire_timing_arc_set_ = nullptr;
|
||||
|
|
|
|||
Loading…
Reference in New Issue