TimingModel shared_ptr issues

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-12-13 14:41:59 -07:00
parent 163d776afa
commit bfe0696ada
6 changed files with 41 additions and 32 deletions

View File

@ -179,7 +179,7 @@ public:
float wire_delay) const;
// Check for supported axis variables.
// Return true if axes are supported.
static bool checkSlewDegradationAxes(TablePtr table);
static bool checkSlewDegradationAxes(const TablePtr &table);
float defaultInputPinCap() const { return default_input_pin_cap_; }
void setDefaultInputPinCap(float cap);
@ -788,7 +788,7 @@ public:
void setRelatedGroundPin(const char *related_ground_pin);
const char *relatedPowerPin() const { return related_power_pin_; }
void setRelatedPowerPin(const char *related_power_pin);
ReceiverModelPtr receiverModel() const { return receiver_model_; }
const ReceiverModel *receiverModel() const { return receiver_model_.get(); }
void setReceiverModel(ReceiverModelPtr receiver_model);
DriverWaveform *driverWaveform(const RiseFall *rf) const;
void setDriverWaveform(DriverWaveform *driver_waveform,
@ -1017,11 +1017,14 @@ public:
~TableTemplate();
const char *name() const { return name_; }
void setName(const char *name);
TableAxisPtr axis1() const { return axis1_; }
const TableAxis *axis1() const { return axis1_.get(); }
TableAxisPtr axis1ptr() const { return axis1_; }
void setAxis1(TableAxisPtr axis);
TableAxisPtr axis2() const { return axis2_; }
const TableAxis *axis2() const { return axis2_.get(); }
TableAxisPtr axis2ptr() const { return axis2_; }
void setAxis2(TableAxisPtr axis);
TableAxisPtr axis3() const { return axis3_; }
const TableAxis *axis3() const { return axis3_.get(); }
TableAxisPtr axis3ptr() const { return axis3_; }
void setAxis3(TableAxisPtr axis);
protected:
@ -1065,9 +1068,9 @@ public:
OcvDerate(const char *name);
~OcvDerate();
const char *name() const { return name_; }
TablePtr derateTable(const RiseFall *rf,
const EarlyLate *early_late,
PathType path_type);
const Table *derateTable(const RiseFall *rf,
const EarlyLate *early_late,
PathType path_type);
void setDerateTable(const RiseFall *rf,
const EarlyLate *early_late,
PathType path_type,

View File

@ -77,11 +77,11 @@ public:
const TableModel *delayModel() const { return delay_model_; }
const TableModel *slewModel() const { return slew_model_; }
ReceiverModelPtr receiverModel() const { return receiver_model_; }
const ReceiverModel *receiverModel() const { return receiver_model_.get(); }
OutputWaveforms *outputWaveforms() const { return output_waveforms_; }
// Check the axes before making the model.
// Return true if the model axes are supported.
static bool checkAxes(const TablePtr table);
static bool checkAxes(const TablePtr &table);
protected:
void maxCapSlew(float in_slew,
@ -317,6 +317,7 @@ public:
Table1 &operator= (Table1 &&table);
int order() const override { return 1; }
const TableAxis *axis1() const override { return axis1_.get(); }
const TableAxisPtr axis1ptr() const { return axis1_; }
float value(size_t axis_index1,
size_t axis_index2,
size_t axis_index3) const override;
@ -486,8 +487,8 @@ public:
Table1 *ref_times);
~OutputWaveforms();
const RiseFall *rf() const { return rf_; }
TableAxisPtr slewAxis() const { return slew_axis_; }
TableAxisPtr capAxis() const { return cap_axis_; }
const TableAxis *slewAxis() const { return slew_axis_.get(); }
const TableAxis *capAxis() const { return cap_axis_.get(); }
Table1 voltageWaveform(float in_slew,
float load_cap);
float voltageTime(float in_slew,
@ -503,7 +504,7 @@ public:
float volt);
float referenceTime(float slew);
void setVdd(float vdd);
static bool checkAxes(TableTemplate *tbl_template);
static bool checkAxes(const TableTemplate *tbl_template);
private:
float voltageTime1(float voltage,

View File

@ -391,7 +391,7 @@ LibertyLibrary::degradeWireSlew(const TableModel *model,
// Check for supported axis variables.
// Return true if axes are supported.
bool
LibertyLibrary::checkSlewDegradationAxes(TablePtr table)
LibertyLibrary::checkSlewDegradationAxes(const TablePtr &table)
{
switch (table->order()) {
case 0:
@ -3064,12 +3064,12 @@ OcvDerate::~OcvDerate()
stringDelete(name_);
}
TablePtr
const Table *
OcvDerate::derateTable(const RiseFall *rf,
const EarlyLate *early_late,
PathType path_type)
{
return derate_[rf->index()][early_late->index()][int(path_type)];
return derate_[rf->index()][early_late->index()][int(path_type)].get();
}
void

View File

@ -4217,13 +4217,15 @@ LibertyReader::beginTable(LibertyGroup *group,
if (library_ && template_name) {
tbl_template_ = library_->findTableTemplate(template_name, type);
if (tbl_template_) {
axis_[0] = tbl_template_->axis1();
axis_[1] = tbl_template_->axis2();
axis_[2] = tbl_template_->axis3();
axis_[0] = tbl_template_->axis1ptr();
axis_[1] = tbl_template_->axis2ptr();
axis_[2] = tbl_template_->axis3ptr();
}
else {
libWarn(122, group, "table template %s not found.", template_name);
axis_[0] = axis_[1] = axis_[2] = nullptr;
axis_[0] = nullptr;
axis_[1] = nullptr;
axis_[2] = nullptr;
}
clearAxisValues();
table_ = nullptr;
@ -4236,6 +4238,9 @@ LibertyReader::endTable()
{
table_ = nullptr;
tbl_template_ = nullptr;
axis_[0] = nullptr;
axis_[1] = nullptr;
axis_[2] = nullptr;
}
void

View File

@ -46,7 +46,7 @@ protected:
void writeHeader();
void writeFooter();
void writeTableTemplates();
void writeTableTemplate(TableTemplate *tbl_template);
void writeTableTemplate(const TableTemplate *tbl_template);
void writeBusDcls();
void writeCells();
void writeCell(const LibertyCell *cell);
@ -60,7 +60,7 @@ protected:
void writeTableModel0(const TableModel *model);
void writeTableModel1(const TableModel *model);
void writeTableModel2(const TableModel *model);
void writeTableAxis(TableAxisPtr axis,
void writeTableAxis(const TableAxis *axis,
int index);
const char *asString(bool value);
@ -197,11 +197,11 @@ LibertyWriter::writeTableTemplates()
}
void
LibertyWriter::writeTableTemplate(TableTemplate *tbl_template)
LibertyWriter::writeTableTemplate(const TableTemplate *tbl_template)
{
TableAxisPtr axis1 = tbl_template->axis1();
TableAxisPtr axis2 = tbl_template->axis2();
TableAxisPtr axis3 = tbl_template->axis3();
const TableAxis *axis1 = tbl_template->axis1();
const TableAxis *axis2 = tbl_template->axis2();
const TableAxis *axis3 = tbl_template->axis3();
// skip scalar templates
if (axis1) {
fprintf(stream_, " lu_table_template(%s) {\n", tbl_template->name());
@ -224,7 +224,7 @@ LibertyWriter::writeTableTemplate(TableTemplate *tbl_template)
}
void
LibertyWriter::writeTableAxis(TableAxisPtr axis,
LibertyWriter::writeTableAxis(const TableAxis *axis,
int index)
{
fprintf(stream_, " index_%d (\"", index);

View File

@ -318,7 +318,7 @@ GateTableModel::axisValue(const TableAxis *axis,
}
bool
GateTableModel::checkAxes(const TablePtr table)
GateTableModel::checkAxes(const TablePtr &table)
{
const TableAxis *axis1 = table->axis1();
const TableAxis *axis2 = table->axis2();
@ -1606,11 +1606,11 @@ OutputWaveforms::~OutputWaveforms()
}
bool
OutputWaveforms::checkAxes(TableTemplate *tbl_template)
OutputWaveforms::checkAxes(const TableTemplate *tbl_template)
{
TableAxisPtr axis1 = tbl_template->axis1();
TableAxisPtr axis2 = tbl_template->axis2();
TableAxisPtr axis3 = tbl_template->axis3();
const TableAxis *axis1 = tbl_template->axis1();
const TableAxis *axis2 = tbl_template->axis2();
const TableAxis *axis3 = tbl_template->axis3();
return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
&& axis2->variable() == TableAxisVariable::time
&& axis3 == nullptr)