From 7bed384fcee0c47fadaf59e176719a9126fb8f56 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 29 Jan 2024 20:48:00 -0700 Subject: [PATCH] ParallelDelayCalc Signed-off-by: James Cherry --- dcalc/ParallelDelayCalc.cc | 13 +++++-------- liberty/TableModel.cc | 12 ++++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/dcalc/ParallelDelayCalc.cc b/dcalc/ParallelDelayCalc.cc index 27522150..732a239f 100644 --- a/dcalc/ParallelDelayCalc.cc +++ b/dcalc/ParallelDelayCalc.cc @@ -69,17 +69,14 @@ ParallelDelayCalc::gateDelaysParallel(ArcDcalcArgSeq &dcalc_args, const TimingArc *arc = dcalc_arg.arc(); Slew in_slew = dcalc_arg.inSlew(); - ArcDcalcResult intrinsic_result = - arc_delay_calc_->gateDelay(drvr_pin, arc, in_slew, 0.0, nullptr, - load_pin_index_map, dcalc_ap); + ArcDcalcResult intrinsic_result = gateDelay(drvr_pin, arc, in_slew, 0.0, nullptr, + load_pin_index_map, dcalc_ap); ArcDelay intrinsic_delay = intrinsic_result.gateDelay(); intrinsic_delays[drvr_idx] = intrinsic_result.gateDelay(); - ArcDcalcResult gate_result = arc_delay_calc_->gateDelay(drvr_pin, arc, - in_slew, load_cap, - dcalc_arg.parasitic(), - load_pin_index_map, - dcalc_ap); + ArcDcalcResult gate_result = gateDelay(drvr_pin, arc, in_slew, load_cap, + dcalc_arg.parasitic(), + load_pin_index_map, dcalc_ap); ArcDelay gate_delay = gate_result.gateDelay(); Slew drvr_slew = gate_result.drvrSlew(); ArcDelay load_delay = gate_delay - intrinsic_delay; diff --git a/liberty/TableModel.cc b/liberty/TableModel.cc index 1f4bbded..46439beb 100644 --- a/liberty/TableModel.cc +++ b/liberty/TableModel.cc @@ -1794,10 +1794,14 @@ OutputWaveforms::voltageTime1(float voltage, FloatSeq *voltage_times = voltage_times_[wave_index]; float volt_step = vdd_ / voltage_waveform_step_count_; size_t volt_idx = voltage / volt_step; - float time0 = (*voltage_times)[volt_idx]; - float time1 = (*voltage_times)[volt_idx + 1]; - float time = time0 + (time1 - time0) * (voltage - volt_step * volt_idx); - return time; + if (volt_idx >= voltage_times->size() - 1) + return (*voltage_times)[voltage_times->size() - 1]; + else { + float time0 = (*voltage_times)[volt_idx]; + float time1 = (*voltage_times)[volt_idx + 1]; + float time = time0 + (time1 - time0) * (voltage - volt_step * volt_idx); + return time; + } } void