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

View File

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

View File

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

View File

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