max_slew/cap/fanout_check_limit tcl accessors

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2022-04-07 16:18:00 -07:00
parent e76578116c
commit ecc1dcc605
3 changed files with 105 additions and 27 deletions

View File

@ -626,7 +626,11 @@ public:
Slew &slew, Slew &slew,
float &limit, float &limit,
float &slack); float &slack);
float maxSlewCheckSlack(); void maxSlewCheck(// Return values.
Pin *&pin,
Slew &slew,
float &slack,
float &limit);
void checkFanoutLimitPreamble(); void checkFanoutLimitPreamble();
// Return pins with the min/max fanout limit slack. // Return pins with the min/max fanout limit slack.
@ -647,7 +651,11 @@ public:
float &fanout, float &fanout,
float &limit, float &limit,
float &slack); float &slack);
float maxFanoutCheckSlack(); void maxFanoutCheck(// Return values.
Pin *&pin,
float &fanout,
float &slack,
float &limit);
void checkCapacitanceLimitPreamble(); void checkCapacitanceLimitPreamble();
// Return pins with the min/max slew limit slack. // Return pins with the min/max slew limit slack.
@ -674,7 +682,11 @@ public:
float &capacitance, float &capacitance,
float &limit, float &limit,
float &slack); float &slack);
float maxCapacitanceCheckSlack(); void maxCapacitanceCheck(// Return values.
Pin *&pin,
float &capacitance,
float &slack,
float &limit);
// Min pulse width check with the least slack. // Min pulse width check with the least slack.
// corner=nullptr checks all corners. // corner=nullptr checks all corners.

View File

