Sta::findSlewLimit

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2022-04-13 19:11:49 -07:00
parent de3759b451
commit 4ac0829438
4 changed files with 47 additions and 4 deletions

View File

@ -631,6 +631,12 @@ public:
Slew &slew,
float &slack,
float &limit);
void findSlewLimit(const Pin *pin,
const Corner *corner,
const MinMax *min_max,
// Return values.
float &limit,
bool &exists);
void checkFanoutLimitPreamble();
// Return pins with the min/max fanout limit slack.

View File

@ -155,10 +155,10 @@ CheckSlewLimits::checkSlews1(Vertex *vertex,
&& !sta_->clkNetwork()->isIdealClock(pin)) {
for (auto rf : RiseFall::range()) {
float limit;
bool limit_exists;
bool exists;
findLimit(pin, vertex, corner, rf, min_max, check_clks,
limit, limit_exists);
if (limit_exists) {
limit, exists);
if (exists) {
checkSlew(vertex, corner, rf, min_max, limit,
corner1, rf1, slew1, slack1, limit1);
}
@ -166,7 +166,25 @@ CheckSlewLimits::checkSlews1(Vertex *vertex,
}
}
// return the tightest limit.
void
CheckSlewLimits::findLimit(const Pin *pin,
const Corner *corner,
const MinMax *min_max,
// Return values.
float &limit,
bool &exists) const
{
limit = INF;
exists = false;
for (auto rf : RiseFall::range()) {
float limit;
bool exists;
findLimit(pin, nullptr, corner, rf, min_max, false,
limit, exists);
}
}
// Return the tightest limit.
void
CheckSlewLimits::findLimit(const Pin *pin,
const Vertex *vertex,

View File

@ -52,6 +52,12 @@ public:
bool violators,
const Corner *corner,
const MinMax *min_max);
void findLimit(const Pin *pin,
const Corner *corner,
const MinMax *min_max,
// Return values.
float &limit,
bool &exists) const;
protected:
void checkSlews1(const Pin *pin,

View File

@ -5211,6 +5211,19 @@ Sta::maxSlewCheck(// Return values.
delete pins;
}
void
Sta::findSlewLimit(const Pin *pin,
const Corner *corner,
const MinMax *min_max,
// Return values.
float &limit,
bool &exists)
{
checkSlewLimitPreamble();
check_slew_limits_->findLimit(pin, corner, min_max,
limit, exists);
}
////////////////////////////////////////////////////////////////'
void