@@ -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
14111410void 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 ,
0 commit comments