Skip to content

Commit 1d4b516

Browse files
committed
GraphDelayCalc::findInputArcDelay thread issue
Signed-off-by: James Cherry <cherry@parallaxsw.com>
1 parent 5955958 commit 1d4b516

2 files changed

Lines changed: 21 additions & 15 deletions

File tree

dcalc/GraphDelayCalc.cc

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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,7 +612,8 @@ 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
}
@@ -626,7 +629,8 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin,
626629
const TimingArc *arc,
627630
float from_slew,
628631
const Scene *scene,
629-
const MinMax *min_max)
632+
const MinMax *min_max,
633+
ArcDelayCalc *arc_delay_calc)
630634
{
631635
debugPrint(debug_, "delay_calc", 3, " {} {} -> {} {} ({})",
632636
arc->from()->name(),
@@ -640,20 +644,20 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin,
640644

641645
const Parasitic *parasitic;
642646
float load_cap;
643-
parasiticLoad(drvr_pin, drvr_rf, scene, min_max, nullptr, arc_delay_calc_,
647+
parasiticLoad(drvr_pin, drvr_rf, scene, min_max, nullptr, arc_delay_calc,
644648
load_cap, parasitic);
645649

646650
LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex);
647651
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);
652+
arc_delay_calc->gateDelay(drvr_pin, arc, Slew(from_slew), 0.0, nullptr,
653+
load_pin_index_map, scene, min_max);
650654
const ArcDelay &intrinsic_delay = intrinsic_result.gateDelay();
651655

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);
656+
ArcDcalcResult gate_result = arc_delay_calc->gateDelay(drvr_pin, arc,
657+
Slew(from_slew), load_cap,
658+
parasitic,
659+
load_pin_index_map,
660+
scene, min_max);
657661
const ArcDelay &gate_delay = gate_result.gateDelay();
658662
const Slew &gate_slew = gate_result.drvrSlew();
659663

@@ -666,7 +670,7 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin,
666670
graph_->setSlew(drvr_vertex, drvr_rf, ap_index, gate_slew);
667671
annotateLoadDelays(drvr_vertex, drvr_rf, gate_result, load_pin_index_map,
668672
load_delay, false, scene, min_max);
669-
arc_delay_calc_->finishDrvrPin();
673+
arc_delay_calc->finishDrvrPin();
670674
}
671675
}
672676

include/sta/GraphDelayCalc.hh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ protected:
174174
float *from_slews,
175175
const LibertyPort *to_port,
176176
const Scene *scene,
177-
const MinMax *min_max);
177+
const MinMax *min_max,
178+
ArcDelayCalc *arc_delay_calc);
178179
LibertyPort *driveCellDefaultFromPort(const LibertyCell *cell,
179180
const LibertyPort *to_port);
180181
int findPortIndex(const LibertyCell *cell,
@@ -184,7 +185,8 @@ protected:
184185
const TimingArc *arc,
185186
float from_slew,
186187
const Scene *scene,
187-
const MinMax *min_max);
188+
const MinMax *min_max,
189+
ArcDelayCalc *arc_delay_calc);
188190
void findDriverDelays(Vertex *drvr_vertex,
189191
ArcDelayCalc *arc_delay_calc,
190192
LoadPinIndexMap &load_pin_index_map);

0 commit comments

Comments
 (0)