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