SSTA compile errors

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-03-26 07:21:16 -07:00
parent 94a93bd4ae
commit 20455b5c6b
4 changed files with 11 additions and 8 deletions

View File

@ -506,7 +506,7 @@ target_include_directories(OpenSTA
)
# common to gcc/clang
set(CXX_FLAGS -Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security)
set(CXX_FLAGS -Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security -Wp)
target_compile_options(OpenSTA
PRIVATE

View File

@ -165,7 +165,7 @@ LumpedCapDelayCalc::gateDelay(const LibertyCell *drvr_cell,
Slew drvr_slew1;
float in_slew1 = delayAsFloat(in_slew);
// NaNs cause seg faults during table lookup.
if (isnan(load_cap) || isnan(related_out_cap) || isnan(in_slew))
if (isnan(load_cap) || isnan(related_out_cap) || isnan(delayAsFloat(in_slew)))
report_->error(710, "gate delay input variable is NaN");
model->gateDelay(drvr_cell, pvt, in_slew1, load_cap, related_out_cap,
pocv_enabled_, gate_delay1, drvr_slew1);

View File

@ -558,13 +558,14 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin,
Slew in_slew = graph_->slew(gate_in_vertex,
drvr_arc->fromEdge()->asRiseFall(),
dcalc_ap->index());
float in_slew1 = delayAsFloat(in_slew);
TimingModel *drvr_model = drvr_arc->cornerArc(lib_index)->model(op_cond);
GateTableModel *drvr_gate_model = dynamic_cast<GateTableModel*>(drvr_model);
if (drvr_gate_model) {
float output_load_cap = graph_delay_calc_->loadCap(output_pin, dcalc_ap);
ArcDelay drvr_self_delay;
Slew drvr_self_slew;
drvr_gate_model->gateDelay(drvr_cell, pvt, in_slew,
drvr_gate_model->gateDelay(drvr_cell, pvt, in_slew1,
output_load_cap, 0.0, false,
drvr_self_delay, drvr_self_slew);
@ -579,12 +580,13 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin,
// get slew from driver input pin
ArcDelay gate_delay;
Slew gate_slew;
drvr_gate_model->gateDelay(drvr_cell, pvt, in_slew,
drvr_gate_model->gateDelay(drvr_cell, pvt, in_slew1,
load_cap, 0.0, false,
gate_delay, gate_slew);
// Remove the self delay driving the output pin net load cap.
load_values->push_back(delay + gate_delay - drvr_self_delay);
slew_values->push_back(gate_slew);
load_values->push_back(delayAsFloat(delay + gate_delay
- drvr_self_delay));
slew_values->push_back(delayAsFloat(gate_slew));
}
FloatSeq *axis_values = new FloatSeq(*drvr_axis_values);

View File

@ -2657,7 +2657,7 @@ Sta::endpointViolationCount(const MinMax *min_max)
{
int violations = 0;
for (Vertex *end : *search_->endpoints()) {
if (vertexSlack(end, min_max) < 0.0)
if (delayLess(vertexSlack(end, min_max), 0.0, this))
violations++;
}
return violations;
@ -2815,7 +2815,8 @@ Sta::pinArrival(const Pin *pin,
if (bidirect_vertex) {
Arrival arrival1 = vertexArrival(bidirect_vertex, rf, clk_edge_wildcard,
nullptr, min_max);
arrival = min_max->minMax(arrival, arrival1);
if (delayLess(arrival1, arrival, this))
arrival = arrival1;
}
return arrival;
}