max_slew/fanout/capacitance_check_slack

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2022-04-03 13:31:07 -07:00
parent 8b940e04aa
commit f15c1b9d33
4 changed files with 84 additions and 3 deletions

View File

@ -626,6 +626,7 @@ public:
Slew &slew,
float &limit,
float &slack);
float maxSlewCheckSlack();
void checkFanoutLimitPreamble();
// Return pins with the min/max fanout limit slack.
@ -646,6 +647,7 @@ public:
float &fanout,
float &limit,
float &slack);
float maxFanoutCheckSlack();
void checkCapacitanceLimitPreamble();
// Return pins with the min/max slew limit slack.
@ -672,6 +674,7 @@ public:
float &capacitance,
float &limit,
float &slack);
float maxCapacitanceCheckSlack();
// Min pulse width check with the least slack.
// corner=nullptr checks all corners.

View File

@ -41,9 +41,6 @@ public:
PinSeq *checkFanoutLimits(Net *net,
bool violators,
const MinMax *min_max);
protected:
void checkFanout(const Pin *pin,
const MinMax *min_max,
float limit1,
@ -51,6 +48,8 @@ protected:
float &fanout,
float &slack,
float &limit) const;
protected:
void findLimit(const Pin *pin,
const MinMax *min_max,
// Return values.

View File

@ -5187,6 +5187,26 @@ Sta::checkSlew(const Pin *pin,
corner1, rf, slew, limit, slack);
}
float
Sta::maxSlewCheckSlack()
{
checkSlewLimitPreamble();
PinSeq *pins = check_slew_limits_->checkSlewLimits(nullptr, false, nullptr,
MinMax::max());
float slack = INF;
if (!pins->empty()) {
Pin *pin = (*pins)[0];
const Corner *corner;
const RiseFall *rf;
Slew slew;
float limit;
check_slew_limits_->checkSlew(pin, nullptr, MinMax::max(), true,
corner, rf, slew, limit, slack);
}
delete pins;
return slack;
}
////////////////////////////////////////////////////////////////'
void
@ -5247,6 +5267,23 @@ Sta::checkFanout(const Pin *pin,
fanout, limit, slack);
}
float
Sta::maxFanoutCheckSlack()
{
checkFanoutLimitPreamble();
PinSeq *pins = check_fanout_limits_->checkFanoutLimits(nullptr, false, MinMax::max());
float slack = INF;
if (!pins->empty()) {
Pin *pin = (*pins)[0];
float fanout;
float limit;
check_fanout_limits_->checkFanout(pin, MinMax::max(), true,
fanout, limit, slack);
}
delete pins;
return slack;
}
////////////////////////////////////////////////////////////////'
void
@ -5321,6 +5358,27 @@ Sta::checkCapacitance(const Pin *pin,
limit, slack);
}
float
Sta::maxCapacitanceCheckSlack()
{
checkCapacitanceLimitPreamble();
PinSeq *pins = check_capacitance_limits_->checkCapacitanceLimits(nullptr, false,
nullptr,
MinMax::max());
float slack = INF;
if (!pins->empty()) {
Pin *pin = (*pins)[0];
const Corner *corner;
const RiseFall *rf;
float capacitance;
float limit;
check_capacitance_limits_->checkCapacitance(pin, nullptr, MinMax::max(),
corner, rf, capacitance, limit, slack);
}
delete pins;
return slack;
}
////////////////////////////////////////////////////////////////
void

View File

@ -4755,6 +4755,13 @@ max_slew_violation_count()
return Sta::sta()->checkSlewLimits(nullptr, true, nullptr, MinMax::max())->size();
}
float
max_slew_check_slack()
{
cmdLinkedNetwork();
return Sta::sta()->maxSlewCheckSlack();
}
void
report_slew_limit_short_header()
{
@ -4795,6 +4802,13 @@ max_fanout_violation_count()
return Sta::sta()->checkFanoutLimits(nullptr, true, MinMax::max())->size();
}
float
max_fanout_check_slack()
{
cmdLinkedNetwork();
return Sta::sta()->maxFanoutCheckSlack();
}
void
report_fanout_limit_short_header()
{
@ -4834,6 +4848,13 @@ max_capacitance_violation_count()
return Sta::sta()->checkCapacitanceLimits(nullptr, true,nullptr,MinMax::max())->size();
}
float
max_capacitance_check_slack()
{
cmdLinkedNetwork();
return Sta::sta()->maxCapacitanceCheckSlack();
}
void
report_capacitance_limit_short_header()
{