Skip to content

Commit b1adc4b

Browse files
rsz: use function to access slew_rc_factor, cleanup clang-tidy warnings
1 parent 35398eb commit b1adc4b

2 files changed

Lines changed: 18 additions & 20 deletions

File tree

src/rsz/src/RepairDesign.cc

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,9 +1403,8 @@ void RepairDesign::repairNetVia(const BufferedNetPtr& bnet,
14031403
bnet->setCapacitance(bnet->ref()->cap());
14041404
bnet->setFanout(bnet->ref()->fanout());
14051405
float r_via = bnet->viaResistance(corner_, resizer_, estimate_parasitics_);
1406-
assert(slew_rc_factor_.has_value());
14071406
bnet->setMaxLoadSlew(bnet->ref()->maxLoadSlew()
1408-
- (r_via * bnet->ref()->cap() * (*slew_rc_factor_)));
1407+
- (r_via * bnet->ref()->cap() * getSlewRCFactor()));
14091408
}
14101409

14111410
void RepairDesign::repairNetWire(
@@ -1465,10 +1464,9 @@ void RepairDesign::repairNetWire(
14651464
double r_wire = length1 * wire_res;
14661465
double c_wire = length1 * wire_cap;
14671466

1468-
assert(slew_rc_factor_.has_value());
14691467
double load_slew
14701468
= (r_drvr * (c_wire + ref_cap) + r_wire * ref_cap + r_wire * c_wire / 2)
1471-
* (*slew_rc_factor_);
1469+
* getSlewRCFactor();
14721470

14731471
debugPrint(logger_,
14741472
RSZ,
@@ -1491,9 +1489,8 @@ void RepairDesign::repairNetWire(
14911489

14921490
bnet->setCapacitance(load_cap);
14931491
bnet->setFanout(bnet->ref()->fanout());
1494-
bnet->setMaxLoadSlew(
1495-
bnet->ref()->maxLoadSlew()
1496-
- (r_wire * (c_wire / 2 + ref_cap) * (*slew_rc_factor_)));
1492+
bnet->setMaxLoadSlew(bnet->ref()->maxLoadSlew()
1493+
- (r_wire * (c_wire / 2 + ref_cap) * getSlewRCFactor()));
14971494

14981495
//============================================================================
14991496
// Back up from pt to from_pt adding repeaters as necessary for
@@ -1566,8 +1563,8 @@ void RepairDesign::repairNetWire(
15661563
// We solve a quadratic eq. to find the maximum conforming length.
15671564
float a = wire_res * wire_cap / 2;
15681565
float b = (r_drvr * wire_cap) + (wire_res * ref_cap);
1569-
float c = (r_drvr * ref_cap)
1570-
- (max_load_slew_margined / (*slew_rc_factor_));
1566+
float c
1567+
= (r_drvr * ref_cap) - (max_load_slew_margined / getSlewRCFactor());
15711568
float l = 0.0;
15721569
if (a > 1e-12) { // Quadratic case
15731570
const float discriminant = b * b - 4 * a * c;
@@ -1644,15 +1641,15 @@ void RepairDesign::repairNetWire(
16441641
c_wire = length1 * wire_cap;
16451642
load_slew = (r_drvr * (c_wire + ref_cap) + r_wire * ref_cap
16461643
+ r_wire * c_wire / 2)
1647-
* (*slew_rc_factor_);
1644+
* getSlewRCFactor();
16481645
buffer_cell = resizer_->findTargetCell(
16491646
resizer_->buffer_lowest_drive_, load_cap, false);
16501647

16511648
bnet->setCapacitance(load_cap);
16521649
bnet->setFanout(repeater_fanout);
16531650
bnet->setMaxLoadSlew(
16541651
max_load_slew
1655-
- (r_wire * (c_wire / 2 + ref_cap) * (*slew_rc_factor_)));
1652+
- (r_wire * (c_wire / 2 + ref_cap) * getSlewRCFactor()));
16561653

16571654
debugPrint(logger_,
16581655
RSZ,
@@ -1680,8 +1677,9 @@ void RepairDesign::clearDriverCellsCache()
16801677
}
16811678

16821679
// Returns swappable drivers sorted by drive resistance (low to high)
1683-
sta::LibertyCellSeq RepairDesign::getDriverCells(sta::LibertyCell* driver_cell,
1684-
std::string driver_port_name)
1680+
sta::LibertyCellSeq RepairDesign::getDriverCells(
1681+
sta::LibertyCell* driver_cell,
1682+
const std::string& driver_port_name)
16851683
{
16861684
if (driver_cells_cache_.find(driver_cell) != driver_cells_cache_.end()) {
16871685
if (driver_cells_cache_[driver_cell].find(driver_port_name)
@@ -1774,11 +1772,10 @@ bool RepairDesign::tryUpsizeDriver(const int level,
17741772
candidate_cell->name(),
17751773
units_->resistanceUnit()->asString(candidate_r_drvr, 3));
17761774

1777-
assert(slew_rc_factor_.has_value());
17781775
const double candidate_load_slew
17791776
= (candidate_r_drvr * (c_wire + ref_cap) + r_wire * ref_cap
17801777
+ r_wire * c_wire / 2)
1781-
* (*slew_rc_factor_);
1778+
* getSlewRCFactor();
17821779

17831780
// Check that we do not violate the max output slew of the driver.
17841781
float candidate_max_output_slew = sta::INF;
@@ -1911,8 +1908,7 @@ void RepairDesign::repairNetJunc(
19111908

19121909
// Calculate estimated slew based on RC
19131910
float r_drvr = resizer_->driveResistance(drvr_pin_);
1914-
assert(slew_rc_factor_.has_value());
1915-
float load_slew = r_drvr * load_cap * (*slew_rc_factor_);
1911+
float load_slew = r_drvr * load_cap * getSlewRCFactor();
19161912
bool load_slew_violation = load_slew > max_load_slew_margined;
19171913

19181914
const char* repeater_reason = nullptr;
@@ -1927,9 +1923,9 @@ void RepairDesign::repairNetJunc(
19271923
level,
19281924
delayAsString(load_slew, 3, this),
19291925
delayAsString(max_load_slew_margined, 3, this));
1930-
double slew_left = r_drvr * cap_left * (*slew_rc_factor_);
1926+
double slew_left = r_drvr * cap_left * getSlewRCFactor();
19311927
double slew_slack_left = maxSlewMargined(max_load_slew_left) - slew_left;
1932-
double slew_right = r_drvr * cap_right * (*slew_rc_factor_);
1928+
double slew_right = r_drvr * cap_right * getSlewRCFactor();
19331929
double slew_slack_right = maxSlewMargined(max_load_slew_right) - slew_right;
19341930
debugPrint(logger_,
19351931
RSZ,

src/rsz/src/RepairDesign.hh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include <memory>
77
#include <optional>
8+
#include <string>
9+
#include <unordered_map>
810
#include <vector>
911

1012
#include "BufferedNet.hh"
@@ -176,7 +178,7 @@ class RepairDesign : sta::dbStaState
176178
sta::PinSeq& load_pins);
177179
void clearDriverCellsCache();
178180
sta::LibertyCellSeq getDriverCells(sta::LibertyCell* driver_cell,
179-
std::string driver_port_name);
181+
const std::string& driver_port_name);
180182
bool tryUpsizeDriver(int level,
181183
double ref_cap,
182184
double c_wire,

0 commit comments

Comments
 (0)