From d7d40a6f2241be0c51de521065f82f82156d7989 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 14 Apr 2022 11:19:18 -0700 Subject: [PATCH] Sta::findSlewLimit Signed-off-by: James Cherry --- sdc/Sdc.cc | 7 ++++--- search/CheckSlewLimits.cc | 11 ++++++++--- search/Sta.cc | 3 ++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/sdc/Sdc.cc b/sdc/Sdc.cc index c509a168..4c291fde 100644 --- a/sdc/Sdc.cc +++ b/sdc/Sdc.cc @@ -779,7 +779,8 @@ Sdc::haveClkSlewLimits() const } void -Sdc::slewLimit(Clock *clk, const RiseFall *rf, +Sdc::slewLimit(Clock *clk, + const RiseFall *rf, const PathClkOrData clk_data, const MinMax *min_max, float &slew, @@ -794,7 +795,7 @@ Sdc::slewLimit(Port *port, float &slew, bool &exists) { - slew = 0.0; + slew = INF; MinMaxFloatValues values; port_slew_limit_map_.findKey(port, values, exists); if (exists) @@ -816,7 +817,7 @@ Sdc::slewLimit(Cell *cell, float &slew, bool &exists) { - slew = 0.0; + slew = INF; MinMaxFloatValues values; cell_slew_limit_map_.findKey(cell, values, exists); if (exists) diff --git a/search/CheckSlewLimits.cc b/search/CheckSlewLimits.cc index abb2d842..f4aa76b6 100644 --- a/search/CheckSlewLimits.cc +++ b/search/CheckSlewLimits.cc @@ -255,18 +255,23 @@ CheckSlewLimits::findLimit(const LibertyPort *port, const Network *network = sta_->network(); Sdc *sdc = sta_->sdc(); + float limit1; + bool exists1; // Default to top ("design") limit. Cell *top_cell = network->cell(network->topInstance()); sdc->slewLimit(top_cell, min_max, - limit, exists); + limit1, exists1); + if (exists1) { + limit = limit1; + exists = true; + } if (port) { const LibertyPort *corner_port = port->cornerPort(corner->libertyIndex(min_max)); - float limit1; - bool exists1; corner_port->slewLimit(min_max, limit1, exists1); if (!exists1 + // default_max_transition only applies to outputs. && corner_port->direction()->isAnyOutput() && min_max == MinMax::max()) corner_port->libertyLibrary()->defaultMaxSlew(limit1, exists1); diff --git a/search/Sta.cc b/search/Sta.cc index a19ac039..e686a0b0 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -5219,7 +5219,8 @@ Sta::findSlewLimit(const LibertyPort *port, float &limit, bool &exists) { - checkSlewLimitPreamble(); + if (check_slew_limits_ == nullptr) + makeCheckSlewLimits(); check_slew_limits_->findLimit(port, corner, min_max, limit, exists); }