ParallelDelayCalc

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2024-01-29 20:48:00 -07:00
parent 0d8ffda061
commit 7bed384fce
2 changed files with 13 additions and 12 deletions

View File

@ -69,17 +69,14 @@ ParallelDelayCalc::gateDelaysParallel(ArcDcalcArgSeq &dcalc_args,
const TimingArc *arc = dcalc_arg.arc(); const TimingArc *arc = dcalc_arg.arc();
Slew in_slew = dcalc_arg.inSlew(); Slew in_slew = dcalc_arg.inSlew();
ArcDcalcResult intrinsic_result = ArcDcalcResult intrinsic_result = gateDelay(drvr_pin, arc, in_slew, 0.0, nullptr,
arc_delay_calc_->gateDelay(drvr_pin, arc, in_slew, 0.0, nullptr, load_pin_index_map, dcalc_ap);
load_pin_index_map, dcalc_ap);
ArcDelay intrinsic_delay = intrinsic_result.gateDelay(); ArcDelay intrinsic_delay = intrinsic_result.gateDelay();
intrinsic_delays[drvr_idx] = intrinsic_result.gateDelay(); intrinsic_delays[drvr_idx] = intrinsic_result.gateDelay();
ArcDcalcResult gate_result = arc_delay_calc_->gateDelay(drvr_pin, arc, ArcDcalcResult gate_result = gateDelay(drvr_pin, arc, in_slew, load_cap,
in_slew, load_cap, dcalc_arg.parasitic(),
dcalc_arg.parasitic(), load_pin_index_map, dcalc_ap);
load_pin_index_map,
dcalc_ap);
ArcDelay gate_delay = gate_result.gateDelay(); ArcDelay gate_delay = gate_result.gateDelay();
Slew drvr_slew = gate_result.drvrSlew(); Slew drvr_slew = gate_result.drvrSlew();
ArcDelay load_delay = gate_delay - intrinsic_delay; ArcDelay load_delay = gate_delay - intrinsic_delay;

View File

@ -1794,10 +1794,14 @@ OutputWaveforms::voltageTime1(float voltage,
FloatSeq *voltage_times = voltage_times_[wave_index]; FloatSeq *voltage_times = voltage_times_[wave_index];
float volt_step = vdd_ / voltage_waveform_step_count_; float volt_step = vdd_ / voltage_waveform_step_count_;
size_t volt_idx = voltage / volt_step; size_t volt_idx = voltage / volt_step;
float time0 = (*voltage_times)[volt_idx]; if (volt_idx >= voltage_times->size() - 1)
float time1 = (*voltage_times)[volt_idx + 1]; return (*voltage_times)[voltage_times->size() - 1];
float time = time0 + (time1 - time0) * (voltage - volt_step * volt_idx); else {
return time; 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 void