@ -5187,24 +5187,28 @@ Sta::checkSlew(const Pin *pin,
corner1, rf, slew, limit, slack); corner1, rf, slew, limit, slack);
} }
float void
Sta::maxSlewCheckSlack() Sta::maxSlewCheck(// Return values.
Pin *&pin,
Slew &slew,
float &slack,
float &limit)
{ {
checkSlewLimitPreamble(); checkSlewLimitPreamble();
PinSeq *pins = check_slew_limits_->checkSlewLimits(nullptr, false, nullptr, PinSeq *pins = check_slew_limits_->checkSlewLimits(nullptr, false, nullptr,
MinMax::max()); MinMax::max());
float slack = INF; pin = nullptr;
slew = 0.0;
slack = INF;
limit = INF;
if (!pins->empty()) { if (!pins->empty()) {
Pin *pin = (*pins)[0]; pin = (*pins)[0];
const Corner *corner; const Corner *corner;
const RiseFall *rf; const RiseFall *rf;
Slew slew;
float limit;
check_slew_limits_->checkSlew(pin, nullptr, MinMax::max(), true, check_slew_limits_->checkSlew(pin, nullptr, MinMax::max(), true,
corner, rf, slew, limit, slack); corner, rf, slew, limit, slack);
} }
delete pins; delete pins;
return slack;
} }
////////////////////////////////////////////////////////////////' ////////////////////////////////////////////////////////////////'
@ -5267,21 +5271,24 @@ Sta::checkFanout(const Pin *pin,
fanout, limit, slack); fanout, limit, slack);
} }
float void
Sta::maxFanoutCheckSlack() Sta::maxFanoutCheck(// Return values.
Pin *&pin,
float &fanout,
float &slack,
float &limit)
{ {
checkFanoutLimitPreamble(); checkFanoutLimitPreamble();
PinSeq *pins = check_fanout_limits_->checkFanoutLimits(nullptr, false, MinMax::max()); PinSeq *pins = check_fanout_limits_->checkFanoutLimits(nullptr, false, MinMax::max());
float slack = INF; pin = nullptr;
fanout = 0;
slack = INF;
if (!pins->empty()) { if (!pins->empty()) {
Pin *pin = (*pins)[0]; pin = (*pins)[0];
float fanout;
float limit;
check_fanout_limits_->checkFanout(pin, MinMax::max(), check_fanout_limits_->checkFanout(pin, MinMax::max(),
fanout, limit, slack); fanout, limit, slack);
} }
delete pins; delete pins;
return slack;
} }
////////////////////////////////////////////////////////////////' ////////////////////////////////////////////////////////////////'
@ -5358,25 +5365,29 @@ Sta::checkCapacitance(const Pin *pin,
limit, slack); limit, slack);
} }
float void
Sta::maxCapacitanceCheckSlack() Sta::maxCapacitanceCheck(// Return values.
Pin *&pin,
float &capacitance,
float &slack,
float &limit)
{ {
checkCapacitanceLimitPreamble(); checkCapacitanceLimitPreamble();
PinSeq *pins = check_capacitance_limits_->checkCapacitanceLimits(nullptr, false, PinSeq *pins = check_capacitance_limits_->checkCapacitanceLimits(nullptr, false,
nullptr, nullptr,
MinMax::max()); MinMax::max());
float slack = INF; pin = nullptr;
capacitance = 0.0;
slack = INF;
limit = INF;
if (!pins->empty()) { if (!pins->empty()) {
Pin *pin = (*pins)[0]; pin = (*pins)[0];
const Corner *corner; const Corner *corner;
const RiseFall *rf; const RiseFall *rf;
float capacitance;
float limit;
check_capacitance_limits_->checkCapacitance(pin, nullptr, MinMax::max(), check_capacitance_limits_->checkCapacitance(pin, nullptr, MinMax::max(),
corner, rf, capacitance, limit, slack); corner, rf, capacitance, limit, slack);
} }
delete pins; delete pins;
return slack;
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////

View File

@ -4762,7 +4762,25 @@ max_slew_check_slack()
{ {
cmdLinkedNetwork(); cmdLinkedNetwork();
Sta *sta = Sta::sta(); Sta *sta = Sta::sta();
return sta->units()->timeUnit()->staToUser(sta->maxSlewCheckSlack()); Pin *pin;
Slew slew;
float slack;
float limit;
sta->maxSlewCheck(pin, slew, slack, limit);
return sta->units()->timeUnit()->staToUser(slack);
}
float
max_slew_check_limit()
{
cmdLinkedNetwork();
Sta *sta = Sta::sta();
Pin *pin;
Slew slew;
float slack;
float limit;
sta->maxSlewCheck(pin, slew, slack, limit);
return sta->units()->timeUnit()->staToUser(limit);
} }
void void
@ -4809,7 +4827,26 @@ float
max_fanout_check_slack() max_fanout_check_slack()
{ {
cmdLinkedNetwork(); cmdLinkedNetwork();
return Sta::sta()->maxFanoutCheckSlack(); Sta *sta = Sta::sta();
Pin *pin;
float fanout;
float slack;
float limit;
sta->maxFanoutCheck(pin, fanout, slack, limit);
return slack;;
}
float
max_fanout_check_limit()
{
cmdLinkedNetwork();
Sta *sta = Sta::sta();
Pin *pin;
float fanout;
float slack;
float limit;
sta->maxFanoutCheck(pin, fanout, slack, limit);
return limit;;
} }
void void
@ -4856,7 +4893,25 @@ max_capacitance_check_slack()
{ {
cmdLinkedNetwork(); cmdLinkedNetwork();
Sta *sta = Sta::sta(); Sta *sta = Sta::sta();
return sta->units()->capacitanceUnit()->staToUser(sta->maxCapacitanceCheckSlack()); Pin *pin;
float capacitance;
float slack;
float limit;
sta->maxCapacitanceCheck(pin, capacitance, slack, limit);
return sta->units()->capacitanceUnit()->staToUser(slack);
}
float
max_capacitance_check_limit()
{
cmdLinkedNetwork();
Sta *sta = Sta::sta();
Pin *pin;
float capacitance;
float slack;
float limit;
sta->maxCapacitanceCheck(pin, capacitance, slack, limit);
return sta->units()->capacitanceUnit()->staToUser(limit);
} }
void void