From df65a4ca402cf6ca343be6e1b9da815db7a0a508 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 14 Jun 2020 18:09:51 -0700 Subject: [PATCH] report -max_cap do not report constant nets --- search/CheckCapacitanceLimits.cc | 29 ++++++++++++++++++----------- search/CheckFanoutLimits.cc | 6 +++--- search/Sta.cc | 2 ++ 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/search/CheckCapacitanceLimits.cc b/search/CheckCapacitanceLimits.cc index fe09ff0d..9a3c335f 100644 --- a/search/CheckCapacitanceLimits.cc +++ b/search/CheckCapacitanceLimits.cc @@ -25,6 +25,7 @@ #include "StaState.hh" #include "Corner.hh" #include "PortDirection.hh" +#include "Sim.hh" namespace sta { @@ -244,10 +245,12 @@ CheckCapacitanceLimits::pinCapacitanceLimitViolations(Instance *inst, PinSeq *violators) { const Network *network = sta_->network(); + const Sim *sim = sta_->sim(); InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - if (network->direction(pin)->isAnyOutput()) { + if (network->direction(pin)->isAnyOutput() + && !sim->logicZeroOne(pin)) { const Corner *corner1; const RiseFall *rf; float capacitance, limit, slack; @@ -287,19 +290,23 @@ CheckCapacitanceLimits::pinMinCapacitanceLimitSlack(Instance *inst, float &min_slack) { const Network *network = sta_->network(); + const Sim *sim = sta_->sim(); InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - const Corner *corner1; - const RiseFall *rf; - float capacitance, limit, slack; - checkCapacitance(pin, corner, min_max, corner1, rf, capacitance, limit, slack); - if (rf - && !fuzzyInf(slack) - && (min_slack_pin == nullptr - || slack < min_slack)) { - min_slack_pin = pin; - min_slack = slack; + if (network->direction(pin)->isAnyOutput() + && !sim->logicZeroOne(pin)) { + const Corner *corner1; + const RiseFall *rf; + float capacitance, limit, slack; + checkCapacitance(pin, corner, min_max, corner1, rf, capacitance, limit, slack); + if (rf + && !fuzzyInf(slack) + && (min_slack_pin == nullptr + || slack < min_slack)) { + min_slack_pin = pin; + min_slack = slack; + } } } delete pin_iter; diff --git a/search/CheckFanoutLimits.cc b/search/CheckFanoutLimits.cc index 96571697..b62e7aa3 100644 --- a/search/CheckFanoutLimits.cc +++ b/search/CheckFanoutLimits.cc @@ -220,10 +220,12 @@ CheckFanoutLimits::pinFanoutLimitViolations(Instance *inst, PinSeq *violators) { const Network *network = sta_->network(); + const Sim *sim = sta_->sim(); InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - if (network->direction(pin)->isAnyOutput()) { + if (network->direction(pin)->isAnyOutput() + && !sim->logicZeroOne(pin)) { float fanout; float limit, slack; checkFanout(pin, min_max, fanout, limit, slack ); @@ -264,8 +266,6 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(Instance *inst, InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - if (stringEq(network->pathName(pin),"rdrv/Q")) - printf("luse\n"); if (network->direction(pin)->isAnyOutput() && !sim->logicZeroOne(pin)) { float fanout; diff --git a/search/Sta.cc b/search/Sta.cc index 44c8f313..984891be 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -4974,6 +4974,8 @@ Sta::checkCapacitanceLimitPreamble() { if (check_capacitance_limits_ == nullptr) makeCheckCapacitanceLimits(); + // Sim values required to suppress reporting constant nets. + ensureLevelized(); } Pin *