Sta::findSlewLimit
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
de3759b451
commit
4ac0829438
|
|
@ -631,6 +631,12 @@ public:
|
||||||
Slew &slew,
|
Slew &slew,
|
||||||
float &slack,
|
float &slack,
|
||||||
float &limit);
|
float &limit);
|
||||||
|
void findSlewLimit(const Pin *pin,
|
||||||
|
const Corner *corner,
|
||||||
|
const MinMax *min_max,
|
||||||
|
// Return values.
|
||||||
|
float &limit,
|
||||||
|
bool &exists);
|
||||||
|
|
||||||
void checkFanoutLimitPreamble();
|
void checkFanoutLimitPreamble();
|
||||||
// Return pins with the min/max fanout limit slack.
|
// Return pins with the min/max fanout limit slack.
|
||||||
|
|
|
||||||
|
|
@ -155,10 +155,10 @@ CheckSlewLimits::checkSlews1(Vertex *vertex,
|
||||||
&& !sta_->clkNetwork()->isIdealClock(pin)) {
|
&& !sta_->clkNetwork()->isIdealClock(pin)) {
|
||||||
for (auto rf : RiseFall::range()) {
|
for (auto rf : RiseFall::range()) {
|
||||||
float limit;
|
float limit;
|
||||||
bool limit_exists;
|
bool exists;
|
||||||
findLimit(pin, vertex, corner, rf, min_max, check_clks,
|
findLimit(pin, vertex, corner, rf, min_max, check_clks,
|
||||||
limit, limit_exists);
|
limit, exists);
|
||||||
if (limit_exists) {
|
if (exists) {
|
||||||
checkSlew(vertex, corner, rf, min_max, limit,
|
checkSlew(vertex, corner, rf, min_max, limit,
|
||||||
corner1, rf1, slew1, slack1, limit1);
|
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
|
void
|
||||||
CheckSlewLimits::findLimit(const Pin *pin,
|
CheckSlewLimits::findLimit(const Pin *pin,
|
||||||
const Vertex *vertex,
|
const Vertex *vertex,
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,12 @@ public:
|
||||||
bool violators,
|
bool violators,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
const MinMax *min_max);
|
const MinMax *min_max);
|
||||||
|
void findLimit(const Pin *pin,
|
||||||
|
const Corner *corner,
|
||||||
|
const MinMax *min_max,
|
||||||
|
// Return values.
|
||||||
|
float &limit,
|
||||||
|
bool &exists) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void checkSlews1(const Pin *pin,
|
void checkSlews1(const Pin *pin,
|
||||||
|
|
|
||||||
|
|
@ -5211,6 +5211,19 @@ Sta::maxSlewCheck(// Return values.
|
||||||
delete pins;
|
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
|
void
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue