liberty ccs support
commit 8f90f9e7ba1eb29621faa3efed9154501c600537
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Feb 3 09:02:22 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 0bb6b07fd965dc948a63ed383ac05893af4cbd87
Author: James Cherry <cherry@parallaxsw.com>
Date: Thu Feb 2 08:07:17 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 408a19ae7750bdd41641ac6efebec0df565987bc
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Feb 1 16:55:03 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit a193adf0efdfa9c2a3b4272609e03f9279fc3479
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Feb 1 16:37:36 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit f26f47698ccd3a43d31f031f5cb6a70f0ffe1f91
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Feb 1 10:34:41 2023 -0700
cleanup
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 54613569fcb9d714b77833d54492b4dc8121a966
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Feb 1 10:18:20 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 4e34c391abc46e9e98d78725e139d739aff7fd44
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Feb 1 09:05:43 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 7b1e5af344948d84f82621d054efa206508a5cb8
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 31 08:58:23 2023 -0700
table report
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 501a53715f27a1ada6477f29b2efdc96fbaec8be
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 31 08:33:53 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit e68cd932db03724e1344259d79bd6397cca777d2
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Jan 30 11:47:01 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 1b279d3ae1e4a8fc156ee92999eab92e6a0a50ff
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 29 13:56:05 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 43e039650373f9a9bb9e7b7cae6b48d7d2db455b
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 29 11:54:08 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 648965c2433f4e7ed87371fced85e80d0198df10
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 27 19:16:39 2023 -0700
ccs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 02ac4e3e3f3f97308ff71a2f9984aa3aacb6e7ee
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 24 09:40:22 2023 -0700
ccs liberty
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
72d63492dd
commit
ab698d2549
|
|
@ -85,7 +85,7 @@ enum class DelayModelType { cmos_linear, cmos_pwl, cmos2, table, polynomial, dcm
|
|||
enum class ScaleFactorPvt { process, volt, temp, unknown };
|
||||
constexpr int scale_factor_pvt_count = int(ScaleFactorPvt::unknown) + 1;
|
||||
|
||||
enum class TableTemplateType { delay, power, output_current, ocv };
|
||||
enum class TableTemplateType { delay, power, output_current, capacitance, ocv };
|
||||
constexpr int table_template_type_count = int(TableTemplateType::ocv) + 1;
|
||||
|
||||
enum class LevelShifterType { HL, LH, HL_LH };
|
||||
|
|
@ -778,6 +778,8 @@ 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_; }
|
||||
void setReceiverModel(ReceiverModelPtr receiver_model);
|
||||
|
||||
static bool equiv(const LibertyPort *port1,
|
||||
const LibertyPort *port2);
|
||||
|
|
@ -817,6 +819,7 @@ protected:
|
|||
const char *related_ground_pin_;
|
||||
const char *related_power_pin_;
|
||||
Vector<LibertyPort*> corner_ports_;
|
||||
ReceiverModelPtr receiver_model_;
|
||||
|
||||
unsigned int min_pulse_width_exists_:RiseFall::index_count;
|
||||
bool min_period_exists_:1;
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ class TimingRole;
|
|||
class Transition;
|
||||
class RiseFall;
|
||||
class RiseFallBoth;
|
||||
class ReceiverModel;
|
||||
|
||||
typedef Vector<LibertyLibrary*> LibertyLibrarySeq;
|
||||
typedef Vector<LibertyCell*> LibertyCellSeq;
|
||||
|
|
@ -66,11 +67,10 @@ typedef Vector<LibertyPort*> LibertyPortSeq;
|
|||
typedef Set<LibertyPort*> LibertyPortSet;
|
||||
typedef std::pair<const LibertyPort*,const LibertyPort*> LibertyPortPair;
|
||||
typedef Set<LibertyCell*> LibertyCellSet;
|
||||
typedef Vector<float> FloatSeq;
|
||||
typedef Vector<FloatSeq*> FloatTable;
|
||||
typedef std::shared_ptr<Table> TablePtr;
|
||||
typedef std::shared_ptr<TimingArcAttrs> TimingArcAttrsPtr;
|
||||
typedef std::shared_ptr<TableAxis> TableAxisPtr;
|
||||
typedef std::shared_ptr<ReceiverModel> ReceiverModelPtr;
|
||||
|
||||
enum class ScaleFactorType : unsigned {
|
||||
pin_cap,
|
||||
|
|
|
|||
|
|
@ -33,6 +33,12 @@ class Unit;
|
|||
class Units;
|
||||
class Report;
|
||||
class Table;
|
||||
class OutputCurrent;
|
||||
class OutputCurrentWaveform;
|
||||
|
||||
typedef Vector<float> FloatSeq;
|
||||
typedef Vector<FloatSeq*> FloatTable;
|
||||
typedef Vector<OutputCurrentWaveform*> OutputCurrentWaveformSeq;
|
||||
|
||||
TableAxisVariable
|
||||
stringTableAxisVariable(const char *variable);
|
||||
|
|
@ -48,7 +54,9 @@ public:
|
|||
GateTableModel(TableModel *delay_model,
|
||||
TableModel *delay_sigma_models[EarlyLate::index_count],
|
||||
TableModel *slew_model,
|
||||
TableModel *slew_sigma_models[EarlyLate::index_count]);
|
||||
TableModel *slew_sigma_models[EarlyLate::index_count],
|
||||
ReceiverModelPtr receiver_model,
|
||||
OutputCurrent *output_current);
|
||||
virtual ~GateTableModel();
|
||||
virtual void gateDelay(const LibertyCell *cell,
|
||||
const Pvt *pvt,
|
||||
|
|
@ -118,6 +126,8 @@ protected:
|
|||
TableModel *delay_sigma_models_[EarlyLate::index_count];
|
||||
TableModel *slew_model_;
|
||||
TableModel *slew_sigma_models_[EarlyLate::index_count];
|
||||
ReceiverModelPtr receiver_model_;
|
||||
OutputCurrent *output_current_;
|
||||
};
|
||||
|
||||
class CheckTableModel : public CheckTimingModel
|
||||
|
|
@ -223,7 +233,8 @@ public:
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
int digits,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const;
|
||||
void report(const Units *units,
|
||||
Report *report) const;
|
||||
|
|
@ -246,7 +257,7 @@ protected:
|
|||
bool is_scaled_:1;
|
||||
};
|
||||
|
||||
// Abstract base class for tables.
|
||||
// Abstract base class for 0, 1, 2, or 3 dimesnion float tables.
|
||||
class Table
|
||||
{
|
||||
public:
|
||||
|
|
@ -280,6 +291,7 @@ public:
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const = 0;
|
||||
virtual void report(const Units *units,
|
||||
|
|
@ -306,6 +318,7 @@ public:
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const;
|
||||
virtual void report(const Units *units,
|
||||
|
|
@ -340,6 +353,7 @@ public:
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const;
|
||||
virtual void report(const Units *units,
|
||||
|
|
@ -370,6 +384,7 @@ public:
|
|||
virtual float findValue(float value1,
|
||||
float value2,
|
||||
float value3) const;
|
||||
FloatTable *values3() { return values_; }
|
||||
virtual void reportValue(const char *result_name,
|
||||
const LibertyLibrary *library,
|
||||
const LibertyCell *cell,
|
||||
|
|
@ -378,6 +393,7 @@ public:
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const;
|
||||
virtual void report(const Units *units,
|
||||
|
|
@ -417,6 +433,7 @@ public:
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const;
|
||||
virtual void report(const Units *units,
|
||||
|
|
@ -434,10 +451,16 @@ public:
|
|||
FloatSeq *values);
|
||||
~TableAxis();
|
||||
TableAxisVariable variable() const { return variable_; }
|
||||
const char *variableString() const;
|
||||
const Unit *unit(const Units *units);
|
||||
size_t size() const { return values_->size(); }
|
||||
float axisValue(size_t index) const { return (*values_)[index]; }
|
||||
// Find the index for value such that axis[index] <= value < axis[index+1].
|
||||
size_t findAxisIndex(float value) const;
|
||||
void findAxisIndex(float value,
|
||||
// Return values.
|
||||
size_t &index,
|
||||
bool &exists) const;
|
||||
FloatSeq *values() const { return values_; }
|
||||
|
||||
private:
|
||||
|
|
@ -445,4 +468,79 @@ private:
|
|||
FloatSeq *values_;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
class ReceiverModel
|
||||
{
|
||||
public:
|
||||
ReceiverModel();
|
||||
~ReceiverModel();
|
||||
void setCapacitanceModel(TableModel *table_model,
|
||||
int index,
|
||||
RiseFall *rf);
|
||||
static bool checkAxes(TablePtr table);
|
||||
|
||||
private:
|
||||
TableModel *capacitance_models_[2][RiseFall::index_count];
|
||||
};
|
||||
|
||||
class OutputCurrentWaveform
|
||||
{
|
||||
public:
|
||||
OutputCurrentWaveform(float axis_value1,
|
||||
float axis_value2,
|
||||
TableAxisPtr axis,
|
||||
Table1 *currents,
|
||||
float reference_time);
|
||||
~OutputCurrentWaveform();
|
||||
float axisValue1() const { return axis_value1_; }
|
||||
float axisValue2() const { return axis_value2_; }
|
||||
TableAxisPtr axis() const { return axis_; }
|
||||
Table1 *currents() const { return currents_; }
|
||||
float referenceTime() const { return reference_time_; }
|
||||
void reportWaveform(const Units *units,
|
||||
int digits,
|
||||
string *result);
|
||||
static bool checkAxes(TableTemplate *tbl_template);
|
||||
|
||||
private:
|
||||
float axis_value1_;
|
||||
float axis_value2_;
|
||||
TableAxisPtr axis_;
|
||||
Table1 *currents_;
|
||||
float reference_time_;
|
||||
};
|
||||
|
||||
// Two dimensional table of one dimensional time/current tables.
|
||||
class OutputCurrent
|
||||
{
|
||||
public:
|
||||
OutputCurrent(TableAxisPtr axis1,
|
||||
TableAxisPtr axis2,
|
||||
Vector<OutputCurrentWaveform*> &waveforms);
|
||||
~OutputCurrent();
|
||||
void reportWaveform(const LibertyCell *cell,
|
||||
const Pvt *pvt,
|
||||
float in_slew,
|
||||
float load_cap,
|
||||
int digits,
|
||||
string *result) const;
|
||||
|
||||
private:
|
||||
void findAxisValues(float in_slew,
|
||||
float load_cap,
|
||||
// Return values.
|
||||
float &axis_value1,
|
||||
float &axis_value2) const;
|
||||
float axisValue(TableAxisPtr axis,
|
||||
float in_slew,
|
||||
float load_cap) const;
|
||||
|
||||
// Row.
|
||||
TableAxisPtr axis1_;
|
||||
// Column.
|
||||
TableAxisPtr axis2_;
|
||||
OutputCurrentWaveformSeq waveforms_;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ namespace sta {
|
|||
|
||||
using std::string;
|
||||
|
||||
// Abstract base class for timing models.
|
||||
// Abstract base class for GateTimingModel and CheckTimingModel.
|
||||
class TimingModel
|
||||
{
|
||||
public:
|
||||
|
|
@ -36,7 +36,7 @@ protected:
|
|||
friend class LibertyCell;
|
||||
};
|
||||
|
||||
// Abstract base class for gate timing models.
|
||||
// Abstract base class for LinearModel and TableModel.
|
||||
class GateTimingModel : public TimingModel
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include "FuncExpr.hh"
|
||||
#include "TableModel.hh"
|
||||
#include "Liberty.hh"
|
||||
#include "Units.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
|
|
@ -152,7 +153,8 @@ InternalPowerModel::reportPower(const LibertyCell *cell,
|
|||
axis_value1, axis_value2, axis_value3);
|
||||
const LibertyLibrary *library = cell->libertyLibrary();
|
||||
model_->reportValue("Power", library, cell, pvt,
|
||||
axis_value1, nullptr, axis_value2, axis_value3, digits, result);
|
||||
axis_value1, nullptr, axis_value2, axis_value3,
|
||||
library->units()->powerUnit(), digits, result);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -212,9 +214,9 @@ InternalPowerModel::axisValue(TableAxisPtr axis,
|
|||
bool
|
||||
InternalPowerModel::checkAxes(const TableModel *model)
|
||||
{
|
||||
TableAxisPtr axis1 = model->axis1();
|
||||
TableAxisPtr axis2 = model->axis2();
|
||||
TableAxisPtr axis3 = model->axis3();
|
||||
const TableAxisPtr axis1 = model->axis1();
|
||||
const TableAxisPtr axis2 = model->axis2();
|
||||
const TableAxisPtr axis3 = model->axis3();
|
||||
bool axis_ok = true;
|
||||
if (axis1)
|
||||
axis_ok &= checkAxis(model->axis1());
|
||||
|
|
|
|||
|
|
@ -1919,6 +1919,7 @@ LibertyPort::LibertyPort(LibertyCell *cell,
|
|||
pulse_clk_sense_(nullptr),
|
||||
related_ground_pin_(nullptr),
|
||||
related_power_pin_(nullptr),
|
||||
receiver_model_(nullptr),
|
||||
min_pulse_width_exists_(false),
|
||||
min_period_exists_(false),
|
||||
is_clk_(false),
|
||||
|
|
@ -2492,6 +2493,12 @@ LibertyPort::setRelatedPowerPin(const char *related_power_pin)
|
|||
related_power_pin_ = stringCopy(related_power_pin);
|
||||
}
|
||||
|
||||
void
|
||||
LibertyPort::setReceiverModel(ReceiverModelPtr receiver_model)
|
||||
{
|
||||
receiver_model_ = receiver_model;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
LibertyPortSeq
|
||||
|
|
|
|||
|
|
@ -127,6 +127,8 @@ LibertyReader::readLibertyFile(const char *filename,
|
|||
internal_power_ = nullptr;
|
||||
leakage_power_ = nullptr;
|
||||
table_ = nullptr;
|
||||
rf_ = nullptr;
|
||||
index_ = 0;
|
||||
table_model_scale_ = 1.0;
|
||||
mode_def_ = nullptr;
|
||||
mode_value_ = nullptr;
|
||||
|
|
@ -134,6 +136,7 @@ LibertyReader::readLibertyFile(const char *filename,
|
|||
pg_port_ = nullptr;
|
||||
have_resistance_unit_ = false;
|
||||
default_operating_condition_ = nullptr;
|
||||
receiver_model_ = nullptr;
|
||||
|
||||
for (auto rf_index : RiseFall::rangeIndex()) {
|
||||
have_input_threshold_[rf_index] = false;
|
||||
|
|
@ -474,6 +477,34 @@ LibertyReader::defineVisitors()
|
|||
&LibertyReader::endPgPin);
|
||||
defineAttrVisitor("pg_type", &LibertyReader::visitPgType);
|
||||
defineAttrVisitor("voltage_name", &LibertyReader::visitVoltageName);
|
||||
|
||||
// ccs receiver
|
||||
defineGroupVisitor("receiver_capacitance",
|
||||
&LibertyReader::beginReceiverCapacitance,
|
||||
&LibertyReader::endReceiverCapacitance);
|
||||
defineGroupVisitor("receiver_capacitance1_rise",
|
||||
&LibertyReader::beginReceiverCapacitance1Rise,
|
||||
&LibertyReader::endReceiverCapacitanceRiseFall);
|
||||
defineGroupVisitor("receiver_capacitance1_fall",
|
||||
&LibertyReader::beginReceiverCapacitance1Fall,
|
||||
&LibertyReader::endReceiverCapacitanceRiseFall);
|
||||
defineGroupVisitor("receiver_capacitance2_rise",
|
||||
&LibertyReader::beginReceiverCapacitance2Rise,
|
||||
&LibertyReader::endReceiverCapacitanceRiseFall);
|
||||
defineGroupVisitor("receiver_capacitance2_fall",
|
||||
&LibertyReader::beginReceiverCapacitance2Fall,
|
||||
&LibertyReader::endReceiverCapacitanceRiseFall);
|
||||
// ccs
|
||||
defineGroupVisitor("output_current_rise",
|
||||
&LibertyReader::beginOutputCurrentRise,
|
||||
&LibertyReader::endOutputCurrentRiseFall);
|
||||
defineGroupVisitor("output_current_fall",
|
||||
&LibertyReader::beginOutputCurrentFall,
|
||||
&LibertyReader::endOutputCurrentRiseFall);
|
||||
defineGroupVisitor("vector",
|
||||
&LibertyReader::beginVector,
|
||||
&LibertyReader::endVector);
|
||||
defineAttrVisitor("reference_time", &LibertyReader::visitReferenceTime);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1326,6 +1357,7 @@ LibertyReader::endTableTemplate(LibertyGroup *group)
|
|||
if (axis3)
|
||||
tbl_template_->setAxis3(axis3);
|
||||
tbl_template_ = nullptr;
|
||||
axis_var_[0] = axis_var_[1] = axis_var_[2] = TableAxisVariable::unknown;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1335,13 +1367,15 @@ LibertyReader::makeAxis(int index,
|
|||
{
|
||||
TableAxisVariable axis_var = axis_var_[index];
|
||||
FloatSeq *axis_values = axis_values_[index];
|
||||
if (axis_var != TableAxisVariable::unknown && axis_values) {
|
||||
const Units *units = library_->units();
|
||||
float scale = tableVariableUnit(axis_var, units)->scale();
|
||||
scaleFloats(axis_values, scale);
|
||||
if (axis_var != TableAxisVariable::unknown) {
|
||||
if (axis_values) {
|
||||
const Units *units = library_->units();
|
||||
float scale = tableVariableUnit(axis_var, units)->scale();
|
||||
scaleFloats(axis_values, scale);
|
||||
}
|
||||
return std::make_shared<TableAxis>(axis_var, axis_values);
|
||||
}
|
||||
else if (axis_var == TableAxisVariable::unknown && axis_values) {
|
||||
else if (axis_values) {
|
||||
libWarn(62, group, "missing variable_%d attribute.", index + 1);
|
||||
delete axis_values;
|
||||
axis_values_[index] = nullptr;
|
||||
|
|
@ -2237,16 +2271,19 @@ TimingGroup::makeLinearModels(LibertyLibrary *library)
|
|||
}
|
||||
|
||||
void
|
||||
TimingGroup::makeTableModels(LibertyReader *visitor)
|
||||
TimingGroup::makeTableModels(LibertyReader *reader)
|
||||
{
|
||||
for (auto rf : RiseFall::range()) {
|
||||
int rf_index = rf->index();
|
||||
TableModel *cell = cell_[rf_index];
|
||||
TableModel *constraint = constraint_[rf_index];
|
||||
TableModel *transition = transition_[rf_index];
|
||||
TableModel *constraint = constraint_[rf_index];
|
||||
if (cell || transition) {
|
||||
attrs_->setModel(rf, new GateTableModel(cell, delay_sigma_[rf_index],
|
||||
transition, slew_sigma_[rf_index]));
|
||||
transition,
|
||||
slew_sigma_[rf_index],
|
||||
receiver_model_,
|
||||
output_current_[rf_index]));
|
||||
TimingType timing_type = attrs_->timingType();
|
||||
if (timing_type == TimingType::clear
|
||||
|| timing_type == TimingType::combinational
|
||||
|
|
@ -2262,12 +2299,11 @@ TimingGroup::makeTableModels(LibertyReader *visitor)
|
|||
|| timing_type == TimingType::three_state_enable_fall
|
||||
|| timing_type == TimingType::three_state_enable_rise) {
|
||||
if (transition == nullptr)
|
||||
visitor->libWarn(95, line_, "missing %s_transition.", rf->name());
|
||||
reader->libWarn(95, line_, "missing %s_transition.", rf->name());
|
||||
if (cell == nullptr)
|
||||
visitor->libWarn(96, line_, "missing cell_%s.", rf->name());
|
||||
reader->libWarn(96, line_, "missing cell_%s.", rf->name());
|
||||
}
|
||||
}
|
||||
if (constraint)
|
||||
} else if (constraint)
|
||||
attrs_->setModel(rf, new CheckTableModel(constraint,
|
||||
constraint_sigma_[rf_index]));
|
||||
}
|
||||
|
|
@ -2352,6 +2388,196 @@ LibertyReader::makeTimingArcs(const char *from_port_name,
|
|||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
void
|
||||
LibertyReader::beginReceiverCapacitance(LibertyGroup *)
|
||||
{
|
||||
|
||||
receiver_model_ = make_shared<ReceiverModel>();
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::endReceiverCapacitance(LibertyGroup *)
|
||||
{
|
||||
if (ports_) {
|
||||
for (LibertyPort *port : *ports_)
|
||||
port->setReceiverModel(receiver_model_);
|
||||
}
|
||||
receiver_model_ = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginReceiverCapacitance1Rise(LibertyGroup *group)
|
||||
{
|
||||
beginReceiverCapacitance(group, 0, RiseFall::rise());
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginReceiverCapacitance1Fall(LibertyGroup *group)
|
||||
{
|
||||
beginReceiverCapacitance(group, 0, RiseFall::fall());
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginReceiverCapacitance2Rise(LibertyGroup *group)
|
||||
{
|
||||
beginReceiverCapacitance(group, 1, RiseFall::rise());
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginReceiverCapacitance2Fall(LibertyGroup *group)
|
||||
{
|
||||
beginReceiverCapacitance(group, 1, RiseFall::fall());
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginReceiverCapacitance(LibertyGroup *group,
|
||||
int index,
|
||||
RiseFall *rf)
|
||||
{
|
||||
if (timing_ || ports_) {
|
||||
beginTableModel(group, TableTemplateType::delay, rf, 1.0,
|
||||
ScaleFactorType::pin_cap);
|
||||
index_ = index;
|
||||
}
|
||||
else
|
||||
libWarn(904, group, "receiver_capacitance group not in timing or pin group.");
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::endReceiverCapacitanceRiseFall(LibertyGroup *group)
|
||||
{
|
||||
if (table_) {
|
||||
if (ReceiverModel::checkAxes(table_)) {
|
||||
TableModel *table_model = new TableModel(table_, tbl_template_,
|
||||
scale_factor_type_, rf_);
|
||||
if (timing_ && receiver_model_ == nullptr) {
|
||||
receiver_model_ = make_shared<ReceiverModel>();
|
||||
timing_->setReceiverModel(receiver_model_);
|
||||
}
|
||||
receiver_model_->setCapacitanceModel(table_model, index_, rf_);
|
||||
}
|
||||
else
|
||||
libWarn(902, group, "unsupported model axis.");
|
||||
}
|
||||
endTableModel();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
void
|
||||
LibertyReader::beginOutputCurrentRise(LibertyGroup *group)
|
||||
{
|
||||
beginOutputCurrent(RiseFall::rise(), group);
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginOutputCurrentFall(LibertyGroup *group)
|
||||
{
|
||||
beginOutputCurrent(RiseFall::fall(), group);
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginOutputCurrent(RiseFall *rf,
|
||||
LibertyGroup *group)
|
||||
{
|
||||
if (timing_)
|
||||
rf_ = rf;
|
||||
else
|
||||
libWarn(907, group, "output_current_%s group not in timing group.",
|
||||
rf->name());
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::endOutputCurrentRiseFall(LibertyGroup *group)
|
||||
{
|
||||
Set<float> axis_set1, axis_set2;
|
||||
FloatSeq *axis_values1 = new FloatSeq;
|
||||
FloatSeq *axis_values2 = new FloatSeq;
|
||||
for (OutputCurrentWaveform *waveform : output_current_waveforms_) {
|
||||
float axis_value1 = waveform->axisValue1();
|
||||
if (!axis_set1.hasKey(axis_value1)) {
|
||||
axis_set1.insert(axis_value1);
|
||||
axis_values1->push_back(axis_value1);
|
||||
}
|
||||
float axis_value2 = waveform->axisValue2();
|
||||
if (!axis_set2.hasKey(axis_value2)) {
|
||||
axis_set2.insert(axis_value2);
|
||||
axis_values2->push_back(axis_value2);
|
||||
}
|
||||
}
|
||||
sort(axis_values1, std::less<float>());
|
||||
sort(axis_values2, std::less<float>());
|
||||
TableAxisPtr axis1 = std::make_shared<TableAxis>(axis_[0]->variable(),
|
||||
axis_values1);
|
||||
TableAxisPtr axis2 = std::make_shared<TableAxis>(axis_[1]->variable(),
|
||||
axis_values2);
|
||||
Vector<OutputCurrentWaveform*> waveforms(axis1->size() * axis2->size());
|
||||
for (OutputCurrentWaveform *waveform : output_current_waveforms_) {
|
||||
size_t index1, index2;
|
||||
bool exists1, exists2;
|
||||
axis1->findAxisIndex(waveform->axisValue1(), index1, exists1);
|
||||
axis2->findAxisIndex(waveform->axisValue2(), index2, exists2);
|
||||
if (exists1 && exists2) {
|
||||
size_t index = index1 * axis2->size() + index2;
|
||||
waveforms[index] = waveform;
|
||||
}
|
||||
else
|
||||
libWarn(913, group, "output current waveform %.2e %.2e not found.",
|
||||
waveform->axisValue1(),
|
||||
waveform->axisValue2());
|
||||
}
|
||||
OutputCurrent *output_current = new OutputCurrent(axis1, axis2, waveforms);
|
||||
timing_->setOutputCurrent(rf_, output_current);
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::beginVector(LibertyGroup *group)
|
||||
{
|
||||
if (timing_) {
|
||||
beginTable(group, TableTemplateType::output_current, 1.0);
|
||||
scale_factor_type_ = ScaleFactorType::unknown;
|
||||
reference_time_exists_ = false;
|
||||
if (!OutputCurrentWaveform::checkAxes(tbl_template_))
|
||||
libWarn(118, group, "unsupported model axis.");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::visitReferenceTime(LibertyAttr *attr)
|
||||
{
|
||||
getAttrFloat(attr, reference_time_, reference_time_exists_);
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::endVector(LibertyGroup *group)
|
||||
{
|
||||
FloatSeq *axis_values1 = axis_values_[0];
|
||||
FloatSeq *axis_values2 = axis_values_[1];
|
||||
if (axis_values1->size() == 1 && axis_values2->size() == 1) {
|
||||
// Convert 1x1xN Table3 to Table1.
|
||||
float axis_value1 = (*axis_values1)[0];
|
||||
float axis_value2 = (*axis_values2)[0];
|
||||
Table3 *table3 = dynamic_cast<Table3*>(table_.get());
|
||||
FloatTable *values3 = table3->values3();
|
||||
// Steal the values.
|
||||
FloatSeq *values = (*values3)[0];
|
||||
(*values3)[0] = nullptr;
|
||||
Table1 *table1 = new Table1(values, axis_[2]);
|
||||
OutputCurrentWaveform *waveform = new OutputCurrentWaveform(axis_value1,
|
||||
axis_value2,
|
||||
axis_[2], table1,
|
||||
reference_time_);
|
||||
output_current_waveforms_.push_back(waveform);
|
||||
}
|
||||
else
|
||||
libWarn(912, group->line(), "vector index_1 and index_2 must have one value.");
|
||||
if (!reference_time_exists_)
|
||||
libWarn(908, group->line(), "vector reference_time not found.");
|
||||
reference_time_exists_ = false;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
void
|
||||
LibertyReader::makeInternalPowers(LibertyPort *port,
|
||||
InternalPowerGroup *power_group)
|
||||
|
|
@ -2910,9 +3136,7 @@ LibertyReader::visitDirection(LibertyAttr *attr)
|
|||
else
|
||||
libWarn(109, attr, "unknown port direction.");
|
||||
|
||||
LibertyPortSeq::Iterator port_iter(ports_);
|
||||
while (port_iter.hasNext()) {
|
||||
LibertyPort *port = port_iter.next();
|
||||
for (LibertyPort *port : *ports_) {
|
||||
// Tristate enable function sets direction to tristate; don't
|
||||
// clobber it.
|
||||
if (!port->direction()->isTristate())
|
||||
|
|
@ -3554,17 +3778,11 @@ void
|
|||
LibertyReader::beginTiming(LibertyGroup *group)
|
||||
{
|
||||
if (port_group_) {
|
||||
timing_ = makeTimingGroup(group->line());
|
||||
timing_ = new TimingGroup(group->line());
|
||||
port_group_->addTimingGroup(timing_);
|
||||
}
|
||||
}
|
||||
|
||||
TimingGroup *
|
||||
LibertyReader::makeTimingGroup(int line)
|
||||
{
|
||||
return new TimingGroup(line);
|
||||
}
|
||||
|
||||
void
|
||||
LibertyReader::endTiming(LibertyGroup *group)
|
||||
{
|
||||
|
|
@ -3579,8 +3797,9 @@ LibertyReader::endTiming(LibertyGroup *group)
|
|||
}
|
||||
if (timing_->relatedPortNames() == nullptr)
|
||||
libWarn(170, group, "timing group missing related_pin/related_bus_pin.");
|
||||
timing_ = nullptr;
|
||||
}
|
||||
timing_ = nullptr;
|
||||
receiver_model_ = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3806,7 +4025,7 @@ LibertyReader::endCellRiseFall(LibertyGroup *group)
|
|||
timing_->setCell(rf_, table_model);
|
||||
}
|
||||
else
|
||||
libWarn(118, group, "unsupported model axis.");
|
||||
libWarn(906, group, "unsupported model axis.");
|
||||
}
|
||||
endTableModel();
|
||||
}
|
||||
|
|
@ -3912,6 +4131,8 @@ LibertyReader::beginTimingTableModel(LibertyGroup *group,
|
|||
if (timing_)
|
||||
beginTableModel(group, TableTemplateType::delay, rf,
|
||||
time_scale_, scale_factor_type);
|
||||
else
|
||||
libWarn(903, group, "%s group not in timing group.", group->firstName());
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3931,6 +4152,9 @@ void
|
|||
LibertyReader::endTableModel()
|
||||
{
|
||||
endTable();
|
||||
scale_factor_type_ = ScaleFactorType::unknown;
|
||||
sigma_type_ = nullptr;
|
||||
index_ = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3993,6 +4217,7 @@ LibertyReader::makeTable(LibertyAttr *attr,
|
|||
makeTableAxis(1);
|
||||
makeTableAxis(2);
|
||||
if (axis_[0] && axis_[1] && axis_[2]) {
|
||||
// 3D table
|
||||
// Column index1*size(index2) + index2
|
||||
// Row index3
|
||||
FloatTable *table = makeFloatTable(attr,
|
||||
|
|
@ -4001,6 +4226,7 @@ LibertyReader::makeTable(LibertyAttr *attr,
|
|||
table_ = make_shared<Table3>(table, axis_[0], axis_[1], axis_[2]);
|
||||
}
|
||||
else if (axis_[0] && axis_[1]) {
|
||||
// 2D table
|
||||
// Row variable1/axis[0]
|
||||
// Column variable2/axis[1]
|
||||
FloatTable *table = makeFloatTable(attr, axis_[0]->size(),
|
||||
|
|
@ -4008,12 +4234,14 @@ LibertyReader::makeTable(LibertyAttr *attr,
|
|||
table_ = make_shared<Table2>(table, axis_[0], axis_[1]);
|
||||
}
|
||||
else if (axis_[0]) {
|
||||
// 1D table
|
||||
FloatTable *table = makeFloatTable(attr, 1, axis_[0]->size(), scale);
|
||||
FloatSeq *values = (*table)[0];
|
||||
delete table;
|
||||
table_ = make_shared<Table1>(values, axis_[0]);
|
||||
}
|
||||
else {
|
||||
// scalar
|
||||
FloatTable *table = makeFloatTable(attr, 1, 1, scale);
|
||||
float value = (*(*table)[0])[0];
|
||||
delete (*table)[0];
|
||||
|
|
@ -4377,6 +4605,10 @@ LibertyReader::readFloatSeq(LibertyAttr *attr,
|
|||
values = new FloatSeq;
|
||||
parseStringFloatList(value->stringValue(), scale, values, attr);
|
||||
}
|
||||
else if (value->isFloat()) {
|
||||
values = new FloatSeq;
|
||||
values->push_back(value->floatValue());
|
||||
}
|
||||
else
|
||||
libWarn(140, attr, "%s is missing values.", attr->name());
|
||||
}
|
||||
|
|
@ -5115,7 +5347,8 @@ RelatedPortGroup::setIsOneToOne(bool one)
|
|||
TimingGroup::TimingGroup(int line) :
|
||||
RelatedPortGroup(line),
|
||||
attrs_(std::make_shared<TimingArcAttrs>()),
|
||||
related_output_port_name_(nullptr)
|
||||
related_output_port_name_(nullptr),
|
||||
receiver_model_(nullptr)
|
||||
{
|
||||
for (auto rf_index : RiseFall::rangeIndex()) {
|
||||
cell_[rf_index] = nullptr;
|
||||
|
|
@ -5125,6 +5358,7 @@ TimingGroup::TimingGroup(int line) :
|
|||
intrinsic_exists_[rf_index] = false;
|
||||
resistance_[rf_index] = 0.0F;
|
||||
resistance_exists_[rf_index] = false;
|
||||
output_current_[rf_index] = nullptr;
|
||||
|
||||
for (auto el_index : EarlyLate::rangeIndex()) {
|
||||
delay_sigma_[rf_index][el_index] = nullptr;
|
||||
|
|
@ -5249,6 +5483,25 @@ TimingGroup::setConstraintSigma(RiseFall *rf,
|
|||
constraint_sigma_[rf->index()][early_late->index()] = model;
|
||||
}
|
||||
|
||||
void
|
||||
TimingGroup::setReceiverModel(ReceiverModelPtr receiver_model)
|
||||
{
|
||||
receiver_model_ = receiver_model;
|
||||
}
|
||||
|
||||
OutputCurrent *
|
||||
TimingGroup::outputCurrent(RiseFall *rf)
|
||||
{
|
||||
return output_current_[rf->index()];
|
||||
}
|
||||
|
||||
void
|
||||
TimingGroup::setOutputCurrent(RiseFall *rf,
|
||||
OutputCurrent *output_current)
|
||||
{
|
||||
output_current_[rf->index()] = output_current;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
InternalPowerGroup::InternalPowerGroup(int line) :
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ typedef Vector<TimingGroup*> TimingGroupSeq;
|
|||
typedef Vector<InternalPowerGroup*> InternalPowerGroupSeq;
|
||||
typedef Vector<LeakagePowerGroup*> LeakagePowerGroupSeq;
|
||||
typedef void (LibertyPort::*LibertyPortBoolSetter)(bool value);
|
||||
typedef Vector<OutputCurrentWaveform*> OutputCurrentWaveformSeq;
|
||||
|
||||
class LibertyReader : public LibertyGroupVisitor
|
||||
{
|
||||
|
|
@ -297,7 +298,6 @@ public:
|
|||
|
||||
virtual void beginTiming(LibertyGroup *group);
|
||||
virtual void endTiming(LibertyGroup *group);
|
||||
virtual TimingGroup *makeTimingGroup(int line);
|
||||
virtual void visitRelatedPin(LibertyAttr *attr);
|
||||
virtual void visitRelatedPin(LibertyAttr *attr,
|
||||
RelatedPortGroup *group);
|
||||
|
|
@ -419,6 +419,30 @@ public:
|
|||
virtual void visitPgType(LibertyAttr *attr);
|
||||
virtual void visitVoltageName(LibertyAttr *attr);
|
||||
|
||||
// ccs receiver
|
||||
virtual void beginReceiverCapacitance(LibertyGroup *group);
|
||||
virtual void endReceiverCapacitance(LibertyGroup *group);
|
||||
virtual void beginReceiverCapacitance1Rise(LibertyGroup *group);
|
||||
virtual void endReceiverCapacitanceRiseFall(LibertyGroup *group);
|
||||
virtual void beginReceiverCapacitance1Fall(LibertyGroup *group);
|
||||
virtual void beginReceiverCapacitance2Rise(LibertyGroup *group);
|
||||
virtual void beginReceiverCapacitance2Fall(LibertyGroup *group);
|
||||
void beginReceiverCapacitance(LibertyGroup *group,
|
||||
int index,
|
||||
RiseFall *rf);
|
||||
void endReceiverCapacitance(LibertyGroup *group,
|
||||
int index,
|
||||
RiseFall *rf);
|
||||
// ccs
|
||||
void beginOutputCurrentRise(LibertyGroup *group);
|
||||
void beginOutputCurrentFall(LibertyGroup *group);
|
||||
void beginOutputCurrent(RiseFall *rf,
|
||||
LibertyGroup *group);
|
||||
void endOutputCurrentRiseFall(LibertyGroup *group);
|
||||
void beginVector(LibertyGroup *group);
|
||||
void endVector(LibertyGroup *group);
|
||||
void visitReferenceTime(LibertyAttr *attr);
|
||||
|
||||
// Visitors for derived classes to overload.
|
||||
virtual void beginGroup1(LibertyGroup *) {}
|
||||
virtual void beginGroup2(LibertyGroup *) {}
|
||||
|
|
@ -453,6 +477,7 @@ protected:
|
|||
void parseNames(const char *name_str);
|
||||
void clearAxisValues();
|
||||
void makeTableAxis(int index);
|
||||
|
||||
StringSeq *parseNameList(const char *name_list);
|
||||
LibertyPort *findPort(const char *port_name);
|
||||
LibertyPort *findPort(LibertyCell *cell,
|
||||
|
|
@ -567,6 +592,7 @@ protected:
|
|||
LeakagePowerGroup *leakage_power_;
|
||||
LeakagePowerGroupSeq leakage_powers_;
|
||||
RiseFall *rf_;
|
||||
int index_;
|
||||
OcvDerate *ocv_derate_;
|
||||
RiseFallBoth *rf_type_;
|
||||
EarlyLateAll *derate_type_;
|
||||
|
|
@ -590,6 +616,12 @@ protected:
|
|||
float distance_scale_;
|
||||
bool have_resistance_unit_;
|
||||
const char *default_operating_condition_;
|
||||
ReceiverModelPtr receiver_model_;
|
||||
OutputCurrentWaveformSeq output_current_waveforms_;
|
||||
OutputCurrent *output_current_;
|
||||
float reference_time_;
|
||||
bool reference_time_exists_;
|
||||
|
||||
static constexpr char escape_ = '\\';
|
||||
|
||||
private:
|
||||
|
|
@ -636,12 +668,15 @@ public:
|
|||
void addTimingGroup(TimingGroup *timing);
|
||||
InternalPowerGroupSeq *internalPowerGroups() { return &internal_power_groups_; }
|
||||
void addInternalPowerGroup(InternalPowerGroup *internal_power);
|
||||
ReceiverModel *receiverModel() const { return receiver_model_; }
|
||||
void setReceiverModel(ReceiverModelPtr receiver_model);
|
||||
int line() const { return line_; }
|
||||
|
||||
private:
|
||||
LibertyPortSeq *ports_;
|
||||
TimingGroupSeq timings_;
|
||||
InternalPowerGroupSeq internal_power_groups_;
|
||||
ReceiverModel *receiver_model_;
|
||||
int line_;
|
||||
};
|
||||
|
||||
|
|
@ -747,10 +782,14 @@ public:
|
|||
void setConstraintSigma(RiseFall *rf,
|
||||
EarlyLate *early_late,
|
||||
TableModel *model);
|
||||
|
||||
void setReceiverModel(ReceiverModelPtr receiver_model);
|
||||
OutputCurrent *outputCurrent(RiseFall *rf);
|
||||
void setOutputCurrent(RiseFall *rf,
|
||||
OutputCurrent *output_current);
|
||||
|
||||
protected:
|
||||
void makeLinearModels(LibertyLibrary *library);
|
||||
void makeTableModels(LibertyReader *visitor);
|
||||
void makeTableModels(LibertyReader *reader);
|
||||
|
||||
TimingArcAttrsPtr attrs_;
|
||||
const char *related_output_port_name_;
|
||||
|
|
@ -764,6 +803,8 @@ protected:
|
|||
TableModel *transition_[RiseFall::index_count];
|
||||
TableModel *delay_sigma_[RiseFall::index_count][EarlyLate::index_count];
|
||||
TableModel *slew_sigma_[RiseFall::index_count][EarlyLate::index_count];
|
||||
OutputCurrent *output_current_[RiseFall::index_count];
|
||||
ReceiverModelPtr receiver_model_;
|
||||
};
|
||||
|
||||
class InternalPowerGroup : public InternalPowerAttrs, public RelatedPortGroup
|
||||
|
|
|
|||
|
|
@ -41,9 +41,13 @@ appendSpaces(string *result,
|
|||
GateTableModel::GateTableModel(TableModel *delay_model,
|
||||
TableModel *delay_sigma_models[EarlyLate::index_count],
|
||||
TableModel *slew_model,
|
||||
TableModel *slew_sigma_models[EarlyLate::index_count]) :
|
||||
TableModel *slew_sigma_models[EarlyLate::index_count],
|
||||
ReceiverModelPtr receiver_model,
|
||||
OutputCurrent *output_current) :
|
||||
delay_model_(delay_model),
|
||||
slew_model_(slew_model)
|
||||
slew_model_(slew_model),
|
||||
receiver_model_(receiver_model),
|
||||
output_current_(output_current)
|
||||
{
|
||||
for (auto el_index : EarlyLate::rangeIndex()) {
|
||||
slew_sigma_models_[el_index] = slew_sigma_models ? slew_sigma_models[el_index] : nullptr;
|
||||
|
|
@ -55,6 +59,7 @@ GateTableModel::~GateTableModel()
|
|||
{
|
||||
delete delay_model_;
|
||||
delete slew_model_;
|
||||
delete output_current_;
|
||||
deleteSigmaModels(slew_sigma_models_);
|
||||
deleteSigmaModels(delay_sigma_models_);
|
||||
}
|
||||
|
|
@ -160,6 +165,8 @@ GateTableModel::reportGateDelay(const LibertyCell *cell,
|
|||
load_cap, related_out_cap);
|
||||
if (drvr_slew < 0.0)
|
||||
*result += "Negative slew clipped to 0.0\n";
|
||||
if (output_current_)
|
||||
output_current_->reportWaveform(cell, pvt, in_slew, load_cap, digits, result);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -180,7 +187,7 @@ GateTableModel::reportTableLookup(const char *result_name,
|
|||
axis_value1, axis_value2, axis_value3);
|
||||
model->reportValue(result_name, library, cell, pvt,
|
||||
axis_value1, nullptr, axis_value2, axis_value3,
|
||||
digits, result);
|
||||
library->units()->timeUnit(), digits, result);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -327,11 +334,11 @@ GateTableModel::checkAxes(const TablePtr table)
|
|||
TableAxisPtr axis3 = table->axis3();
|
||||
bool axis_ok = true;
|
||||
if (axis1)
|
||||
axis_ok &= checkAxis(table->axis1());
|
||||
axis_ok &= checkAxis(axis1);
|
||||
if (axis2)
|
||||
axis_ok &= checkAxis(table->axis2());
|
||||
axis_ok &= checkAxis(axis2);
|
||||
if (axis3)
|
||||
axis_ok &= checkAxis(table->axis3());
|
||||
axis_ok &= checkAxis(axis3);
|
||||
return axis_ok;
|
||||
}
|
||||
|
||||
|
|
@ -347,6 +354,46 @@ GateTableModel::checkAxis(TableAxisPtr axis)
|
|||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
ReceiverModel::ReceiverModel() :
|
||||
capacitance_models_{{nullptr, nullptr}, {nullptr, nullptr}}
|
||||
{
|
||||
}
|
||||
|
||||
ReceiverModel::~ReceiverModel()
|
||||
{
|
||||
for (int index = 0; index < 2; index++) {
|
||||
for (auto rf_index : RiseFall::rangeIndex())
|
||||
delete capacitance_models_[index][rf_index];
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ReceiverModel::setCapacitanceModel(TableModel *table_model,
|
||||
int index,
|
||||
RiseFall *rf)
|
||||
{
|
||||
capacitance_models_[index][rf->index()] = table_model;
|
||||
}
|
||||
|
||||
bool
|
||||
ReceiverModel::checkAxes(TablePtr table)
|
||||
{
|
||||
TableAxisPtr axis1 = table->axis1();
|
||||
TableAxisPtr axis2 = table->axis2();
|
||||
TableAxisPtr axis3 = table->axis3();
|
||||
return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
|
||||
&& axis2 == nullptr
|
||||
&& axis3 == nullptr)
|
||||
|| (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
|
||||
&& axis2 && axis2->variable() == TableAxisVariable::total_output_net_capacitance
|
||||
&& axis3 == nullptr)
|
||||
|| (axis1 && axis1->variable() == TableAxisVariable::total_output_net_capacitance
|
||||
&& axis2 && axis2->variable() == TableAxisVariable::input_net_transition
|
||||
&& axis3 == nullptr);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
CheckTableModel::CheckTableModel(TableModel *model,
|
||||
TableModel *sigma_models[EarlyLate::index_count]) :
|
||||
model_(model)
|
||||
|
|
@ -464,7 +511,7 @@ CheckTableModel::reportTableDelay(const char *result_name,
|
|||
reportPvt(library, pvt, digits, result);
|
||||
model_->reportValue(result_name, library, cell, pvt,
|
||||
axis_value1, from_slew_annotation, axis_value2,
|
||||
axis_value3, digits, result);
|
||||
axis_value3, library->units()->timeUnit(), digits, result);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -536,11 +583,11 @@ CheckTableModel::checkAxes(const TablePtr table)
|
|||
TableAxisPtr axis3 = table->axis3();
|
||||
bool axis_ok = true;
|
||||
if (axis1)
|
||||
axis_ok &= checkAxis(table->axis1());
|
||||
axis_ok &= checkAxis(axis1);
|
||||
if (axis2)
|
||||
axis_ok &= checkAxis(table->axis2());
|
||||
axis_ok &= checkAxis(axis2);
|
||||
if (axis3)
|
||||
axis_ok &= checkAxis(table->axis3());
|
||||
axis_ok &= checkAxis(axis3);
|
||||
return axis_ok;
|
||||
}
|
||||
|
||||
|
|
@ -646,16 +693,15 @@ TableModel::reportValue(const char *result_name,
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const
|
||||
{
|
||||
table_->reportValue("Table value", library, cell, pvt, value1,
|
||||
comment1, value2, value3, digits, result);
|
||||
comment1, value2, value3, table_unit, digits, result);
|
||||
|
||||
reportPvtScaleFactor(library, cell, pvt, digits, result);
|
||||
|
||||
const Units *units = library->units();
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
*result += result_name;
|
||||
*result += " = ";
|
||||
*result += table_unit->asString(findValue(library, cell, pvt,
|
||||
|
|
@ -725,18 +771,17 @@ Table0::findValue(float,
|
|||
|
||||
void
|
||||
Table0::reportValue(const char *result_name,
|
||||
const LibertyLibrary *library,
|
||||
const LibertyLibrary *,
|
||||
const LibertyCell *,
|
||||
const Pvt *,
|
||||
float value1,
|
||||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const
|
||||
{
|
||||
const Units *units = library->units();
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
*result += result_name;
|
||||
*result += " constant = ";
|
||||
*result += table_unit->asString(findValue(value1, value2, value3), digits);
|
||||
|
|
@ -811,16 +856,15 @@ Table1::reportValue(const char *result_name, const
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const
|
||||
{
|
||||
TableAxisVariable var1 = axis1_->variable();
|
||||
const Units *units = library->units();
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
const Unit *unit1 = tableVariableUnit(var1, units);
|
||||
const Unit *unit1 = axis1_->unit(units);
|
||||
*result += "Table is indexed by\n";
|
||||
*result += " ";
|
||||
*result += tableVariableString(var1);
|
||||
*result += axis1_->variableString();
|
||||
*result += " = ";
|
||||
*result += unit1->asString(value1, digits);
|
||||
if (comment1)
|
||||
|
|
@ -856,7 +900,7 @@ Table1::report(const Units *units,
|
|||
Report *report) const
|
||||
{
|
||||
int digits = 4;
|
||||
const Unit *unit1 = tableVariableUnit(axis1_->variable(), units);
|
||||
const Unit *unit1 = axis1_->unit(units);
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
report->reportLine("%s", tableVariableString(axis1_->variable()));
|
||||
report->reportLine("------------------------------");
|
||||
|
|
@ -980,17 +1024,15 @@ Table2::reportValue(const char *result_name,
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const
|
||||
{
|
||||
TableAxisVariable var1 = axis1_->variable();
|
||||
TableAxisVariable var2 = axis2_->variable();
|
||||
const Units *units = library->units();
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
const Unit *unit1 = tableVariableUnit(var1, units);
|
||||
const Unit *unit2 = tableVariableUnit(var2, units);
|
||||
const Unit *unit1 = axis1_->unit(units);
|
||||
const Unit *unit2 = axis2_->unit(units);
|
||||
*result += "------- ";
|
||||
*result += tableVariableString(var1),
|
||||
*result += axis1_->variableString(),
|
||||
*result += " = ";
|
||||
*result += unit1->asString(value1, digits);
|
||||
if (comment1)
|
||||
|
|
@ -998,7 +1040,7 @@ Table2::reportValue(const char *result_name,
|
|||
*result += '\n';
|
||||
|
||||
*result += "| ";
|
||||
*result += tableVariableString(var2);
|
||||
*result += axis2_->variableString();
|
||||
*result += " = ";
|
||||
*result += unit2->asString(value2, digits);
|
||||
*result += '\n';
|
||||
|
|
@ -1047,8 +1089,8 @@ Table2::report(const Units *units,
|
|||
{
|
||||
int digits = 4;
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
const Unit *unit1 = tableVariableUnit(axis1_->variable(), units);
|
||||
const Unit *unit2 = tableVariableUnit(axis2_->variable(), units);
|
||||
const Unit *unit1 = axis1_->unit(units);
|
||||
const Unit *unit2 = axis2_->unit(units);
|
||||
report->reportLine("%s", tableVariableString(axis2_->variable()));
|
||||
report->reportLine(" ------------------------------");
|
||||
string line = " ";
|
||||
|
|
@ -1173,20 +1215,17 @@ Table3::reportValue(const char *result_name,
|
|||
const char *comment1,
|
||||
float value2,
|
||||
float value3,
|
||||
const Unit *table_unit,
|
||||
int digits,
|
||||
string *result) const
|
||||
{
|
||||
TableAxisVariable var1 = axis1_->variable();
|
||||
TableAxisVariable var2 = axis2_->variable();
|
||||
TableAxisVariable var3 = axis3_->variable();
|
||||
const Units *units = library->units();
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
const Unit *unit1 = tableVariableUnit(var1, units);
|
||||
const Unit *unit2 = tableVariableUnit(var2, units);
|
||||
const Unit *unit3 = tableVariableUnit(var3, units);
|
||||
const Unit *unit1 = axis1_->unit(units);
|
||||
const Unit *unit2 = axis2_->unit(units);
|
||||
const Unit *unit3 = axis3_->unit(units);
|
||||
|
||||
*result += " --------- ";
|
||||
*result += tableVariableString(var1),
|
||||
*result += axis1_->variableString(),
|
||||
*result += " = ";
|
||||
*result += unit1->asString(value1, digits);
|
||||
if (comment1)
|
||||
|
|
@ -1194,13 +1233,13 @@ Table3::reportValue(const char *result_name,
|
|||
*result += '\n';
|
||||
|
||||
*result += " | ---- ";
|
||||
*result += tableVariableString(var2),
|
||||
*result += axis2_->variableString(),
|
||||
*result += " = ";
|
||||
*result += unit2->asString(value2, digits);
|
||||
*result += '\n';
|
||||
|
||||
*result += " | | ";
|
||||
*result += tableVariableString(var3);
|
||||
*result += axis3_->variableString();
|
||||
*result += " = ";
|
||||
*result += unit3->asString(value3, digits);
|
||||
*result += '\n';
|
||||
|
|
@ -1296,9 +1335,9 @@ Table3::report(const Units *units,
|
|||
{
|
||||
int digits = 4;
|
||||
const Unit *table_unit = units->timeUnit();
|
||||
const Unit *unit1 = tableVariableUnit(axis1_->variable(), units);
|
||||
const Unit *unit2 = tableVariableUnit(axis2_->variable(), units);
|
||||
const Unit *unit3 = tableVariableUnit(axis3_->variable(), units);
|
||||
const Unit *unit1 = axis1_->unit(units);
|
||||
const Unit *unit2 = axis2_->unit(units);
|
||||
const Unit *unit3 = axis3_->unit(units);
|
||||
for (size_t index1 = 0; index1 < axis1_->size(); index1++) {
|
||||
report->reportLine("%s %s", tableVariableString(axis1_->variable()),
|
||||
unit1->asString(axis1_->axisValue(index1), digits));
|
||||
|
|
@ -1363,6 +1402,47 @@ TableAxis::findAxisIndex(float value) const
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
TableAxis::findAxisIndex(float value,
|
||||
// Return values.
|
||||
size_t &index,
|
||||
bool &exists) const
|
||||
{
|
||||
int max = static_cast<int>(values_->size()) - 1;
|
||||
if (!values_->empty()
|
||||
&& value >= (*values_)[0]
|
||||
&& value <= (*values_)[max]) {
|
||||
int lower = -1;
|
||||
int upper = max + 1;
|
||||
bool ascend = ((*values_)[max] >= (*values_)[0]);
|
||||
while (upper - lower > 1) {
|
||||
int mid = (upper + lower) >> 1;
|
||||
if (value == (*values_)[mid]) {
|
||||
index = mid;
|
||||
exists = true;
|
||||
return;
|
||||
}
|
||||
if ((value > (*values_)[mid]) == ascend)
|
||||
lower = mid;
|
||||
else
|
||||
upper = mid;
|
||||
}
|
||||
}
|
||||
exists = false;
|
||||
}
|
||||
|
||||
const char *
|
||||
TableAxis::variableString() const
|
||||
{
|
||||
return tableVariableString(variable_);
|
||||
}
|
||||
|
||||
const Unit *
|
||||
TableAxis::unit(const Units *units)
|
||||
{
|
||||
return tableVariableUnit(variable_, units);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
static EnumNameMap<TableAxisVariable> table_axis_variable_map =
|
||||
|
|
@ -1432,4 +1512,120 @@ tableVariableUnit(TableAxisVariable variable,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
OutputCurrentWaveform::OutputCurrentWaveform(float axis_value1,
|
||||
float axis_value2,
|
||||
TableAxisPtr axis,
|
||||
Table1 *currents,
|
||||
float reference_time) :
|
||||
axis_value1_(axis_value1),
|
||||
axis_value2_(axis_value2),
|
||||
axis_(axis),
|
||||
currents_(currents),
|
||||
reference_time_(reference_time)
|
||||
{
|
||||
}
|
||||
|
||||
OutputCurrentWaveform::~OutputCurrentWaveform()
|
||||
{
|
||||
delete currents_;
|
||||
}
|
||||
|
||||
bool
|
||||
OutputCurrentWaveform::checkAxes(TableTemplate *tbl_template)
|
||||
{
|
||||
TableAxisPtr axis1 = tbl_template->axis1();
|
||||
TableAxisPtr axis2 = tbl_template->axis2();
|
||||
TableAxisPtr axis3 = tbl_template->axis3();
|
||||
return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
|
||||
&& axis2->variable() == TableAxisVariable::time
|
||||
&& axis3 == nullptr)
|
||||
|| (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
|
||||
&& axis2 && axis2->variable() == TableAxisVariable::total_output_net_capacitance
|
||||
&& axis3->variable() == TableAxisVariable::time)
|
||||
|| (axis1 && axis1->variable() == TableAxisVariable::total_output_net_capacitance
|
||||
&& axis2 && axis2->variable() == TableAxisVariable::input_net_transition
|
||||
&& axis3->variable() == TableAxisVariable::time);
|
||||
}
|
||||
|
||||
void
|
||||
OutputCurrentWaveform::reportWaveform(const Units *units,
|
||||
int digits,
|
||||
string *result)
|
||||
{
|
||||
const Unit *time_unit = units->timeUnit();
|
||||
const Unit *current_unit = units->currentUnit();
|
||||
for (size_t i = 0; i < axis_->values()->size(); i++) {
|
||||
*result += time_unit->asString(axis_->axisValue(i), digits);
|
||||
*result += " ";
|
||||
}
|
||||
*result += '\n';
|
||||
for (size_t i = 0; i < currents_->axis1()->size(); i++) {
|
||||
*result += current_unit->asString(currents_->value(i), digits);
|
||||
*result += " ";
|
||||
}
|
||||
*result += '\n';
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
OutputCurrent::OutputCurrent(TableAxisPtr axis1,
|
||||
TableAxisPtr axis2,
|
||||
OutputCurrentWaveformSeq &waveforms) :
|
||||
axis1_(axis1),
|
||||
axis2_(axis2),
|
||||
waveforms_(waveforms)
|
||||
{
|
||||
}
|
||||
|
||||
OutputCurrent::~OutputCurrent()
|
||||
{
|
||||
waveforms_.deleteContents();
|
||||
}
|
||||
|
||||
void
|
||||
OutputCurrent::reportWaveform(const LibertyCell *cell,
|
||||
const Pvt *,
|
||||
float in_slew,
|
||||
float load_cap,
|
||||
int digits,
|
||||
string *result) const
|
||||
{
|
||||
float axis_value1, axis_value2;
|
||||
findAxisValues(in_slew, load_cap,
|
||||
axis_value1, axis_value2);
|
||||
size_t index1 = axis1_->findAxisIndex(axis_value1);
|
||||
size_t index2 = axis2_->findAxisIndex(axis_value2);
|
||||
size_t index = index1 * axis2_->size() + index2;
|
||||
waveforms_[index]->reportWaveform(cell->libertyLibrary()->units(), digits, result);
|
||||
}
|
||||
|
||||
void
|
||||
OutputCurrent::findAxisValues(float in_slew,
|
||||
float load_cap,
|
||||
// Return values.
|
||||
float &axis_value1,
|
||||
float &axis_value2) const
|
||||
{
|
||||
axis_value1 = axisValue(axis1_, in_slew, load_cap);
|
||||
axis_value2 = axisValue(axis2_, in_slew, load_cap);
|
||||
}
|
||||
|
||||
float
|
||||
OutputCurrent::axisValue(TableAxisPtr axis,
|
||||
float in_slew,
|
||||
float load_cap) const
|
||||
{
|
||||
TableAxisVariable var = axis->variable();
|
||||
if (var == TableAxisVariable::input_net_transition)
|
||||
return in_slew;
|
||||
else if (var == TableAxisVariable::total_output_net_capacitance)
|
||||
return load_cap;
|
||||
else {
|
||||
criticalError(240, "unsupported table axes");
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
|||
828
messages.txt
828
messages.txt
|
|
@ -1,18 +1,18 @@
|
|||
0001 DmpCeff.cc:1597 cell %s delay model not supported on SPF parasitics by DMP delay calculator
|
||||
0002 Liberty.cc:748 cell %s/%s port %s not found in cell %s/%s.
|
||||
0003 Liberty.cc:774 cell %s/%s %s -> %s timing group %s not found in cell %s/%s.
|
||||
0004 Liberty.cc:1708 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check.
|
||||
0005 Liberty.cc:1722 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.
|
||||
0006 Liberty.cc:1730 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.
|
||||
0002 Liberty.cc:749 cell %s/%s port %s not found in cell %s/%s.
|
||||
0003 Liberty.cc:775 cell %s/%s %s -> %s timing group %s not found in cell %s/%s.
|
||||
0004 Liberty.cc:1710 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check.
|
||||
0005 Liberty.cc:1724 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.
|
||||
0006 Liberty.cc:1732 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.
|
||||
0007 LibertyExpr.cc:78 %s references unknown port %s.
|
||||
0008 ConcreteNetwork.cc:1857 cell type %s can not be linked.
|
||||
0008 ConcreteNetwork.cc:1924 cell type %s can not be linked.
|
||||
0009 CycleAccting.cc:87 No common period was found between clocks %s and %s.
|
||||
0010 Genclks.cc:274 no master clock found for generated clock %s.
|
||||
0013 Genclks.cc:938 generated clock %s source pin %s missing paths from master clock %s.
|
||||
0015 Sim.cc:871 propagated logic value %c differs from constraint value of %c on pin %s.
|
||||
0016 LibertyReader.cc:1012 default_max_fanout is 0.0.
|
||||
0017 Sta.cc:2091 '%s' is not a valid endpoint.
|
||||
0018 Sta.cc:2015 '%s' is not a valid start point.
|
||||
0015 Sim.cc:865 propagated logic value %c differs from constraint value of %c on pin %s.
|
||||
0016 LibertyReader.cc:1045 default_max_fanout is 0.0.
|
||||
0017 Sta.cc:2093 '%s' is not a valid endpoint.
|
||||
0018 Sta.cc:2017 '%s' is not a valid start point.
|
||||
0021 SpefParse.yy:805 %d is not positive.
|
||||
0022 SpefParse.yy:814 %.4f is not positive.
|
||||
0023 SpefParse.yy:820 %.4f is not positive.
|
||||
|
|
@ -22,167 +22,167 @@
|
|||
0027 WritePathSpice.cc:1015 no register/latch found for path from %s to %s,
|
||||
0028 WritePathSpice.cc:1382 The following subkcts are missing from %s
|
||||
0029 WritePathSpice.cc:1440 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground.
|
||||
0030 LibertyReader.cc:591 library missing name.
|
||||
0031 LibertyReader.cc:623 default_wire_load %s not found.
|
||||
0032 LibertyReader.cc:634 default_wire_selection %s not found.
|
||||
0033 LibertyReader.cc:656 input_threshold_pct_%s not found.
|
||||
0034 LibertyReader.cc:660 output_threshold_pct_%s not found.
|
||||
0035 LibertyReader.cc:664 slew_lower_threshold_pct_%s not found.
|
||||
0036 LibertyReader.cc:668 slew_upper_threshold_pct_%s not found.
|
||||
0037 LibertyReader.cc:673 Library %s is missing one or more thresholds.
|
||||
0038 LibertyReader.cc:763 unknown unit multiplier %s.
|
||||
0039 LibertyReader.cc:782 unknown unit scale %c.
|
||||
0040 LibertyReader.cc:785 unknown unit suffix %s.
|
||||
0041 LibertyReader.cc:811 capacitive_load_units are not ff or pf.
|
||||
0042 LibertyReader.cc:814 capacitive_load_units are not a string.
|
||||
0043 LibertyReader.cc:817 capacitive_load_units missing suffix.
|
||||
0044 LibertyReader.cc:820 capacitive_load_units scale is not a float.
|
||||
0045 LibertyReader.cc:823 capacitive_load_units missing scale and suffix.
|
||||
0046 LibertyReader.cc:826 capacitive_load_unit missing values suffix.
|
||||
0047 LibertyReader.cc:844 delay_model %s not supported.
|
||||
0048 LibertyReader.cc:848 delay_model %s not supported.
|
||||
0049 LibertyReader.cc:852 delay_model %s not supported.
|
||||
0050 LibertyReader.cc:857 delay_model %s not supported.
|
||||
0030 LibertyReader.cc:624 library missing name.
|
||||
0031 LibertyReader.cc:656 default_wire_load %s not found.
|
||||
0032 LibertyReader.cc:667 default_wire_selection %s not found.
|
||||
0033 LibertyReader.cc:689 input_threshold_pct_%s not found.
|
||||
0034 LibertyReader.cc:693 output_threshold_pct_%s not found.
|
||||
0035 LibertyReader.cc:697 slew_lower_threshold_pct_%s not found.
|
||||
0036 LibertyReader.cc:701 slew_upper_threshold_pct_%s not found.
|
||||
0037 LibertyReader.cc:706 Library %s is missing one or more thresholds.
|
||||
0038 LibertyReader.cc:796 unknown unit multiplier %s.
|
||||
0039 LibertyReader.cc:815 unknown unit scale %c.
|
||||
0040 LibertyReader.cc:818 unknown unit suffix %s.
|
||||
0041 LibertyReader.cc:844 capacitive_load_units are not ff or pf.
|
||||
0042 LibertyReader.cc:847 capacitive_load_units are not a string.
|
||||
0043 LibertyReader.cc:850 capacitive_load_units missing suffix.
|
||||
0044 LibertyReader.cc:853 capacitive_load_units scale is not a float.
|
||||
0045 LibertyReader.cc:856 capacitive_load_units missing scale and suffix.
|
||||
0046 LibertyReader.cc:859 capacitive_load_unit missing values suffix.
|
||||
0047 LibertyReader.cc:877 delay_model %s not supported.
|
||||
0048 LibertyReader.cc:881 delay_model %s not supported.
|
||||
0049 LibertyReader.cc:885 delay_model %s not supported.
|
||||
0050 LibertyReader.cc:890 delay_model %s not supported.
|
||||
.
|
||||
0051 LibertyReader.cc:860 unknown delay_model %s
|
||||
0051 LibertyReader.cc:893 unknown delay_model %s
|
||||
.
|
||||
0052 LibertyReader.cc:879 unknown bus_naming_style format.
|
||||
0053 LibertyReader.cc:557 library %s already exists.
|
||||
0054 LibertyReader.cc:900 voltage_map voltage is not a float.
|
||||
0055 LibertyReader.cc:903 voltage_map missing voltage.
|
||||
0056 LibertyReader.cc:906 voltage_map supply name is not a string.
|
||||
0057 LibertyReader.cc:909 voltage_map missing supply name and voltage.
|
||||
0058 LibertyReader.cc:912 voltage_map missing values suffix.
|
||||
0059 LibertyReader.cc:1130 default_wire_load_mode %s not found.
|
||||
0060 LibertyReader.cc:646 default_operating_condition %s not found.
|
||||
0061 LibertyReader.cc:1301 table template missing name.
|
||||
0062 LibertyReader.cc:1343 missing variable_%d attribute.
|
||||
0063 LibertyReader.cc:1386 axis type %s not supported.
|
||||
0064 LibertyReader.cc:1446 bus type %s missing bit_from.
|
||||
0065 LibertyReader.cc:1448 bus type %s missing bit_to.
|
||||
0066 LibertyReader.cc:1452 type missing name.
|
||||
0067 LibertyReader.cc:1479 scaling_factors do not have a name.
|
||||
0068 LibertyReader.cc:1647 operating_conditions missing name.
|
||||
0069 LibertyReader.cc:1717 wire_load missing name.
|
||||
0070 LibertyReader.cc:1760 fanout_length is missing length and fanout.
|
||||
0071 LibertyReader.cc:1775 wire_load_selection missing name.
|
||||
0072 LibertyReader.cc:1806 wireload %s not found.
|
||||
0074 LibertyReader.cc:1813 wire_load_from_area min not a float.
|
||||
0075 LibertyReader.cc:1816 wire_load_from_area max not a float.
|
||||
0076 LibertyReader.cc:1819 wire_load_from_area missing parameters.
|
||||
0077 LibertyReader.cc:1822 wire_load_from_area missing parameters.
|
||||
0078 LibertyReader.cc:1839 cell missing name.
|
||||
0079 LibertyReader.cc:1862 cell %s ocv_derate_group %s not found.
|
||||
0080 LibertyReader.cc:1898 port %s function size does not match port size.
|
||||
0081 LibertyReader.cc:1966 %s %s bus width mismatch.
|
||||
0082 LibertyReader.cc:1977 %s %s bus width mismatch.
|
||||
0083 LibertyReader.cc:1987 clear
|
||||
0084 LibertyReader.cc:1997 preset
|
||||
0085 LibertyReader.cc:2033 latch enable function is non-unate for port %s.
|
||||
0086 LibertyReader.cc:2038 latch enable function is unknown for port %s.
|
||||
0087 LibertyReader.cc:2114 operating conditions %s not found.
|
||||
0088 LibertyReader.cc:2117 scaled_cell missing operating condition.
|
||||
0089 LibertyReader.cc:2120 scaled_cell cell %s has not been defined.
|
||||
0090 LibertyReader.cc:2123 scaled_cell missing name.
|
||||
0091 LibertyReader.cc:2149 scaled_cell %s, %s port functions do not match cell port functions.
|
||||
0092 LibertyReader.cc:2154 scaled_cell ports do not match cell ports.
|
||||
0093 LibertyReader.cc:2156 scaled_cell %s, %s timing does not match cell timing.
|
||||
0094 LibertyReader.cc:2175 combinational timing to an input port.
|
||||
0095 LibertyReader.cc:2263 missing %s_transition.
|
||||
0096 LibertyReader.cc:2265 missing cell_%s.
|
||||
0099 LibertyReader.cc:2593 scaling_factors %s not found.
|
||||
0100 LibertyReader.cc:2636 pin name is not a string.
|
||||
0101 LibertyReader.cc:2655 pin name is not a string.
|
||||
0102 LibertyReader.cc:2677 pin name is not a string.
|
||||
0103 LibertyReader.cc:2755 bus %s bus_type not found.
|
||||
0104 LibertyReader.cc:2811 bus_type %s not found.
|
||||
0105 LibertyReader.cc:2814 bus_type is not a string.
|
||||
0106 LibertyReader.cc:2832 bundle %s member not found.
|
||||
0107 LibertyReader.cc:2859 member is not a string.
|
||||
0108 LibertyReader.cc:2866 members attribute is missing values.
|
||||
0109 LibertyReader.cc:2909 unknown port direction.
|
||||
0110 LibertyReader.cc:3279 pulse_latch unknown pulse type.
|
||||
0111 LibertyReader.cc:3659 unknown timing_type %s.
|
||||
0112 LibertyReader.cc:3679 unknown timing_sense %s.
|
||||
0113 LibertyReader.cc:3719 mode value is not a string.
|
||||
0114 LibertyReader.cc:3722 missing mode value.
|
||||
0115 LibertyReader.cc:3725 mode name is not a string.
|
||||
0116 LibertyReader.cc:3728 mode missing values.
|
||||
0117 LibertyReader.cc:3731 mode missing mode name and value.
|
||||
0118 LibertyReader.cc:3807 unsupported model axis.
|
||||
0119 LibertyReader.cc:3836 unsupported model axis.
|
||||
0120 LibertyReader.cc:3867 unsupported model axis.
|
||||
0121 LibertyReader.cc:3904 unsupported model axis.
|
||||
0122 LibertyReader.cc:3956 table template %s not found.
|
||||
0123 LibertyReader.cc:4031 %s is missing values.
|
||||
0124 LibertyReader.cc:4056 %s is not a list of floats.
|
||||
0125 LibertyReader.cc:4058 table row has %u columns but axis has %d.
|
||||
0126 LibertyReader.cc:4068 table has %u rows but axis has %d.
|
||||
0127 LibertyReader.cc:4121 lut output is not a string.
|
||||
0128 LibertyReader.cc:4163 mode definition missing name.
|
||||
0129 LibertyReader.cc:4180 mode value missing name.
|
||||
0130 LibertyReader.cc:4194 when attribute inside table model.
|
||||
0131 LibertyReader.cc:4243 %s attribute is not a string.
|
||||
0132 LibertyReader.cc:4246 %s is not a simple attribute.
|
||||
0133 LibertyReader.cc:4269 %s is not a simple attribute.
|
||||
0134 LibertyReader.cc:4282 %s is not a simple attribute.
|
||||
0135 LibertyReader.cc:4306 %s value %s is not a float.
|
||||
0136 LibertyReader.cc:4335 %s missing values.
|
||||
0137 LibertyReader.cc:4339 %s missing values.
|
||||
0138 LibertyReader.cc:4342 %s is not a complex attribute.
|
||||
0139 LibertyReader.cc:4368 %s is not a float.
|
||||
0140 LibertyReader.cc:4387 %s is missing values.
|
||||
0141 LibertyReader.cc:4390 %s has more than one string.
|
||||
0142 LibertyReader.cc:4399 %s is missing values.
|
||||
0143 LibertyReader.cc:4424 %s attribute is not boolean.
|
||||
0144 LibertyReader.cc:4427 %s attribute is not boolean.
|
||||
0145 LibertyReader.cc:4430 %s is not a simple attribute.
|
||||
0146 LibertyReader.cc:4446 attribute %s value %s not recognized.
|
||||
0147 LibertyReader.cc:4476 unknown early/late value.
|
||||
0148 LibertyReader.cc:4702 OCV derate group named %s not found.
|
||||
0149 LibertyReader.cc:4718 ocv_derate missing name.
|
||||
0150 LibertyReader.cc:4771 unknown rise/fall.
|
||||
0151 LibertyReader.cc:4791 unknown derate type.
|
||||
0152 LibertyReader.cc:4823 unsupported model axis.
|
||||
0153 LibertyReader.cc:4857 unsupported model axis.
|
||||
0154 LibertyReader.cc:4891 unsupported model axis.
|
||||
0155 LibertyReader.cc:4964 unknown pg_type.
|
||||
0156 LibertyReader.cc:5338 port %s subscript out of range.
|
||||
0157 LibertyReader.cc:5342 port range %s of non-bus port %s.
|
||||
0158 LibertyReader.cc:5356 port %s not found.
|
||||
0159 LibertyReader.cc:5426 port %s not found.
|
||||
0160 LibertyReader.cc:997 default_max_transition is 0.0.
|
||||
0161 LibertyReader.cc:3167 max_transition is 0.0.
|
||||
0162 LibertyReader.cc:4266 %s attribute is not an integer.
|
||||
0163 LibertyReader.cc:1102 default_fanout_load is 0.0.
|
||||
0164 LibertyReader.cc:2286 timing group from output port.
|
||||
0165 LibertyReader.cc:2296 timing group from output port.
|
||||
0166 LibertyReader.cc:2306 timing group from output port.
|
||||
0167 LibertyReader.cc:2324 timing group from output port.
|
||||
0168 LibertyReader.cc:2339 timing group from output port.
|
||||
0169 LibertyReader.cc:4138 cell %s test_cell redefinition.
|
||||
0170 LibertyReader.cc:3579 timing group missing related_pin/related_bus_pin.
|
||||
0052 LibertyReader.cc:912 unknown bus_naming_style format.
|
||||
0053 LibertyReader.cc:590 library %s already exists.
|
||||
0054 LibertyReader.cc:933 voltage_map voltage is not a float.
|
||||
0055 LibertyReader.cc:936 voltage_map missing voltage.
|
||||
0056 LibertyReader.cc:939 voltage_map supply name is not a string.
|
||||
0057 LibertyReader.cc:942 voltage_map missing supply name and voltage.
|
||||
0058 LibertyReader.cc:945 voltage_map missing values suffix.
|
||||
0059 LibertyReader.cc:1163 default_wire_load_mode %s not found.
|
||||
0060 LibertyReader.cc:679 default_operating_condition %s not found.
|
||||
0061 LibertyReader.cc:1334 table template missing name.
|
||||
0062 LibertyReader.cc:1379 missing variable_%d attribute.
|
||||
0063 LibertyReader.cc:1422 axis type %s not supported.
|
||||
0064 LibertyReader.cc:1482 bus type %s missing bit_from.
|
||||
0065 LibertyReader.cc:1484 bus type %s missing bit_to.
|
||||
0066 LibertyReader.cc:1488 type missing name.
|
||||
0067 LibertyReader.cc:1515 scaling_factors do not have a name.
|
||||
0068 LibertyReader.cc:1683 operating_conditions missing name.
|
||||
0069 LibertyReader.cc:1753 wire_load missing name.
|
||||
0070 LibertyReader.cc:1796 fanout_length is missing length and fanout.
|
||||
0071 LibertyReader.cc:1811 wire_load_selection missing name.
|
||||
0072 LibertyReader.cc:1842 wireload %s not found.
|
||||
0074 LibertyReader.cc:1849 wire_load_from_area min not a float.
|
||||
0075 LibertyReader.cc:1852 wire_load_from_area max not a float.
|
||||
0076 LibertyReader.cc:1855 wire_load_from_area missing parameters.
|
||||
0077 LibertyReader.cc:1858 wire_load_from_area missing parameters.
|
||||
0078 LibertyReader.cc:1875 cell missing name.
|
||||
0079 LibertyReader.cc:1898 cell %s ocv_derate_group %s not found.
|
||||
0080 LibertyReader.cc:1934 port %s function size does not match port size.
|
||||
0081 LibertyReader.cc:2002 %s %s bus width mismatch.
|
||||
0082 LibertyReader.cc:2013 %s %s bus width mismatch.
|
||||
0083 LibertyReader.cc:2023 clear
|
||||
0084 LibertyReader.cc:2033 preset
|
||||
0085 LibertyReader.cc:2069 latch enable function is non-unate for port %s.
|
||||
0086 LibertyReader.cc:2074 latch enable function is unknown for port %s.
|
||||
0087 LibertyReader.cc:2150 operating conditions %s not found.
|
||||
0088 LibertyReader.cc:2153 scaled_cell missing operating condition.
|
||||
0089 LibertyReader.cc:2156 scaled_cell cell %s has not been defined.
|
||||
0090 LibertyReader.cc:2159 scaled_cell missing name.
|
||||
0091 LibertyReader.cc:2185 scaled_cell %s, %s port functions do not match cell port functions.
|
||||
0092 LibertyReader.cc:2190 scaled_cell ports do not match cell ports.
|
||||
0093 LibertyReader.cc:2192 scaled_cell %s, %s timing does not match cell timing.
|
||||
0094 LibertyReader.cc:2211 combinational timing to an input port.
|
||||
0095 LibertyReader.cc:2302 missing %s_transition.
|
||||
0096 LibertyReader.cc:2304 missing cell_%s.
|
||||
0099 LibertyReader.cc:2817 scaling_factors %s not found.
|
||||
0100 LibertyReader.cc:2860 pin name is not a string.
|
||||
0101 LibertyReader.cc:2879 pin name is not a string.
|
||||
0102 LibertyReader.cc:2901 pin name is not a string.
|
||||
0103 LibertyReader.cc:2979 bus %s bus_type not found.
|
||||
0104 LibertyReader.cc:3035 bus_type %s not found.
|
||||
0105 LibertyReader.cc:3038 bus_type is not a string.
|
||||
0106 LibertyReader.cc:3056 bundle %s member not found.
|
||||
0107 LibertyReader.cc:3083 member is not a string.
|
||||
0108 LibertyReader.cc:3090 members attribute is missing values.
|
||||
0109 LibertyReader.cc:3133 unknown port direction.
|
||||
0110 LibertyReader.cc:3501 pulse_latch unknown pulse type.
|
||||
0111 LibertyReader.cc:3876 unknown timing_type %s.
|
||||
0112 LibertyReader.cc:3896 unknown timing_sense %s.
|
||||
0113 LibertyReader.cc:3936 mode value is not a string.
|
||||
0114 LibertyReader.cc:3939 missing mode value.
|
||||
0115 LibertyReader.cc:3942 mode name is not a string.
|
||||
0116 LibertyReader.cc:3945 mode missing values.
|
||||
0117 LibertyReader.cc:3948 mode missing mode name and value.
|
||||
0118 LibertyReader.cc:2537 unsupported model axis.
|
||||
0119 LibertyReader.cc:4051 unsupported model axis.
|
||||
0120 LibertyReader.cc:4080 unsupported model axis.
|
||||
0121 LibertyReader.cc:4115 unsupported model axis.
|
||||
0122 LibertyReader.cc:4170 table template %s not found.
|
||||
0123 LibertyReader.cc:4249 %s is missing values.
|
||||
0124 LibertyReader.cc:4274 %s is not a list of floats.
|
||||
0125 LibertyReader.cc:4276 table row has %u columns but axis has %d.
|
||||
0126 LibertyReader.cc:4286 table has %u rows but axis has %d.
|
||||
0127 LibertyReader.cc:4339 lut output is not a string.
|
||||
0128 LibertyReader.cc:4381 mode definition missing name.
|
||||
0129 LibertyReader.cc:4398 mode value missing name.
|
||||
0130 LibertyReader.cc:4412 when attribute inside table model.
|
||||
0131 LibertyReader.cc:4461 %s attribute is not a string.
|
||||
0132 LibertyReader.cc:4464 %s is not a simple attribute.
|
||||
0133 LibertyReader.cc:4487 %s is not a simple attribute.
|
||||
0134 LibertyReader.cc:4500 %s is not a simple attribute.
|
||||
0135 LibertyReader.cc:4524 %s value %s is not a float.
|
||||
0136 LibertyReader.cc:4553 %s missing values.
|
||||
0137 LibertyReader.cc:4557 %s missing values.
|
||||
0138 LibertyReader.cc:4560 %s is not a complex attribute.
|
||||
0139 LibertyReader.cc:4586 %s is not a float.
|
||||
0140 LibertyReader.cc:4609 %s is missing values.
|
||||
0141 LibertyReader.cc:4612 %s has more than one string.
|
||||
0142 LibertyReader.cc:4621 %s is missing values.
|
||||
0143 LibertyReader.cc:4646 %s attribute is not boolean.
|
||||
0144 LibertyReader.cc:4649 %s attribute is not boolean.
|
||||
0145 LibertyReader.cc:4652 %s is not a simple attribute.
|
||||
0146 LibertyReader.cc:4668 attribute %s value %s not recognized.
|
||||
0147 LibertyReader.cc:4698 unknown early/late value.
|
||||
0148 LibertyReader.cc:4924 OCV derate group named %s not found.
|
||||
0149 LibertyReader.cc:4940 ocv_derate missing name.
|
||||
0150 LibertyReader.cc:4993 unknown rise/fall.
|
||||
0151 LibertyReader.cc:5013 unknown derate type.
|
||||
0152 LibertyReader.cc:5045 unsupported model axis.
|
||||
0153 LibertyReader.cc:5077 unsupported model axis.
|
||||
0154 LibertyReader.cc:5109 unsupported model axis.
|
||||
0155 LibertyReader.cc:5180 unknown pg_type.
|
||||
0156 LibertyReader.cc:5575 port %s subscript out of range.
|
||||
0157 LibertyReader.cc:5579 port range %s of non-bus port %s.
|
||||
0158 LibertyReader.cc:5593 port %s not found.
|
||||
0159 LibertyReader.cc:5663 port %s not found.
|
||||
0160 LibertyReader.cc:1030 default_max_transition is 0.0.
|
||||
0161 LibertyReader.cc:3389 max_transition is 0.0.
|
||||
0162 LibertyReader.cc:4484 %s attribute is not an integer.
|
||||
0163 LibertyReader.cc:1135 default_fanout_load is 0.0.
|
||||
0164 LibertyReader.cc:2324 timing group from output port.
|
||||
0165 LibertyReader.cc:2334 timing group from output port.
|
||||
0166 LibertyReader.cc:2344 timing group from output port.
|
||||
0167 LibertyReader.cc:2362 timing group from output port.
|
||||
0168 LibertyReader.cc:2377 timing group from output port.
|
||||
0169 LibertyReader.cc:4356 cell %s test_cell redefinition.
|
||||
0170 LibertyReader.cc:3795 timing group missing related_pin/related_bus_pin.
|
||||
0179 SpefReader.cc:733 %s.
|
||||
0190 VerilogReader.cc:1728 %s is not a verilog module.
|
||||
0191 VerilogReader.cc:1733 %s is not a verilog module.
|
||||
0201 StaTcl.i:128 no network has been linked.
|
||||
0202 StaTcl.i:142 network does not support edits.
|
||||
0204 StaTcl.i:4179 POCV support requires compilation with SSTA=1.
|
||||
0201 StaTcl.i:117 no network has been linked.
|
||||
0202 StaTcl.i:131 network does not support edits.
|
||||
0204 StaTcl.i:4021 POCV support requires compilation with SSTA=1.
|
||||
0206 LibertyExpr.cc:171 %s %s.
|
||||
0207 GraphDelayCalc1.cc:738 port not found in cell
|
||||
0208 Graph.cc:793 arc_delay_annotated array bounds exceeded
|
||||
0209 Graph.cc:808 arc_delay_annotated array bounds exceeded
|
||||
0210 Graph.cc:820 arc_delay_annotated array bounds exceeded
|
||||
0211 SdcNetwork.cc:1026 inst path string lenth estimate busted
|
||||
0212 SdcNetwork.cc:1098 inst path string lenth estimate exceeded
|
||||
0213 Sdc.cc:4156 group path name and is_default are mutually exclusive.
|
||||
0214 WriteSdc.cc:1306 unknown exception type
|
||||
0215 WriteSdc.cc:1877 illegal set_logic value
|
||||
0216 WriteSdc.cc:1921 invalid set_case_analysis value
|
||||
0211 SdcNetwork.cc:1077 inst path string lenth estimate busted
|
||||
0212 SdcNetwork.cc:1149 inst path string lenth estimate exceeded
|
||||
0213 Sdc.cc:4021 group path name and is_default are mutually exclusive.
|
||||
0214 WriteSdc.cc:1254 unknown exception type
|
||||
0215 WriteSdc.cc:1795 illegal set_logic value
|
||||
0216 WriteSdc.cc:1836 invalid set_case_analysis value
|
||||
0228 Graph.cc:833 arc_delay_annotated array bounds exceeded
|
||||
0251 PathEnumed.cc:126 enumerated path required time
|
||||
0252 PathEnumed.cc:135 enumerated path required time
|
||||
0253 PathGroup.cc:402 unknown path end type
|
||||
0253 PathGroup.cc:399 unknown path end type
|
||||
0254 PathVertexRep.cc:145 tag group missing tag
|
||||
0255 ReportPath.cc:289 unsupported path type
|
||||
0256 ReportPath.cc:310 unsupported path type
|
||||
|
|
@ -190,109 +190,109 @@
|
|||
0259 ReportPath.cc:2378 unsupported path type
|
||||
0260 Search.cc:2628 max tag group index exceeded
|
||||
0261 Search.cc:2860 max tag index exceeded
|
||||
0262 Search.cc:3543 unexpected filter path
|
||||
0263 Search.cc:3711 tns incr existing vertex
|
||||
0264 Sta.cc:4161 corresponding timing arc set not found in equiv cells
|
||||
0262 Search.cc:3551 unexpected filter path
|
||||
0263 Search.cc:3719 tns incr existing vertex
|
||||
0264 Sta.cc:4174 corresponding timing arc set not found in equiv cells
|
||||
0265 TagGroup.cc:297 tag group missing tag
|
||||
0266 Sta.cc:2088 '%s' is not a valid endpoint.
|
||||
0267 Sta.cc:2012 '%s' is not a valid start point.
|
||||
0272 StaTcl.i:4165 unknown common clk pessimism mode.
|
||||
0273 StaTcl.i:5121 unknown clock sense
|
||||
0266 Sta.cc:2090 '%s' is not a valid endpoint.
|
||||
0267 Sta.cc:2014 '%s' is not a valid start point.
|
||||
0272 StaTcl.i:4007 unknown common clk pessimism mode.
|
||||
0273 StaTcl.i:4963 unknown clock sense
|
||||
0299 Power.tcl:241 activity cannot be set on clock ports.
|
||||
0300 Util.tcl:218 no commands match '$pattern'.
|
||||
0300 CmdUtil.tcl:44 no commands match '$pattern'.
|
||||
0301 Power.tcl:218 activity should be 0.0 to 1.0 or 2.0
|
||||
0302 Power.tcl:226 duty should be 0.0 to 1.0
|
||||
0303 Sta.tcl:155 -clock ignored for clock objects.
|
||||
0304 Sta.tcl:384 -from/-to keywords ignored for lib_pin, port and pin arguments.
|
||||
0305 Cmds.tcl:166 object '$obj' not found.
|
||||
0313 Cmds.tcl:841 unsupported object type $object_type.
|
||||
0314 Cmds.tcl:856 $arg_name must be a single net.
|
||||
0315 Cmds.tcl:862 $arg_name '$object_type' is not a net.
|
||||
0316 Cmds.tcl:867 $arg_name '$arg' not found.
|
||||
0318 Search.tcl:1073 unknown path group '$name'.
|
||||
0303 Sdc.tcl:1586 -clock ignored for clock objects.
|
||||
0304 Sdc.tcl:2178 -from/-to keywords ignored for lib_pin, port and pin arguments.
|
||||
0305 CmdArgs.tcl:166 object '$obj' not found.
|
||||
0313 CmdArgs.tcl:842 unsupported object type $object_type.
|
||||
0314 CmdArgs.tcl:857 $arg_name must be a single net.
|
||||
0315 CmdArgs.tcl:863 $arg_name '$object_type' is not a net.
|
||||
0316 CmdArgs.tcl:868 $arg_name '$arg' not found.
|
||||
0318 Search.tcl:1067 unknown path group '$name'.
|
||||
0319 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale].
|
||||
0320 Sdc.tcl:496 current_design for other than top cell not supported.
|
||||
0321 Sdc.tcl:533 patterns argument not supported with -of_objects.
|
||||
0322 Sdc.tcl:568 instance '$pattern' not found.
|
||||
0323 Sdc.tcl:629 clock '$pattern' not found.
|
||||
0324 Sdc.tcl:656 positional arguments not supported with -of_objects.
|
||||
0325 Sdc.tcl:682 library '$lib_name' not found.
|
||||
0326 Sdc.tcl:694 cell '$cell_pattern' not found.
|
||||
0327 Sdc.tcl:741 library/cell/port '$pattern' not found.
|
||||
0328 Sdc.tcl:761 port '$port_pattern' not found.
|
||||
0329 Sdc.tcl:766 library '$lib_name' not found.
|
||||
0330 Sdc.tcl:776 -nocase ignored without -regexp.
|
||||
0331 Sdc.tcl:802 library '$pattern' not found.
|
||||
0332 Sdc.tcl:865 patterns argument not supported with -of_objects.
|
||||
0333 Sdc.tcl:889 net '$pattern' not found.
|
||||
0334 Sdc.tcl:918 patterns argument not supported with -of_objects.
|
||||
0335 Sdc.tcl:955 pin '$pattern' not found.
|
||||
0336 Sdc.tcl:1012 patterns argument not supported with -of_objects.
|
||||
0337 Sdc.tcl:1026 port '$pattern' not found.
|
||||
0338 Sdc.tcl:1124 non-increasing clock -waveform edge times.
|
||||
0339 Sdc.tcl:1127 -waveform time greater than two periods.
|
||||
0341 Sdc.tcl:1460 extra positional argument $arg.
|
||||
0342 Sdc.tcl:1493 -clock ignored for clock objects.
|
||||
0343 Sdc.tcl:1539 set_sense -type data not supported.
|
||||
0344 Sdc.tcl:1554 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock.
|
||||
0345 Sdc.tcl:1566 -pulse argument not supported.
|
||||
0346 Sdc.tcl:1575 -positive, -negative, -stop_propagation and -pulse are mutually exclusive.
|
||||
0347 Sdc.tcl:1588 hierarchical pin '[get_full_name $pin]' not supported.
|
||||
0348 Sdc.tcl:1796 -from/-to keywords ignored for lib_pin, port and pin arguments.
|
||||
0349 Sdc.tcl:1458 unknown keyword argument $arg.
|
||||
0350 Sdc.tcl:1944 -from, -through or -to required.
|
||||
0351 Sdc.tcl:2023 -source_latency_included ignored with -reference_pin.
|
||||
0352 Sdc.tcl:2026 -network_latency_included ignored with -reference_pin.
|
||||
0353 Sdc.tcl:2045 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'.
|
||||
0354 Sdc.tcl:2047 $cmd relative to a clock defined on the same port/pin not allowed.
|
||||
0355 Sdc.tcl:2090 '$args' ignored.
|
||||
0356 Sdc.tcl:2220 '$args' ignored.
|
||||
0357 Sdc.tcl:2267 virtual clock [get_name $clk] can not be propagated.
|
||||
0358 Sdc.tcl:2416 -multiply_by ignored.
|
||||
0359 Sdc.tcl:2419 -dont_scale ignored.
|
||||
0360 Sdc.tcl:2422 -no_design_rule ignored.
|
||||
0361 Sdc.tcl:2463 -clock not supported.
|
||||
0362 Sdc.tcl:2466 -clock_fall not supported.
|
||||
0363 Sdc.tcl:2512 -pin_load not allowed for net objects.
|
||||
0364 Sdc.tcl:2515 -wire_load not allowed for net objects.
|
||||
0365 Sdc.tcl:2518 -rise/-fall not allowed for net objects.
|
||||
0366 Sdc.tcl:2651 -data_path, -clock_path, -rise, -fall ignored for ports and designs.
|
||||
0367 Sdc.tcl:2721 derating factor greater than 2.0.
|
||||
0368 Sdc.tcl:2758 -cell_delay and -cell_check flags ignored for net objects.
|
||||
0369 Sdc.tcl:2817 no valid objects specified for $key.
|
||||
0370 Sdc.tcl:2850 no valid objects specified for $key
|
||||
0371 Sdc.tcl:3011 set_wire_load_min_block_size not supported.
|
||||
0372 NetworkEdit.tcl:80 connect_pins is deprecated. Use connect_pin.
|
||||
0373 Sdc.tcl:3161 define_corners must be called before read_liberty.
|
||||
0320 Sdc.tcl:437 current_design for other than top cell not supported.
|
||||
0321 Sdc.tcl:474 patterns argument not supported with -of_objects.
|
||||
0322 Sdc.tcl:509 instance '$pattern' not found.
|
||||
0323 Sdc.tcl:570 clock '$pattern' not found.
|
||||
0324 Sdc.tcl:597 positional arguments not supported with -of_objects.
|
||||
0325 Sdc.tcl:623 library '$lib_name' not found.
|
||||
0326 Sdc.tcl:635 cell '$cell_pattern' not found.
|
||||
0327 Sdc.tcl:682 library/cell/port '$pattern' not found.
|
||||
0328 Sdc.tcl:702 port '$port_pattern' not found.
|
||||
0329 Sdc.tcl:707 library '$lib_name' not found.
|
||||
0330 Sdc.tcl:717 -nocase ignored without -regexp.
|
||||
0331 Sdc.tcl:743 library '$pattern' not found.
|
||||
0332 Sdc.tcl:806 patterns argument not supported with -of_objects.
|
||||
0333 Sdc.tcl:830 net '$pattern' not found.
|
||||
0334 Sdc.tcl:859 patterns argument not supported with -of_objects.
|
||||
0335 Sdc.tcl:896 pin '$pattern' not found.
|
||||
0336 Sdc.tcl:953 patterns argument not supported with -of_objects.
|
||||
0337 Sdc.tcl:967 port '$pattern' not found.
|
||||
0338 Sdc.tcl:1065 non-increasing clock -waveform edge times.
|
||||
0339 Sdc.tcl:1068 -waveform time greater than two periods.
|
||||
0341 Sdc.tcl:1443 extra positional argument $arg.
|
||||
0342 Sdc.tcl:1536 -clock ignored for clock objects.
|
||||
0343 Sdc.tcl:1626 set_sense -type data not supported.
|
||||
0344 Sdc.tcl:1641 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock.
|
||||
0345 Sdc.tcl:1653 -pulse argument not supported.
|
||||
0346 Sdc.tcl:1662 -positive, -negative, -stop_propagation and -pulse are mutually exclusive.
|
||||
0347 Sdc.tcl:1675 hierarchical pin '[get_full_name $pin]' not supported.
|
||||
0348 Sdc.tcl:2041 -from/-to keywords ignored for lib_pin, port and pin arguments.
|
||||
0349 Sdc.tcl:1441 unknown keyword argument $arg.
|
||||
0350 Sdc.tcl:2288 -from, -through or -to required.
|
||||
0351 Sdc.tcl:2367 -source_latency_included ignored with -reference_pin.
|
||||
0352 Sdc.tcl:2370 -network_latency_included ignored with -reference_pin.
|
||||
0353 Sdc.tcl:2389 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'.
|
||||
0354 Sdc.tcl:2391 $cmd relative to a clock defined on the same port/pin not allowed.
|
||||
0355 Sdc.tcl:2445 '$args' ignored.
|
||||
0356 Sdc.tcl:2575 '$args' ignored.
|
||||
0357 Sdc.tcl:2710 virtual clock [get_name $clk] can not be propagated.
|
||||
0358 Sdc.tcl:2884 -multiply_by ignored.
|
||||
0359 Sdc.tcl:2887 -dont_scale ignored.
|
||||
0360 Sdc.tcl:2890 -no_design_rule ignored.
|
||||
0361 Sdc.tcl:2937 -clock not supported.
|
||||
0362 Sdc.tcl:2940 -clock_fall not supported.
|
||||
0363 Sdc.tcl:2986 -pin_load not allowed for net objects.
|
||||
0364 Sdc.tcl:2989 -wire_load not allowed for net objects.
|
||||
0365 Sdc.tcl:2992 -rise/-fall not allowed for net objects.
|
||||
0366 Sdc.tcl:3125 -data_path, -clock_path, -rise, -fall ignored for ports and designs.
|
||||
0367 Sdc.tcl:3196 derating factor greater than 2.0.
|
||||
0368 Sdc.tcl:3233 -cell_delay and -cell_check flags ignored for net objects.
|
||||
0369 Sdc.tcl:3303 no valid objects specified for $key.
|
||||
0370 Sdc.tcl:3336 no valid objects specified for $key
|
||||
0371 Sdc.tcl:3497 set_wire_load_min_block_size not supported.
|
||||
0372 NetworkEdit.tcl:129 connect_pins is deprecated. Use connect_pin.
|
||||
0373 Sdc.tcl:3647 define_corners must be called before read_liberty.
|
||||
0400 Util.tcl:44 $cmd $key missing value.
|
||||
0401 Util.tcl:61 $cmd $key missing value.
|
||||
0402 Util.tcl:71 $cmd $arg is not a known keyword or flag.
|
||||
0403 Util.tcl:93 $cmd $arg is not a known keyword or flag.
|
||||
0404 Util.tcl:191 Usage: $cmd $cmd_args($cmd)
|
||||
0405 Util.tcl:193 Usage: $cmd argument error
|
||||
0406 Util.tcl:313 $cmd positional arguments not supported.
|
||||
0407 Util.tcl:319 $cmd requires one positional argument.
|
||||
0408 Util.tcl:326 $cmd requires zero or one positional arguments.
|
||||
0409 Util.tcl:332 $cmd requires two positional arguments.
|
||||
0410 Util.tcl:339 $cmd requires one or two positional arguments.
|
||||
0411 Util.tcl:345 $cmd requires three positional arguments.
|
||||
0412 Util.tcl:351 $cmd requires four positional arguments.
|
||||
0413 Util.tcl:359 $cmd_arg '$arg' is not a float.
|
||||
0414 Util.tcl:365 $cmd_arg '$arg' is not a positive float.
|
||||
0415 Util.tcl:371 $cmd_arg '$arg' is not an integer.
|
||||
0416 Util.tcl:377 $cmd_arg '$arg' is not a positive integer.
|
||||
0417 Util.tcl:383 $cmd_arg '$arg' is not an integer greater than or equal to one.
|
||||
0418 Util.tcl:389 $cmd_arg '$arg' is not between 0 and 100.
|
||||
0419 Search.tcl:342 report_clock_skew -setup and -hold are mutually exclusive options.
|
||||
0404 CmdUtil.tcl:89 Usage: $cmd $cmd_args($cmd)
|
||||
0405 CmdUtil.tcl:91 Usage: $cmd argument error
|
||||
0406 Util.tcl:241 $cmd positional arguments not supported.
|
||||
0407 Util.tcl:247 $cmd requires one positional argument.
|
||||
0408 Util.tcl:254 $cmd requires zero or one positional arguments.
|
||||
0409 Util.tcl:260 $cmd requires two positional arguments.
|
||||
0410 Util.tcl:267 $cmd requires one or two positional arguments.
|
||||
0411 Util.tcl:273 $cmd requires three positional arguments.
|
||||
0412 Util.tcl:279 $cmd requires four positional arguments.
|
||||
0413 Util.tcl:287 $cmd_arg '$arg' is not a float.
|
||||
0414 Util.tcl:293 $cmd_arg '$arg' is not a positive float.
|
||||
0415 Util.tcl:299 $cmd_arg '$arg' is not an integer.
|
||||
0416 Util.tcl:305 $cmd_arg '$arg' is not a positive integer.
|
||||
0417 Util.tcl:311 $cmd_arg '$arg' is not an integer greater than or equal to one.
|
||||
0418 Util.tcl:317 $cmd_arg '$arg' is not between 0 and 100.
|
||||
0419 Search.tcl:336 report_clock_skew -setup and -hold are mutually exclusive options.
|
||||
0420 Search.tcl:136 $cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max.
|
||||
0421 Search.tcl:146 $cmd command failed.
|
||||
0422 Search.tcl:165 -endpoint_count must be a positive integer.
|
||||
0423 Search.tcl:174 -group_count must be >= 1.
|
||||
0424 Search.tcl:205 '$arg' is not a known keyword or flag.
|
||||
0425 Search.tcl:207 positional arguments not supported.
|
||||
0426 Search.tcl:526 analysis type single is not consistent with doing both setup/max and hold/min checks.
|
||||
0427 Search.tcl:531 positional arguments not supported.
|
||||
0428 Sta.tcl:859 set_assigned_transition transition is not a float.
|
||||
0426 Search.tcl:520 analysis type single is not consistent with doing both setup/max and hold/min checks.
|
||||
0427 Search.tcl:525 positional arguments not supported.
|
||||
0428 DelayCalc.tcl:350 set_assigned_transition transition is not a float.
|
||||
0430 Sdf.tcl:46 -cond_use min_max cannot be used with analysis type single.
|
||||
0432 Sdf.tcl:157 SDF -divider must be / or .
|
||||
0433 Parasitics.tcl:45 path instance '$path' not found.
|
||||
|
|
@ -301,174 +301,173 @@
|
|||
0436 Variables.tcl:45 sta_report_default_digits must be a positive integer.
|
||||
0437 Variables.tcl:70 sta_crpr_mode must be pin or transition.
|
||||
0438 Variables.tcl:187 $var_name value must be 0 or 1.
|
||||
0439 Sta.tcl:933 unsupported object type $list_type.
|
||||
0440 Sta.tcl:1235 -from/-to arguments not supported with -of_objects.
|
||||
0441 Sta.tcl:1363 unsupported -filter expression.
|
||||
0442 Sta.tcl:657 $cmd missing -from argument.
|
||||
0443 Sta.tcl:662 $cmd missing -to argument.
|
||||
0444 Sta.tcl:667 $cmd delay is not a float.
|
||||
0445 Sta.tcl:672 set_annotated_delay -cell and -net options are mutually excluive.
|
||||
0446 Sta.tcl:678 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst].
|
||||
0447 Sta.tcl:683 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]
|
||||
0448 Sta.tcl:688 $cmd -cell or -net required.
|
||||
0449 Sta.tcl:752 $cmd missing -from argument.
|
||||
0450 Sta.tcl:761 $cmd -clock must be rise or fall.
|
||||
0451 Sta.tcl:768 $cmd missing -to argument.
|
||||
0452 Sta.tcl:783 $cmd missing -setup|-hold|-recovery|-removal check type..
|
||||
0453 Sta.tcl:791 $cmd check_value is not a float.
|
||||
0454 Sta.tcl:100 the -all and -name options are mutually exclusive.
|
||||
0455 Sta.tcl:103 either -all or -name options must be specified.
|
||||
0456 Sta.tcl:111 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
|
||||
0457 Sta.tcl:114 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
|
||||
0458 Sta.tcl:167 -source '[$pin path_name]' is not a clock pin.
|
||||
0459 Sta.tcl:246 -from/-to must be used together.
|
||||
0460 Sta.tcl:266 -rise, -fall options not allowed for single clock uncertainty.
|
||||
0461 Sta.tcl:310 missing -from, -rise_from or -fall_from argument.
|
||||
0462 Sta.tcl:322 missing -to, -rise_to or -fall_to argument.
|
||||
0463 Sta.tcl:436 -from/-to hierarchical instance not supported.
|
||||
0464 Sta.tcl:562 $cmd command failed.
|
||||
0465 Sta.tcl:569 positional arguments not supported.
|
||||
0466 Sta.tcl:573 -from, -through or -to required.
|
||||
0467 Cmds.tcl:108 unsupported object type $object_type.
|
||||
0468 Cmds.tcl:405 $corner_name is not the name of process corner.
|
||||
0469 Cmds.tcl:410 -corner keyword required with multi-corner analysis.
|
||||
0470 Cmds.tcl:425 $corner_name is not the name of process corner.
|
||||
0471 Cmds.tcl:430 missing -corner arg.
|
||||
0472 Cmds.tcl:441 $corner_name is not the name of process corner.
|
||||
0473 Cmds.tcl:457 $corner_name is not the name of process corner.
|
||||
0474 Cmds.tcl:482 both -min and -max specified.
|
||||
0475 Cmds.tcl:496 both -min and -max specified.
|
||||
0476 Cmds.tcl:523 only one of -early and -late can be specified.
|
||||
0477 Cmds.tcl:529 -early or -late must be specified.
|
||||
0478 Cmds.tcl:536 both -early and -late specified.
|
||||
0479 Cmds.tcl:551 $arg_name must be a single library.
|
||||
0480 Cmds.tcl:557 $arg_name type '$object_type' is not a library.
|
||||
0481 Cmds.tcl:562 library '$arg' not found.
|
||||
0482 Cmds.tcl:579 $arg_name must be a single lib cell.
|
||||
0483 Cmds.tcl:635 $arg_name must be a single instance.
|
||||
0484 Cmds.tcl:641 $arg_name type '$object_type' is not an instance.
|
||||
0485 Cmds.tcl:646 instance '$arg' not found.
|
||||
0486 Cmds.tcl:665 $arg_name type '$object_type' is not an instance.
|
||||
0487 Cmds.tcl:672 instance '$arg' not found.
|
||||
0488 Cmds.tcl:733 $arg_name type '$object_type' is not a pin or port.
|
||||
0489 Cmds.tcl:740 pin '$arg' not found.
|
||||
0490 Cmds.tcl:760 $arg_name type '$object_type' is not a port.
|
||||
0491 Sta.tcl:1083 $cmd object is null.
|
||||
0492 Sta.tcl:1088 $cmd $type_key must be specified with object name argument.
|
||||
0493 Sta.tcl:1131 get_property $object is not an object.
|
||||
0494 Sta.tcl:1158 $object_type not supported.
|
||||
0495 Sta.tcl:1161 $object_type '$object_name' not found.
|
||||
0496 Sta.tcl:1478 Directory $spice_dir not found.
|
||||
0497 Sta.tcl:1481 $spice_dir is not a directory.
|
||||
0498 Sta.tcl:1484 Cannot write in $spice_dir.
|
||||
0499 Sta.tcl:1487 No -spice_directory specified.
|
||||
0500 Sta.tcl:1493 -lib_subckt_file $lib_subckt_file is not readable.
|
||||
0501 Sta.tcl:1496 No -lib_subckt_file specified.
|
||||
0502 Sta.tcl:1502 -model_file $model_file is not readable.
|
||||
0503 Sta.tcl:1505 No -model_file specified.
|
||||
0504 Sta.tcl:1511 No -power specified.
|
||||
0505 Sta.tcl:1517 No -ground specified.
|
||||
0506 Sta.tcl:1521 No -path_args specified.
|
||||
0507 Sta.tcl:1526 No paths found for -path_args $path_args.
|
||||
0508 Search.tcl:794 -min and -max cannot both be specified.
|
||||
0509 Search.tcl:814 pin '$pin_arg' is hierarchical.
|
||||
0510 Search.tcl:880 -format $format not recognized.
|
||||
0439 CmdUtil.tcl:209 unsupported object type $list_type.
|
||||
0440 Sta.tcl:158 -from/-to arguments not supported with -of_objects.
|
||||
0441 Sta.tcl:286 unsupported -filter expression.
|
||||
0442 DelayCalc.tcl:148 $cmd missing -from argument.
|
||||
0443 DelayCalc.tcl:153 $cmd missing -to argument.
|
||||
0444 DelayCalc.tcl:158 $cmd delay is not a float.
|
||||
0445 DelayCalc.tcl:163 set_annotated_delay -cell and -net options are mutually excluive.
|
||||
0446 DelayCalc.tcl:169 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst].
|
||||
0447 DelayCalc.tcl:174 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]
|
||||
0448 DelayCalc.tcl:179 $cmd -cell or -net required.
|
||||
0449 DelayCalc.tcl:243 $cmd missing -from argument.
|
||||
0450 DelayCalc.tcl:252 $cmd -clock must be rise or fall.
|
||||
0451 DelayCalc.tcl:259 $cmd missing -to argument.
|
||||
0452 DelayCalc.tcl:274 $cmd missing -setup|-hold|-recovery|-removal check type..
|
||||
0453 DelayCalc.tcl:282 $cmd check_value is not a float.
|
||||
0454 Sdc.tcl:1472 the -all and -name options are mutually exclusive.
|
||||
0455 Sdc.tcl:1475 either -all or -name options must be specified.
|
||||
0456 Sdc.tcl:1483 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
|
||||
0457 Sdc.tcl:1486 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
|
||||
0458 Sdc.tcl:1598 -source '[$pin path_name]' is not a clock pin.
|
||||
0459 Sdc.tcl:1866 -from/-to must be used together.
|
||||
0460 Sdc.tcl:1886 -rise, -fall options not allowed for single clock uncertainty.
|
||||
0461 Sdc.tcl:1987 missing -from, -rise_from or -fall_from argument.
|
||||
0462 Sdc.tcl:1999 missing -to, -rise_to or -fall_to argument.
|
||||
0463 Sdc.tcl:2230 -from/-to hierarchical instance not supported.
|
||||
0464 Sdc.tcl:2632 $cmd command failed.
|
||||
0465 Sdc.tcl:2639 positional arguments not supported.
|
||||
0466 Sdc.tcl:2643 -from, -through or -to required.
|
||||
0467 CmdArgs.tcl:108 unsupported object type $object_type.
|
||||
0468 CmdArgs.tcl:405 $corner_name is not the name of process corner.
|
||||
0469 CmdArgs.tcl:410 -corner keyword required with multi-corner analysis.
|
||||
0470 CmdArgs.tcl:425 $corner_name is not the name of process corner.
|
||||
0471 CmdArgs.tcl:430 missing -corner arg.
|
||||
0472 CmdArgs.tcl:441 $corner_name is not the name of process corner.
|
||||
0473 CmdArgs.tcl:458 $corner_name is not the name of process corner.
|
||||
0474 CmdArgs.tcl:483 both -min and -max specified.
|
||||
0475 CmdArgs.tcl:497 both -min and -max specified.
|
||||
0476 CmdArgs.tcl:524 only one of -early and -late can be specified.
|
||||
0477 CmdArgs.tcl:530 -early or -late must be specified.
|
||||
0478 CmdArgs.tcl:537 both -early and -late specified.
|
||||
0479 CmdArgs.tcl:552 $arg_name must be a single library.
|
||||
0480 CmdArgs.tcl:558 $arg_name type '$object_type' is not a library.
|
||||
0481 CmdArgs.tcl:563 library '$arg' not found.
|
||||
0482 CmdArgs.tcl:580 $arg_name must be a single lib cell.
|
||||
0483 CmdArgs.tcl:636 $arg_name must be a single instance.
|
||||
0484 CmdArgs.tcl:642 $arg_name type '$object_type' is not an instance.
|
||||
0485 CmdArgs.tcl:647 instance '$arg' not found.
|
||||
0486 CmdArgs.tcl:666 $arg_name type '$object_type' is not an instance.
|
||||
0487 CmdArgs.tcl:673 instance '$arg' not found.
|
||||
0488 CmdArgs.tcl:734 $arg_name type '$object_type' is not a pin or port.
|
||||
0489 CmdArgs.tcl:741 pin '$arg' not found.
|
||||
0490 CmdArgs.tcl:761 $arg_name type '$object_type' is not a port.
|
||||
0491 Property.tcl:32 $cmd object is null.
|
||||
0492 Property.tcl:37 $cmd $type_key must be specified with object name argument.
|
||||
0493 Property.tcl:80 get_property $object is not an object.
|
||||
0494 Property.tcl:107 $object_type not supported.
|
||||
0495 Property.tcl:110 $object_type '$object_name' not found.
|
||||
0496 WritePathSpice.tcl:35 Directory $spice_dir not found.
|
||||
0497 WritePathSpice.tcl:38 $spice_dir is not a directory.
|
||||
0498 WritePathSpice.tcl:41 Cannot write in $spice_dir.
|
||||
0499 WritePathSpice.tcl:44 No -spice_directory specified.
|
||||
0500 WritePathSpice.tcl:50 -lib_subckt_file $lib_subckt_file is not readable.
|
||||
0501 WritePathSpice.tcl:53 No -lib_subckt_file specified.
|
||||
0502 WritePathSpice.tcl:59 -model_file $model_file is not readable.
|
||||
0503 WritePathSpice.tcl:62 No -model_file specified.
|
||||
0504 WritePathSpice.tcl:68 No -power specified.
|
||||
0505 WritePathSpice.tcl:74 No -ground specified.
|
||||
0506 WritePathSpice.tcl:78 No -path_args specified.
|
||||
0507 WritePathSpice.tcl:83 No paths found for -path_args $path_args.
|
||||
0508 Search.tcl:788 -min and -max cannot both be specified.
|
||||
0509 Search.tcl:808 pin '$pin_arg' is hierarchical.
|
||||
0510 Search.tcl:874 -format $format not recognized.
|
||||
0511 Sdc.tcl:73 cannot open '$filename'.
|
||||
0512 Sdc.tcl:128 incomplete command at end of file.
|
||||
0513 Sdc.tcl:212 hierarchy separator must be one of '$sdc_dividers'.
|
||||
0514 Sdc.tcl:259 unknown unit $unit '$suffix'.
|
||||
0515 Sdc.tcl:332 unknown $unit unit '$suffix'.
|
||||
0516 Sdc.tcl:602 unsupported instance -filter expression.
|
||||
0517 Sdc.tcl:987 unsupported pin -filter expression.
|
||||
0518 Sdc.tcl:1063 unsupported port -filter expression.
|
||||
0519 Sdc.tcl:1096 -add requires -name.
|
||||
0520 Sdc.tcl:1101 -name or port_pin_list must be specified.
|
||||
0521 Sdc.tcl:1109 missing -period argument.
|
||||
0522 Sdc.tcl:1115 -waveform edge_list must have an even number of edge times.
|
||||
0523 Sdc.tcl:1167 empty ports/pins/nets argument.
|
||||
0524 Sdc.tcl:1175 -add requires -name.
|
||||
0525 Sdc.tcl:1180 name or port_pin_list must be specified.
|
||||
0526 Sdc.tcl:1187 missing -source argument.
|
||||
0527 Sdc.tcl:1202 -master_clock argument empty.
|
||||
0528 Sdc.tcl:1205 -add requireds -master_clock.
|
||||
0529 Sdc.tcl:1209 -multiply_by and -divide_by options are exclusive.
|
||||
0530 Sdc.tcl:1213 -divide_by is not an integer greater than one.
|
||||
0531 Sdc.tcl:1216 -combinational implies -divide_by 1.
|
||||
0532 Sdc.tcl:1221 -multiply_by is not an integer greater than one.
|
||||
0533 Sdc.tcl:1227 -duty_cycle is not a float between 0 and 100.
|
||||
0534 Sdc.tcl:1233 -edges only supported for three edges.
|
||||
0535 Sdc.tcl:1239 edges times are not monotonically increasing.
|
||||
0536 Sdc.tcl:1248 -edge_shift length does not match -edges length.
|
||||
0537 Sdc.tcl:1254 missing -multiply_by, -divide_by, -combinational or -edges argument.
|
||||
0538 Sdc.tcl:1262 cannot specify -invert without -multiply_by, -divide_by or -combinational.
|
||||
0539 Sdc.tcl:1268 -duty_cycle requires -multiply_by value.
|
||||
0545 Sdc.tcl:1304 group_path command failed.
|
||||
0546 Sdc.tcl:1311 positional arguments not supported.
|
||||
0547 Sdc.tcl:1315 -from, -through or -to required.
|
||||
0548 Sdc.tcl:1321 -name and -default are mutually exclusive.
|
||||
0549 Sdc.tcl:1323 -name or -default option is required.
|
||||
0550 Sdc.tcl:1364 cannot specify both -high and -low.
|
||||
0551 Sdc.tcl:1372 missing -setup or -hold argument.
|
||||
0552 Sdc.tcl:1386 -high and -low only permitted for pins and instances.
|
||||
0553 Sdc.tcl:1393 -high and -low only permitted for pins and instances.
|
||||
0554 Sdc.tcl:1436 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
|
||||
0555 Sdc.tcl:1439 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
|
||||
0556 Sdc.tcl:1507 -source '[get_full_name $pin]' is not a clock pin.
|
||||
0557 Sdc.tcl:1514 -early/-late is only allowed with -source.
|
||||
0558 Sdc.tcl:1543 set_sense -type clock|data
|
||||
0559 Sdc.tcl:1612 transition time can not be specified for virtual clocks.
|
||||
0560 Sdc.tcl:1633 missing uncertainty value.
|
||||
0561 Sdc.tcl:1681 -from/-to must be used together.
|
||||
0562 Sdc.tcl:1701 -rise, -fall options not allowed for single clock uncertainty.
|
||||
0563 Sdc.tcl:1742 missing -from, -rise_from or -fall_from argument.
|
||||
0564 Sdc.tcl:1754 missing -to, -rise_to or -fall_to argument.
|
||||
0565 Sdc.tcl:1826 -from/-to hierarchical instance not supported.
|
||||
0566 Sdc.tcl:1858 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found.
|
||||
0567 Sdc.tcl:1899 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found.
|
||||
0568 Sdc.tcl:2084 missing delay argument.
|
||||
0569 Sdc.tcl:2215 missing path multiplier argument.
|
||||
0570 Sdc.tcl:2227 cannot use -start with -end.
|
||||
0571 Sdc.tcl:2295 value must be 0, zero, 1, one, rise, rising, fall, or falling.
|
||||
0572 Sdc.tcl:2353 cell '$lib_name:$cell_name' not found.
|
||||
0573 Sdc.tcl:2359 '$cell_name' not found.
|
||||
0574 Sdc.tcl:2363 missing -lib_cell argument.
|
||||
0575 Sdc.tcl:2371 port '$to_port_name' not found.
|
||||
0576 Sdc.tcl:2383 -pin argument required for cells with multiple outputs.
|
||||
0577 Sdc.tcl:2398 port '$from_port_name' not found.
|
||||
0578 Sdc.tcl:2605 port '[get_name $port]' is not an input.
|
||||
0579 Sdc.tcl:2967 operating condition '$op_cond_name' not found.
|
||||
0580 Sdc.tcl:2985 operating condition '$op_cond_name' not found.
|
||||
0581 Sdc.tcl:2999 -analysis_type must be single, bc_wc or on_chip_variation.
|
||||
0582 Sdc.tcl:3024 mode must be top, enclosed or segmented.
|
||||
0583 Sdc.tcl:3039 no wire load model specified.
|
||||
0584 Sdc.tcl:3100 wire load selection group '$selection_name' not found.
|
||||
0585 Sdc.tcl:3231 no default operating conditions found.
|
||||
0586 NetworkEdit.tcl:50 unsupported object type $object_type.
|
||||
0587 NetworkEdit.tcl:119 unsupported object type $object_type.
|
||||
0588 NetworkEdit.tcl:135 unsupported object type $object_type.
|
||||
0589 Network.tcl:25 unknown namespace $namespc.
|
||||
0590 Network.tcl:55 instance $instance_path not found.
|
||||
0591 Network.tcl:283 net $net_path not found.
|
||||
0592 Network.tcl:286 net $net_path not found.
|
||||
0515 CmdUtil.tcl:161 unknown $unit unit '$suffix'.
|
||||
0516 Sdc.tcl:543 unsupported instance -filter expression.
|
||||
0517 Sdc.tcl:928 unsupported pin -filter expression.
|
||||
0518 Sdc.tcl:1004 unsupported port -filter expression.
|
||||
0519 Sdc.tcl:1037 -add requires -name.
|
||||
0520 Sdc.tcl:1042 -name or port_pin_list must be specified.
|
||||
0521 Sdc.tcl:1050 missing -period argument.
|
||||
0522 Sdc.tcl:1056 -waveform edge_list must have an even number of edge times.
|
||||
0523 Sdc.tcl:1126 empty ports/pins/nets argument.
|
||||
0524 Sdc.tcl:1134 -add requires -name.
|
||||
0525 Sdc.tcl:1139 name or port_pin_list must be specified.
|
||||
0526 Sdc.tcl:1146 missing -source argument.
|
||||
0527 Sdc.tcl:1161 -master_clock argument empty.
|
||||
0528 Sdc.tcl:1164 -add requireds -master_clock.
|
||||
0529 Sdc.tcl:1168 -multiply_by and -divide_by options are exclusive.
|
||||
0530 Sdc.tcl:1172 -divide_by is not an integer greater than one.
|
||||
0531 Sdc.tcl:1175 -combinational implies -divide_by 1.
|
||||
0532 Sdc.tcl:1180 -multiply_by is not an integer greater than one.
|
||||
0533 Sdc.tcl:1186 -duty_cycle is not a float between 0 and 100.
|
||||
0534 Sdc.tcl:1192 -edges only supported for three edges.
|
||||
0535 Sdc.tcl:1198 edges times are not monotonically increasing.
|
||||
0536 Sdc.tcl:1207 -edge_shift length does not match -edges length.
|
||||
0537 Sdc.tcl:1213 missing -multiply_by, -divide_by, -combinational or -edges argument.
|
||||
0538 Sdc.tcl:1221 cannot specify -invert without -multiply_by, -divide_by or -combinational.
|
||||
0539 Sdc.tcl:1227 -duty_cycle requires -multiply_by value.
|
||||
0545 Sdc.tcl:1287 group_path command failed.
|
||||
0546 Sdc.tcl:1294 positional arguments not supported.
|
||||
0547 Sdc.tcl:1298 -from, -through or -to required.
|
||||
0548 Sdc.tcl:1304 -name and -default are mutually exclusive.
|
||||
0549 Sdc.tcl:1306 -name or -default option is required.
|
||||
0550 Sdc.tcl:1347 cannot specify both -high and -low.
|
||||
0551 Sdc.tcl:1355 missing -setup or -hold argument.
|
||||
0552 Sdc.tcl:1369 -high and -low only permitted for pins and instances.
|
||||
0553 Sdc.tcl:1376 -high and -low only permitted for pins and instances.
|
||||
0554 Sdc.tcl:1419 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
|
||||
0555 Sdc.tcl:1422 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
|
||||
0556 Sdc.tcl:1550 -source '[get_full_name $pin]' is not a clock pin.
|
||||
0557 Sdc.tcl:1557 -early/-late is only allowed with -source.
|
||||
0558 Sdc.tcl:1630 set_sense -type clock|data
|
||||
0559 Sdc.tcl:1699 transition time can not be specified for virtual clocks.
|
||||
0560 Sdc.tcl:1732 missing uncertainty value.
|
||||
0561 Sdc.tcl:1780 -from/-to must be used together.
|
||||
0562 Sdc.tcl:1800 -rise, -fall options not allowed for single clock uncertainty.
|
||||
0563 Sdc.tcl:1927 missing -from, -rise_from or -fall_from argument.
|
||||
0564 Sdc.tcl:1939 missing -to, -rise_to or -fall_to argument.
|
||||
0565 Sdc.tcl:2071 -from/-to hierarchical instance not supported.
|
||||
0566 Sdc.tcl:2103 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found.
|
||||
0567 Sdc.tcl:2144 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found.
|
||||
0568 Sdc.tcl:2439 missing delay argument.
|
||||
0569 Sdc.tcl:2570 missing path multiplier argument.
|
||||
0570 Sdc.tcl:2582 cannot use -start with -end.
|
||||
0571 Sdc.tcl:2752 value must be 0, zero, 1, one, rise, rising, fall, or falling.
|
||||
0572 Sdc.tcl:2821 cell '$lib_name:$cell_name' not found.
|
||||
0573 Sdc.tcl:2827 '$cell_name' not found.
|
||||
0574 Sdc.tcl:2831 missing -lib_cell argument.
|
||||
0575 Sdc.tcl:2839 port '$to_port_name' not found.
|
||||
0576 Sdc.tcl:2851 -pin argument required for cells with multiple outputs.
|
||||
0577 Sdc.tcl:2866 port '$from_port_name' not found.
|
||||
0578 Sdc.tcl:3079 port '[get_name $port]' is not an input.
|
||||
0579 Sdc.tcl:3453 operating condition '$op_cond_name' not found.
|
||||
0580 Sdc.tcl:3471 operating condition '$op_cond_name' not found.
|
||||
0581 Sdc.tcl:3485 -analysis_type must be single, bc_wc or on_chip_variation.
|
||||
0582 Sdc.tcl:3510 mode must be top, enclosed or segmented.
|
||||
0583 Sdc.tcl:3525 no wire load model specified.
|
||||
0584 Sdc.tcl:3586 wire load selection group '$selection_name' not found.
|
||||
0585 Sdc.tcl:3717 no default operating conditions found.
|
||||
0586 NetworkEdit.tcl:99 unsupported object type $object_type.
|
||||
0587 NetworkEdit.tcl:198 unsupported object type $object_type.
|
||||
0588 NetworkEdit.tcl:216 unsupported object type $object_type.
|
||||
0589 CmdUtil.tcl:226 unknown namespace $namespc.
|
||||
0590 Network.tcl:35 instance $instance_path not found.
|
||||
0591 Network.tcl:241 net $net_path not found.
|
||||
0592 Network.tcl:244 net $net_path not found.
|
||||
0593 Link.tcl:34 missing top_cell_name argument and no current_design.
|
||||
0594 DelayNormal1.cc:203 unknown early/late value.
|
||||
0595 DelayNormal2.cc:378 unknown early/late value.
|
||||
0596 Sim.cc:205 unknown function operator
|
||||
0596 Sim.cc:210 unknown function operator
|
||||
0597 EstimateParasitics.cc:188 load pin not leaf or top level
|
||||
0600 Sdc.tcl:1940 '$args' ignored.
|
||||
0601 Sdc.tcl:2439 set_fanout_load not supported.
|
||||
0602 Sdc.tcl:2899 no valid objects specified for $key.
|
||||
0603 NetworkEdit.tcl:172 disconnect_pins is deprecated. Use disconnect_pin.
|
||||
0600 Sdc.tcl:2284 '$args' ignored.
|
||||
0601 Sdc.tcl:2913 set_fanout_load not supported.
|
||||
0602 Sdc.tcl:3385 no valid objects specified for $key.
|
||||
0604 Sdc.tcl:281 unknown $unit prefix '$prefix'.
|
||||
0605 Sdc.tcl:3061 wire load model '$model_name' not found.
|
||||
0606 Sta.tcl:1128 get_property unsupported object type $object_type.
|
||||
0607 StaTcl.i:4415 unknown report path field %s
|
||||
0608 StaTcl.i:4427 unknown report path field %s
|
||||
0609 Search.tcl:427 -all_violators is deprecated. Use -violators
|
||||
0610 Search.tcl:507 -max_transition deprecated. Use -max_slew.
|
||||
0611 Search.tcl:512 -min_transition deprecated. Use -min_slew.
|
||||
0605 Sdc.tcl:3547 wire load model '$model_name' not found.
|
||||
0606 Property.tcl:77 get_property unsupported object type $object_type.
|
||||
0607 StaTcl.i:4257 unknown report path field %s
|
||||
0608 StaTcl.i:4269 unknown report path field %s
|
||||
0609 Search.tcl:421 -all_violators is deprecated. Use -violators
|
||||
0610 Search.tcl:501 -max_transition deprecated. Use -max_slew.
|
||||
0611 Search.tcl:506 -min_transition deprecated. Use -min_slew.
|
||||
0612 Sdf.tcl:41 -cond_use must be min, max or min_max.
|
||||
0616 Search.tcl:1024 specify one of -setup and -hold.
|
||||
0616 Search.tcl:1018 specify one of -setup and -hold.
|
||||
0617 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type.
|
||||
0618 DmpCeff.cc:1581 parasitic Pi model has NaNs.
|
||||
0619 PathEnum.cc:474 path diversion missing edge.
|
||||
|
|
@ -481,16 +480,23 @@
|
|||
0702 LibertyWriter.cc:436 3 axis table models not supported.
|
||||
0703 LibertyWriter.cc:576 %s/%s/%s timing arc type %s not supported.
|
||||
0704 LibertyWriter.cc:289 %s/%s bundled ports not supported.
|
||||
0705 Liberty.cc:793 Liberty cell %s/%s for corner %s/%s not found
|
||||
0705 Liberty.cc:794 Liberty cell %s/%s for corner %s/%s not found.
|
||||
0706 Parasitics.tcl:70 read_spef -increment is deprecated.
|
||||
0710 LumpedCapDelayCalc.cc:168 gate delay input variable is NaN
|
||||
0710 LumpedCapDelayCalc.cc:169 gate delay input variable is NaN
|
||||
0800 VcdReader.cc:109 unhandled vcd command.
|
||||
0801 VcdReader.cc:145 timescale syntax error.
|
||||
0802 VcdReader.cc:159 Unknown timescale unit.
|
||||
0804 VcdReader.cc:200 Variable syntax error.
|
||||
0805 Vcd.cc:172 Unknown variable %s ID %s
|
||||
0806 ReadVcdActivities.cc:227 clock %s vcd period %s differs from SDC clock period %s
|
||||
0807 Sdc.tcl:453 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported.
|
||||
0810 MakeTimingModel.cc:188 clock %s pin %s is inside model block.
|
||||
0900 LibertyReader.cc:2533 level_shifter_type must be HL, LH, or HL_LH
|
||||
0901 LibertyReader.cc:2569 switch_cell_type must be coarse_grain or fine_grain
|
||||
0806 ReadVcdActivities.cc:251 clock %s vcd period %s differs from SDC clock period %s
|
||||
0807 Sdc.tcl:394 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported.
|
||||
0810 MakeTimingModel.cc:189 clock %s pin %s is inside model block.
|
||||
0900 LibertyReader.cc:2757 level_shifter_type must be HL, LH, or HL_LH
|
||||
0901 LibertyReader.cc:2793 switch_cell_type must be coarse_grain or fine_grain
|
||||
0902 LibertyReader.cc:2460 unsupported model axis.
|
||||
0903 LibertyReader.cc:4131 %s group not in timing group.
|
||||
0904 LibertyReader.cc:2443 receiver_capacitance group not in timing or pin group.
|
||||
0906 LibertyReader.cc:4024 unsupported model axis.
|
||||
0907 LibertyReader.cc:2486 output_current_%s group not in timing group.
|
||||
0908 LibertyReader.cc:2571 vector reference_time not found.
|
||||
0912 LibertyReader.cc:2569 vector index_1 and index_2 must have one value.
|
||||
|
|
|
|||
|
|
@ -524,7 +524,8 @@ MakeTimingModel::makeGateModelScalar(Delay delay,
|
|||
TableModel *slew_model = new TableModel(slew_table, tbl_template,
|
||||
ScaleFactorType::cell, rf);
|
||||
GateTableModel *gate_model = new GateTableModel(delay_model, nullptr,
|
||||
slew_model, nullptr);
|
||||
slew_model, nullptr,
|
||||
nullptr, nullptr);
|
||||
return gate_model;
|
||||
}
|
||||
|
||||
|
|
@ -606,7 +607,8 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin,
|
|||
TableModel *slew_model = new TableModel(slew_table, tbl_template,
|
||||
ScaleFactorType::cell, rf);
|
||||
GateTableModel *gate_model = new GateTableModel(delay_model, nullptr,
|
||||
slew_model, nullptr);
|
||||
slew_model, nullptr,
|
||||
nullptr, nullptr);
|
||||
return gate_model;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue