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