enable max_fanout, max_cap checks

This commit is contained in:
James Cherry 2020-06-02 18:11:50 -07:00
parent 1aadb2d895
commit 6bdf3fcfed
4 changed files with 19 additions and 19 deletions

View File

@ -263,7 +263,7 @@ CheckCapacitanceLimits::pinMinCapacitanceLimitSlack(const Corner *corner,
{
init(min_max);
const Network *network = sta_->network();
Pin *min_slack_pin = 0;
Pin *min_slack_pin = nullptr;
float min_slack = MinMax::min()->initValue();
LeafInstanceIterator *inst_iter = network->leafInstanceIterator();
while (inst_iter->hasNext()) {
@ -294,7 +294,8 @@ CheckCapacitanceLimits::pinMinCapacitanceLimitSlack(Instance *inst,
float capacitance, limit, slack;
checkCapacitance(pin, corner, min_max, corner1, rf, capacitance, limit, slack);
if (rf
&& (min_slack_pin == 0
&& !fuzzyInf(slack)
&& (min_slack_pin == nullptr
|| slack < min_slack)) {
min_slack_pin = pin;
min_slack = slack;

View File

@ -100,10 +100,9 @@ CheckFanoutLimits::checkFanout(const Pin *pin,
float limit1;
bool limit1_exists;
findLimit(pin, min_max, limit1, limit1_exists);
if (limit1_exists) {
if (limit1_exists)
checkFanout(pin, min_max, limit1,
fanout, slack, limit);
}
}
void
@ -133,6 +132,7 @@ CheckFanoutLimits::findLimit(const Pin *pin,
if (port) {
port->fanoutLimit(min_max, limit, exists);
if (!exists
&& min_max == MinMax::max()
&& port->direction()->isAnyOutput())
port->libertyLibrary()->defaultMaxFanout(limit, exists);
}
@ -220,7 +220,7 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(const MinMax *min_max)
{
init(min_max);
const Network *network = sta_->network();
Pin *min_slack_pin = 0;
Pin *min_slack_pin = nullptr;
float min_slack = MinMax::min()->initValue();
LeafInstanceIterator *inst_iter = network->leafInstanceIterator();
while (inst_iter->hasNext()) {
@ -230,7 +230,7 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(const MinMax *min_max)
delete inst_iter;
// Check top level ports.
pinMinFanoutLimitSlack(network->topInstance(), min_max,
min_slack_pin, min_slack);
min_slack_pin, min_slack);
return min_slack_pin;
}
@ -245,13 +245,16 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(Instance *inst,
InstancePinIterator *pin_iter = network->pinIterator(inst);
while (pin_iter->hasNext()) {
Pin *pin = pin_iter->next();
float fanout;
float limit, slack;
checkFanout(pin, min_max, fanout, limit, slack);
if (min_slack_pin == 0
|| slack < min_slack) {
min_slack_pin = pin;
min_slack = slack;
if (network->direction(pin)->isAnyOutput()) {
float fanout;
float limit, slack;
checkFanout(pin, min_max, fanout, limit, slack);
if (!fuzzyInf(slack)
&& (min_slack_pin == nullptr
|| slack < min_slack)) {
min_slack_pin = pin;
min_slack = slack;
}
}
}
delete pin_iter;

View File

@ -346,7 +346,7 @@ CheckSlewLimits::pinMinSlewLimitSlack(const Corner *corner,
{
init(min_max);
const Network *network = sta_->network();
Pin *min_slack_pin = 0;
Pin *min_slack_pin = nullptr;
float min_slack = MinMax::min()->initValue();
LeafInstanceIterator *inst_iter = network->leafInstanceIterator();
while (inst_iter->hasNext()) {
@ -378,7 +378,7 @@ CheckSlewLimits::pinMinSlewLimitSlack(Instance *inst,
float limit, slack;
checkSlews(pin, corner, min_max, corner1, rf, slew, limit, slack);
if (rf
&& (min_slack_pin == 0
&& (min_slack_pin == nullptr
|| slack < min_slack)) {
min_slack_pin = pin;
min_slack = slack;

View File

@ -389,10 +389,6 @@ proc_redirect report_check_types {
set min_pulse_width 1
set min_period 1
set max_skew 1
set max_fanout 0
set min_fanout 0
set max_capacitance 0
set min_capacitance 0
} else {
parse_key_args "report_check_types" args keys {} \
flags {-max_delay -min_delay -recovery -removal \