From 68bd76e1a822e8d6d4905f8d91cac6faff190eb0 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 14 Jun 2020 21:23:26 -0700 Subject: [PATCH] report max_fanout, max_cap do not report disabled pins --- search/CheckCapacitanceLimits.cc | 17 +++++++++++++---- search/CheckCapacitanceLimits.hh | 1 + search/CheckFanoutLimits.cc | 18 +++++++++++++----- search/CheckFanoutLimits.hh | 1 + 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/search/CheckCapacitanceLimits.cc b/search/CheckCapacitanceLimits.cc index 9a3c335f..c4d2c021 100644 --- a/search/CheckCapacitanceLimits.cc +++ b/search/CheckCapacitanceLimits.cc @@ -249,8 +249,7 @@ CheckCapacitanceLimits::pinCapacitanceLimitViolations(Instance *inst, InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - if (network->direction(pin)->isAnyOutput() - && !sim->logicZeroOne(pin)) { + if (checkPin(pin)) { const Corner *corner1; const RiseFall *rf; float capacitance, limit, slack; @@ -294,8 +293,7 @@ CheckCapacitanceLimits::pinMinCapacitanceLimitSlack(Instance *inst, InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - if (network->direction(pin)->isAnyOutput() - && !sim->logicZeroOne(pin)) { + if (checkPin(pin)) { const Corner *corner1; const RiseFall *rf; float capacitance, limit, slack; @@ -312,4 +310,15 @@ CheckCapacitanceLimits::pinMinCapacitanceLimitSlack(Instance *inst, delete pin_iter; } +bool +CheckCapacitanceLimits::checkPin(const Pin *pin) +{ + const Network *network = sta_->network(); + const Sim *sim = sta_->sim(); + const Sdc *sdc = sta_->sdc(); + return network->direction(pin)->isAnyOutput() + && !sim->logicZeroOne(pin) + && !sdc->isDisabled(pin); +} + } // namespace diff --git a/search/CheckCapacitanceLimits.hh b/search/CheckCapacitanceLimits.hh index cabbd3d4..39e03789 100644 --- a/search/CheckCapacitanceLimits.hh +++ b/search/CheckCapacitanceLimits.hh @@ -84,6 +84,7 @@ protected: // Return values. Pin *&min_slack_pin, float &min_slack); + bool checkPin(const Pin *pin); const StaState *sta_; }; diff --git a/search/CheckFanoutLimits.cc b/search/CheckFanoutLimits.cc index b62e7aa3..4ca89ca8 100644 --- a/search/CheckFanoutLimits.cc +++ b/search/CheckFanoutLimits.cc @@ -224,8 +224,7 @@ CheckFanoutLimits::pinFanoutLimitViolations(Instance *inst, InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); - if (network->direction(pin)->isAnyOutput() - && !sim->logicZeroOne(pin)) { + if (checkPin(pin)) { float fanout; float limit, slack; checkFanout(pin, min_max, fanout, limit, slack ); @@ -262,12 +261,10 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(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(); - if (network->direction(pin)->isAnyOutput() - && !sim->logicZeroOne(pin)) { + if (checkPin(pin)) { float fanout; float limit, slack; checkFanout(pin, min_max, fanout, limit, slack); @@ -282,4 +279,15 @@ CheckFanoutLimits::pinMinFanoutLimitSlack(Instance *inst, delete pin_iter; } +bool +CheckFanoutLimits::checkPin(const Pin *pin) +{ + const Network *network = sta_->network(); + const Sim *sim = sta_->sim(); + const Sdc *sdc = sta_->sdc(); + return network->direction(pin)->isAnyOutput() + && !sim->logicZeroOne(pin) + && !sdc->isDisabled(pin); +} + } // namespace diff --git a/search/CheckFanoutLimits.hh b/search/CheckFanoutLimits.hh index 7baacae0..280cb9b8 100644 --- a/search/CheckFanoutLimits.hh +++ b/search/CheckFanoutLimits.hh @@ -59,6 +59,7 @@ protected: Pin *&min_slack_pin, float &min_slack); float fanoutLoad(const Pin *pin) const; + bool checkPin(const Pin *pin); const StaState *sta_; };