@@ -426,7 +426,8 @@ GraphDelayCalc::seedDrvrSlew(Vertex *drvr_vertex,
426426 if (from_port == nullptr )
427427 from_port = driveCellDefaultFromPort (drvr_cell, to_port);
428428 findInputDriverDelay (drvr_cell, drvr_pin, drvr_vertex, rf,
429- from_port, from_slews, to_port, scene, min_max);
429+ from_port, from_slews, to_port, scene, min_max,
430+ arc_delay_calc);
430431 }
431432 else
432433 seedNoDrvrCellSlew (drvr_vertex, drvr_pin, rf, drive, scene, min_max,
@@ -601,7 +602,8 @@ GraphDelayCalc::findInputDriverDelay(const LibertyCell *drvr_cell,
601602 float *from_slews,
602603 const LibertyPort *to_port,
603604 const Scene *scene,
604- const MinMax *min_max)
605+ const MinMax *min_max,
606+ ArcDelayCalc *arc_delay_calc)
605607{
606608 debugPrint (debug_, " delay_calc" , 2 , " driver cell {} {}" ,
607609 drvr_cell->name (),
@@ -610,11 +612,11 @@ GraphDelayCalc::findInputDriverDelay(const LibertyCell *drvr_cell,
610612 for (TimingArc *arc : arc_set->arcs ()) {
611613 if (arc->toEdge ()->asRiseFall () == rf) {
612614 float from_slew = from_slews[arc->fromEdge ()->index ()];
613- findInputArcDelay (drvr_pin, drvr_vertex, arc, from_slew, scene, min_max);
615+ findInputArcDelay (drvr_pin, drvr_vertex, arc, from_slew, scene, min_max,
616+ arc_delay_calc);
614617 }
615618 }
616619 }
617- arc_delay_calc_->finishDrvrPin ();
618620}
619621
620622// Driving cell delay is the load dependent delay, which is the gate
@@ -626,7 +628,8 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin,
626628 const TimingArc *arc,
627629 float from_slew,
628630 const Scene *scene,
629- const MinMax *min_max)
631+ const MinMax *min_max,
632+ ArcDelayCalc *arc_delay_calc)
630633{
631634 debugPrint (debug_, " delay_calc" , 3 , " {} {} -> {} {} ({})" ,
632635 arc->from ()->name (),
@@ -640,20 +643,20 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin,
640643
641644 const Parasitic *parasitic;
642645 float load_cap;
643- parasiticLoad (drvr_pin, drvr_rf, scene, min_max, nullptr , arc_delay_calc_ ,
646+ parasiticLoad (drvr_pin, drvr_rf, scene, min_max, nullptr , arc_delay_calc ,
644647 load_cap, parasitic);
645648
646649 LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap (drvr_vertex);
647650 ArcDcalcResult intrinsic_result =
648- arc_delay_calc_ ->gateDelay (drvr_pin, arc, Slew (from_slew), 0.0 , nullptr ,
649- load_pin_index_map, scene, min_max);
651+ arc_delay_calc ->gateDelay (drvr_pin, arc, Slew (from_slew), 0.0 , nullptr ,
652+ load_pin_index_map, scene, min_max);
650653 const ArcDelay &intrinsic_delay = intrinsic_result.gateDelay ();
651654
652- ArcDcalcResult gate_result = arc_delay_calc_ ->gateDelay (drvr_pin, arc,
653- Slew (from_slew), load_cap,
654- parasitic,
655- load_pin_index_map,
656- scene, min_max);
655+ ArcDcalcResult gate_result = arc_delay_calc ->gateDelay (drvr_pin, arc,
656+ Slew (from_slew), load_cap,
657+ parasitic,
658+ load_pin_index_map,
659+ scene, min_max);
657660 const ArcDelay &gate_delay = gate_result.gateDelay ();
658661 const Slew &gate_slew = gate_result.drvrSlew ();
659662
@@ -666,7 +669,7 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin,
666669 graph_->setSlew (drvr_vertex, drvr_rf, ap_index, gate_slew);
667670 annotateLoadDelays (drvr_vertex, drvr_rf, gate_result, load_pin_index_map,
668671 load_delay, false , scene, min_max);
669- arc_delay_calc_ ->finishDrvrPin ();
672+ arc_delay_calc ->finishDrvrPin ();
670673 }
671674}
672675
@@ -1598,41 +1601,41 @@ GraphDelayCalc::findCheckEdgeDelays(Edge *edge,
15981601 for (Scene *scene : scenes_) {
15991602 for (const MinMax *min_max : MinMax::range ()) {
16001603 DcalcAPIndex ap_index = scene->dcalcAnalysisPtIndex (min_max);
1601- if (!graph_->arcDelayAnnotated (edge, arc, ap_index)) {
1602- const Slew &from_slew = checkEdgeClkSlew (from_vertex, from_rf,
1604+ if (!graph_->arcDelayAnnotated (edge, arc, ap_index)) {
1605+ const Slew &from_slew = checkEdgeClkSlew (from_vertex, from_rf,
16031606 scene, min_max);
16041607 const Slew to_slew = graph_->slew (to_vertex, to_rf, ap_index);
1605- debugPrint (debug_, " delay_calc" , 3 ,
1608+ debugPrint (debug_, " delay_calc" , 3 ,
16061609 " {} {} -> {} {} ({}) scene:{}/{}" ,
1607- arc_set->from ()->name (),
1608- arc->fromEdge ()->to_string (),
1609- arc_set->to ()->name (),
1610- arc->toEdge ()->to_string (),
1611- arc_set->role ()->to_string (),
1610+ arc_set->from ()->name (),
1611+ arc->fromEdge ()->to_string (),
1612+ arc_set->to ()->name (),
1613+ arc->toEdge ()->to_string (),
1614+ arc_set->role ()->to_string (),
16121615 scene->name (),
16131616 min_max->to_string ());
1614- debugPrint (debug_, " delay_calc" , 3 ,
1615- " from_slew = {} to_slew = {}" ,
1616- delayAsString (from_slew, this ),
1617- delayAsString (to_slew, this ));
1618- float related_out_cap = 0.0 ;
1619- if (related_out_pin)
1617+ debugPrint (debug_, " delay_calc" , 3 ,
1618+ " from_slew = {} to_slew = {}" ,
1619+ delayAsString (from_slew, this ),
1620+ delayAsString (to_slew, this ));
1621+ float related_out_cap = 0.0 ;
1622+ if (related_out_pin)
16201623 related_out_cap = loadCap (related_out_pin, to_rf,scene,min_max,
16211624 arc_delay_calc);
1622- ArcDelay check_delay = arc_delay_calc->checkDelay (to_pin, arc, from_slew,
1623- to_slew, related_out_cap,
1625+ ArcDelay check_delay = arc_delay_calc->checkDelay (to_pin, arc, from_slew,
1626+ to_slew, related_out_cap,
16241627 scene, min_max);
1625- debugPrint (debug_, " delay_calc" , 3 ,
1626- " check_delay = {}" ,
1627- delayAsString (check_delay, this ));
1628- graph_->setArcDelay (edge, arc, ap_index, check_delay);
1629- delay_changed = true ;
1630- arc_delay_calc_->finishDrvrPin ();
1631- }
1628+ debugPrint (debug_, " delay_calc" , 3 ,
1629+ " check_delay = {}" ,
1630+ delayAsString (check_delay, this ));
1631+ graph_->setArcDelay (edge, arc, ap_index, check_delay);
1632+ delay_changed = true ;
1633+ arc_delay_calc_->finishDrvrPin ();
1634+ }
1635+ }
16321636 }
16331637 }
16341638 }
1635- }
16361639
16371640 if (delay_changed && observer_)
16381641 observer_->checkDelayChangedTo (to_vertex);
0 commit comments