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:
James Cherry 2023-02-08 09:23:24 -07:00
parent 72d63492dd
commit ab698d2549
11 changed files with 1104 additions and 496 deletions

View File

@ -85,7 +85,7 @@ enum class DelayModelType { cmos_linear, cmos_pwl, cmos2, table, polynomial, dcm
enum class ScaleFactorPvt { process, volt, temp, unknown };
constexpr int scale_factor_pvt_count = int(ScaleFactorPvt::unknown) + 1;
enum class TableTemplateType { delay, power, output_current, ocv };
enum class TableTemplateType { delay, power, output_current, capacitance, ocv };
constexpr int table_template_type_count = int(TableTemplateType::ocv) + 1;
enum class LevelShifterType { HL, LH, HL_LH };
@ -778,6 +778,8 @@ public:
void setRelatedGroundPin(const char *related_ground_pin);
const char *relatedPowerPin() const { return related_power_pin_; }
void setRelatedPowerPin(const char *related_power_pin);
ReceiverModelPtr receiverModel() const { return receiver_model_; }
void setReceiverModel(ReceiverModelPtr receiver_model);
static bool equiv(const LibertyPort *port1,
const LibertyPort *port2);
@ -817,6 +819,7 @@ protected:
const char *related_ground_pin_;
const char *related_power_pin_;
Vector<LibertyPort*> corner_ports_;
ReceiverModelPtr receiver_model_;
unsigned int min_pulse_width_exists_:RiseFall::index_count;
bool min_period_exists_:1;

View File

@ -57,6 +57,7 @@ class TimingRole;
class Transition;
class RiseFall;
class RiseFallBoth;
class ReceiverModel;
typedef Vector<LibertyLibrary*> LibertyLibrarySeq;
typedef Vector<LibertyCell*> LibertyCellSeq;
@ -66,11 +67,10 @@ typedef Vector<LibertyPort*> LibertyPortSeq;
typedef Set<LibertyPort*> LibertyPortSet;
typedef std::pair<const LibertyPort*,const LibertyPort*> LibertyPortPair;
typedef Set<LibertyCell*> LibertyCellSet;
typedef Vector<float> FloatSeq;
typedef Vector<FloatSeq*> FloatTable;
typedef std::shared_ptr<Table> TablePtr;
typedef std::shared_ptr<TimingArcAttrs> TimingArcAttrsPtr;
typedef std::shared_ptr<TableAxis> TableAxisPtr;
typedef std::shared_ptr<ReceiverModel> ReceiverModelPtr;
enum class ScaleFactorType : unsigned {
pin_cap,

View File

@ -33,6 +33,12 @@ class Unit;
class Units;
class Report;
class Table;
class OutputCurrent;
class OutputCurrentWaveform;
typedef Vector<float> FloatSeq;
typedef Vector<FloatSeq*> FloatTable;
typedef Vector<OutputCurrentWaveform*> OutputCurrentWaveformSeq;
TableAxisVariable
stringTableAxisVariable(const char *variable);
@ -48,7 +54,9 @@ public:
GateTableModel(TableModel *delay_model,
TableModel *delay_sigma_models[EarlyLate::index_count],
TableModel *slew_model,
TableModel *slew_sigma_models[EarlyLate::index_count]);
TableModel *slew_sigma_models[EarlyLate::index_count],
ReceiverModelPtr receiver_model,
OutputCurrent *output_current);
virtual ~GateTableModel();
virtual void gateDelay(const LibertyCell *cell,
const Pvt *pvt,
@ -118,6 +126,8 @@ protected:
TableModel *delay_sigma_models_[EarlyLate::index_count];
TableModel *slew_model_;
TableModel *slew_sigma_models_[EarlyLate::index_count];
ReceiverModelPtr receiver_model_;
OutputCurrent *output_current_;
};
class CheckTableModel : public CheckTimingModel
@ -223,7 +233,8 @@ public:
const char *comment1,
float value2,
float value3,
int digits,
const Unit *table_unit,
int digits,
string *result) const;
void report(const Units *units,
Report *report) const;
@ -246,7 +257,7 @@ protected:
bool is_scaled_:1;
};
// Abstract base class for tables.
// Abstract base class for 0, 1, 2, or 3 dimesnion float tables.
class Table
{
public:
@ -280,6 +291,7 @@ public:
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const = 0;
virtual void report(const Units *units,
@ -306,6 +318,7 @@ public:
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const;
virtual void report(const Units *units,
@ -340,6 +353,7 @@ public:
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const;
virtual void report(const Units *units,
@ -370,6 +384,7 @@ public:
virtual float findValue(float value1,
float value2,
float value3) const;
FloatTable *values3() { return values_; }
virtual void reportValue(const char *result_name,
const LibertyLibrary *library,
const LibertyCell *cell,
@ -378,6 +393,7 @@ public:
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const;
virtual void report(const Units *units,
@ -417,6 +433,7 @@ public:
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const;
virtual void report(const Units *units,
@ -434,10 +451,16 @@ public:
FloatSeq *values);
~TableAxis();
TableAxisVariable variable() const { return variable_; }
const char *variableString() const;
const Unit *unit(const Units *units);
size_t size() const { return values_->size(); }
float axisValue(size_t index) const { return (*values_)[index]; }
// Find the index for value such that axis[index] <= value < axis[index+1].
size_t findAxisIndex(float value) const;
void findAxisIndex(float value,
// Return values.
size_t &index,
bool &exists) const;
FloatSeq *values() const { return values_; }
private:
@ -445,4 +468,79 @@ private:
FloatSeq *values_;
};
////////////////////////////////////////////////////////////////
class ReceiverModel
{
public:
ReceiverModel();
~ReceiverModel();
void setCapacitanceModel(TableModel *table_model,
int index,
RiseFall *rf);
static bool checkAxes(TablePtr table);
private:
TableModel *capacitance_models_[2][RiseFall::index_count];
};
class OutputCurrentWaveform
{
public:
OutputCurrentWaveform(float axis_value1,
float axis_value2,
TableAxisPtr axis,
Table1 *currents,
float reference_time);
~OutputCurrentWaveform();
float axisValue1() const { return axis_value1_; }
float axisValue2() const { return axis_value2_; }
TableAxisPtr axis() const { return axis_; }
Table1 *currents() const { return currents_; }
float referenceTime() const { return reference_time_; }
void reportWaveform(const Units *units,
int digits,
string *result);
static bool checkAxes(TableTemplate *tbl_template);
private:
float axis_value1_;
float axis_value2_;
TableAxisPtr axis_;
Table1 *currents_;
float reference_time_;
};
// Two dimensional table of one dimensional time/current tables.
class OutputCurrent
{
public:
OutputCurrent(TableAxisPtr axis1,
TableAxisPtr axis2,
Vector<OutputCurrentWaveform*> &waveforms);
~OutputCurrent();
void reportWaveform(const LibertyCell *cell,
const Pvt *pvt,
float in_slew,
float load_cap,
int digits,
string *result) const;
private:
void findAxisValues(float in_slew,
float load_cap,
// Return values.
float &axis_value1,
float &axis_value2) const;
float axisValue(TableAxisPtr axis,
float in_slew,
float load_cap) const;
// Row.
TableAxisPtr axis1_;
// Column.
TableAxisPtr axis2_;
OutputCurrentWaveformSeq waveforms_;
};
} // namespace

View File

@ -24,7 +24,7 @@ namespace sta {
using std::string;
// Abstract base class for timing models.
// Abstract base class for GateTimingModel and CheckTimingModel.
class TimingModel
{
public:
@ -36,7 +36,7 @@ protected:
friend class LibertyCell;
};
// Abstract base class for gate timing models.
// Abstract base class for LinearModel and TableModel.
class GateTimingModel : public TimingModel
{
public:

View File

@ -19,6 +19,7 @@
#include "FuncExpr.hh"
#include "TableModel.hh"
#include "Liberty.hh"
#include "Units.hh"
namespace sta {
@ -152,7 +153,8 @@ InternalPowerModel::reportPower(const LibertyCell *cell,
axis_value1, axis_value2, axis_value3);
const LibertyLibrary *library = cell->libertyLibrary();
model_->reportValue("Power", library, cell, pvt,
axis_value1, nullptr, axis_value2, axis_value3, digits, result);
axis_value1, nullptr, axis_value2, axis_value3,
library->units()->powerUnit(), digits, result);
}
}
@ -212,9 +214,9 @@ InternalPowerModel::axisValue(TableAxisPtr axis,
bool
InternalPowerModel::checkAxes(const TableModel *model)
{
TableAxisPtr axis1 = model->axis1();
TableAxisPtr axis2 = model->axis2();
TableAxisPtr axis3 = model->axis3();
const TableAxisPtr axis1 = model->axis1();
const TableAxisPtr axis2 = model->axis2();
const TableAxisPtr axis3 = model->axis3();
bool axis_ok = true;
if (axis1)
axis_ok &= checkAxis(model->axis1());

View File

@ -1919,6 +1919,7 @@ LibertyPort::LibertyPort(LibertyCell *cell,
pulse_clk_sense_(nullptr),
related_ground_pin_(nullptr),
related_power_pin_(nullptr),
receiver_model_(nullptr),
min_pulse_width_exists_(false),
min_period_exists_(false),
is_clk_(false),
@ -2492,6 +2493,12 @@ LibertyPort::setRelatedPowerPin(const char *related_power_pin)
related_power_pin_ = stringCopy(related_power_pin);
}
void
LibertyPort::setReceiverModel(ReceiverModelPtr receiver_model)
{
receiver_model_ = receiver_model;
}
////////////////////////////////////////////////////////////////
LibertyPortSeq

View File

@ -127,6 +127,8 @@ LibertyReader::readLibertyFile(const char *filename,
internal_power_ = nullptr;
leakage_power_ = nullptr;
table_ = nullptr;
rf_ = nullptr;
index_ = 0;
table_model_scale_ = 1.0;
mode_def_ = nullptr;
mode_value_ = nullptr;
@ -134,6 +136,7 @@ LibertyReader::readLibertyFile(const char *filename,
pg_port_ = nullptr;
have_resistance_unit_ = false;
default_operating_condition_ = nullptr;
receiver_model_ = nullptr;
for (auto rf_index : RiseFall::rangeIndex()) {
have_input_threshold_[rf_index] = false;
@ -474,6 +477,34 @@ LibertyReader::defineVisitors()
&LibertyReader::endPgPin);
defineAttrVisitor("pg_type", &LibertyReader::visitPgType);
defineAttrVisitor("voltage_name", &LibertyReader::visitVoltageName);
// ccs receiver
defineGroupVisitor("receiver_capacitance",
&LibertyReader::beginReceiverCapacitance,
&LibertyReader::endReceiverCapacitance);
defineGroupVisitor("receiver_capacitance1_rise",
&LibertyReader::beginReceiverCapacitance1Rise,
&LibertyReader::endReceiverCapacitanceRiseFall);
defineGroupVisitor("receiver_capacitance1_fall",
&LibertyReader::beginReceiverCapacitance1Fall,
&LibertyReader::endReceiverCapacitanceRiseFall);
defineGroupVisitor("receiver_capacitance2_rise",
&LibertyReader::beginReceiverCapacitance2Rise,
&LibertyReader::endReceiverCapacitanceRiseFall);
defineGroupVisitor("receiver_capacitance2_fall",
&LibertyReader::beginReceiverCapacitance2Fall,
&LibertyReader::endReceiverCapacitanceRiseFall);
// ccs
defineGroupVisitor("output_current_rise",
&LibertyReader::beginOutputCurrentRise,
&LibertyReader::endOutputCurrentRiseFall);
defineGroupVisitor("output_current_fall",
&LibertyReader::beginOutputCurrentFall,
&LibertyReader::endOutputCurrentRiseFall);
defineGroupVisitor("vector",
&LibertyReader::beginVector,
&LibertyReader::endVector);
defineAttrVisitor("reference_time", &LibertyReader::visitReferenceTime);
}
void
@ -1326,6 +1357,7 @@ LibertyReader::endTableTemplate(LibertyGroup *group)
if (axis3)
tbl_template_->setAxis3(axis3);
tbl_template_ = nullptr;
axis_var_[0] = axis_var_[1] = axis_var_[2] = TableAxisVariable::unknown;
}
}
@ -1335,13 +1367,15 @@ LibertyReader::makeAxis(int index,
{
TableAxisVariable axis_var = axis_var_[index];
FloatSeq *axis_values = axis_values_[index];
if (axis_var != TableAxisVariable::unknown && axis_values) {
const Units *units = library_->units();
float scale = tableVariableUnit(axis_var, units)->scale();
scaleFloats(axis_values, scale);
if (axis_var != TableAxisVariable::unknown) {
if (axis_values) {
const Units *units = library_->units();
float scale = tableVariableUnit(axis_var, units)->scale();
scaleFloats(axis_values, scale);
}
return std::make_shared<TableAxis>(axis_var, axis_values);
}
else if (axis_var == TableAxisVariable::unknown && axis_values) {
else if (axis_values) {
libWarn(62, group, "missing variable_%d attribute.", index + 1);
delete axis_values;
axis_values_[index] = nullptr;
@ -2237,16 +2271,19 @@ TimingGroup::makeLinearModels(LibertyLibrary *library)
}
void
TimingGroup::makeTableModels(LibertyReader *visitor)
TimingGroup::makeTableModels(LibertyReader *reader)
{
for (auto rf : RiseFall::range()) {
int rf_index = rf->index();
TableModel *cell = cell_[rf_index];
TableModel *constraint = constraint_[rf_index];
TableModel *transition = transition_[rf_index];
TableModel *constraint = constraint_[rf_index];
if (cell || transition) {
attrs_->setModel(rf, new GateTableModel(cell, delay_sigma_[rf_index],
transition, slew_sigma_[rf_index]));
transition,
slew_sigma_[rf_index],
receiver_model_,
output_current_[rf_index]));
TimingType timing_type = attrs_->timingType();
if (timing_type == TimingType::clear
|| timing_type == TimingType::combinational
@ -2262,12 +2299,11 @@ TimingGroup::makeTableModels(LibertyReader *visitor)
|| timing_type == TimingType::three_state_enable_fall
|| timing_type == TimingType::three_state_enable_rise) {
if (transition == nullptr)
visitor->libWarn(95, line_, "missing %s_transition.", rf->name());
reader->libWarn(95, line_, "missing %s_transition.", rf->name());
if (cell == nullptr)
visitor->libWarn(96, line_, "missing cell_%s.", rf->name());
reader->libWarn(96, line_, "missing cell_%s.", rf->name());
}
}
if (constraint)
} else if (constraint)
attrs_->setModel(rf, new CheckTableModel(constraint,
constraint_sigma_[rf_index]));
}
@ -2352,6 +2388,196 @@ LibertyReader::makeTimingArcs(const char *from_port_name,
////////////////////////////////////////////////////////////////
void
LibertyReader::beginReceiverCapacitance(LibertyGroup *)
{
receiver_model_ = make_shared<ReceiverModel>();
}
void
LibertyReader::endReceiverCapacitance(LibertyGroup *)
{
if (ports_) {
for (LibertyPort *port : *ports_)
port->setReceiverModel(receiver_model_);
}
receiver_model_ = nullptr;
}
void
LibertyReader::beginReceiverCapacitance1Rise(LibertyGroup *group)
{
beginReceiverCapacitance(group, 0, RiseFall::rise());
}
void
LibertyReader::beginReceiverCapacitance1Fall(LibertyGroup *group)
{
beginReceiverCapacitance(group, 0, RiseFall::fall());
}
void
LibertyReader::beginReceiverCapacitance2Rise(LibertyGroup *group)
{
beginReceiverCapacitance(group, 1, RiseFall::rise());
}
void
LibertyReader::beginReceiverCapacitance2Fall(LibertyGroup *group)
{
beginReceiverCapacitance(group, 1, RiseFall::fall());
}
void
LibertyReader::beginReceiverCapacitance(LibertyGroup *group,
int index,
RiseFall *rf)
{
if (timing_ || ports_) {
beginTableModel(group, TableTemplateType::delay, rf, 1.0,
ScaleFactorType::pin_cap);
index_ = index;
}
else
libWarn(904, group, "receiver_capacitance group not in timing or pin group.");
}
void
LibertyReader::endReceiverCapacitanceRiseFall(LibertyGroup *group)
{
if (table_) {
if (ReceiverModel::checkAxes(table_)) {
TableModel *table_model = new TableModel(table_, tbl_template_,
scale_factor_type_, rf_);
if (timing_ && receiver_model_ == nullptr) {
receiver_model_ = make_shared<ReceiverModel>();
timing_->setReceiverModel(receiver_model_);
}
receiver_model_->setCapacitanceModel(table_model, index_, rf_);
}
else
libWarn(902, group, "unsupported model axis.");
}
endTableModel();
}
////////////////////////////////////////////////////////////////
void
LibertyReader::beginOutputCurrentRise(LibertyGroup *group)
{
beginOutputCurrent(RiseFall::rise(), group);
}
void
LibertyReader::beginOutputCurrentFall(LibertyGroup *group)
{
beginOutputCurrent(RiseFall::fall(), group);
}
void
LibertyReader::beginOutputCurrent(RiseFall *rf,
LibertyGroup *group)
{
if (timing_)
rf_ = rf;
else
libWarn(907, group, "output_current_%s group not in timing group.",
rf->name());
}
void
LibertyReader::endOutputCurrentRiseFall(LibertyGroup *group)
{
Set<float> axis_set1, axis_set2;
FloatSeq *axis_values1 = new FloatSeq;
FloatSeq *axis_values2 = new FloatSeq;
for (OutputCurrentWaveform *waveform : output_current_waveforms_) {
float axis_value1 = waveform->axisValue1();
if (!axis_set1.hasKey(axis_value1)) {
axis_set1.insert(axis_value1);
axis_values1->push_back(axis_value1);
}
float axis_value2 = waveform->axisValue2();
if (!axis_set2.hasKey(axis_value2)) {
axis_set2.insert(axis_value2);
axis_values2->push_back(axis_value2);
}
}
sort(axis_values1, std::less<float>());
sort(axis_values2, std::less<float>());
TableAxisPtr axis1 = std::make_shared<TableAxis>(axis_[0]->variable(),
axis_values1);
TableAxisPtr axis2 = std::make_shared<TableAxis>(axis_[1]->variable(),
axis_values2);
Vector<OutputCurrentWaveform*> waveforms(axis1->size() * axis2->size());
for (OutputCurrentWaveform *waveform : output_current_waveforms_) {
size_t index1, index2;
bool exists1, exists2;
axis1->findAxisIndex(waveform->axisValue1(), index1, exists1);
axis2->findAxisIndex(waveform->axisValue2(), index2, exists2);
if (exists1 && exists2) {
size_t index = index1 * axis2->size() + index2;
waveforms[index] = waveform;
}
else
libWarn(913, group, "output current waveform %.2e %.2e not found.",
waveform->axisValue1(),
waveform->axisValue2());
}
OutputCurrent *output_current = new OutputCurrent(axis1, axis2, waveforms);
timing_->setOutputCurrent(rf_, output_current);
}
void
LibertyReader::beginVector(LibertyGroup *group)
{
if (timing_) {
beginTable(group, TableTemplateType::output_current, 1.0);
scale_factor_type_ = ScaleFactorType::unknown;
reference_time_exists_ = false;
if (!OutputCurrentWaveform::checkAxes(tbl_template_))
libWarn(118, group, "unsupported model axis.");
}
}
void
LibertyReader::visitReferenceTime(LibertyAttr *attr)
{
getAttrFloat(attr, reference_time_, reference_time_exists_);
}
void
LibertyReader::endVector(LibertyGroup *group)
{
FloatSeq *axis_values1 = axis_values_[0];
FloatSeq *axis_values2 = axis_values_[1];
if (axis_values1->size() == 1 && axis_values2->size() == 1) {
// Convert 1x1xN Table3 to Table1.
float axis_value1 = (*axis_values1)[0];
float axis_value2 = (*axis_values2)[0];
Table3 *table3 = dynamic_cast<Table3*>(table_.get());
FloatTable *values3 = table3->values3();
// Steal the values.
FloatSeq *values = (*values3)[0];
(*values3)[0] = nullptr;
Table1 *table1 = new Table1(values, axis_[2]);
OutputCurrentWaveform *waveform = new OutputCurrentWaveform(axis_value1,
axis_value2,
axis_[2], table1,
reference_time_);
output_current_waveforms_.push_back(waveform);
}
else
libWarn(912, group->line(), "vector index_1 and index_2 must have one value.");
if (!reference_time_exists_)
libWarn(908, group->line(), "vector reference_time not found.");
reference_time_exists_ = false;
}
///////////////////////////////////////////////////////////////
void
LibertyReader::makeInternalPowers(LibertyPort *port,
InternalPowerGroup *power_group)
@ -2910,9 +3136,7 @@ LibertyReader::visitDirection(LibertyAttr *attr)
else
libWarn(109, attr, "unknown port direction.");
LibertyPortSeq::Iterator port_iter(ports_);
while (port_iter.hasNext()) {
LibertyPort *port = port_iter.next();
for (LibertyPort *port : *ports_) {
// Tristate enable function sets direction to tristate; don't
// clobber it.
if (!port->direction()->isTristate())
@ -3554,17 +3778,11 @@ void
LibertyReader::beginTiming(LibertyGroup *group)
{
if (port_group_) {
timing_ = makeTimingGroup(group->line());
timing_ = new TimingGroup(group->line());
port_group_->addTimingGroup(timing_);
}
}
TimingGroup *
LibertyReader::makeTimingGroup(int line)
{
return new TimingGroup(line);
}
void
LibertyReader::endTiming(LibertyGroup *group)
{
@ -3579,8 +3797,9 @@ LibertyReader::endTiming(LibertyGroup *group)
}
if (timing_->relatedPortNames() == nullptr)
libWarn(170, group, "timing group missing related_pin/related_bus_pin.");
timing_ = nullptr;
}
timing_ = nullptr;
receiver_model_ = nullptr;
}
void
@ -3806,7 +4025,7 @@ LibertyReader::endCellRiseFall(LibertyGroup *group)
timing_->setCell(rf_, table_model);
}
else
libWarn(118, group, "unsupported model axis.");
libWarn(906, group, "unsupported model axis.");
}
endTableModel();
}
@ -3912,6 +4131,8 @@ LibertyReader::beginTimingTableModel(LibertyGroup *group,
if (timing_)
beginTableModel(group, TableTemplateType::delay, rf,
time_scale_, scale_factor_type);
else
libWarn(903, group, "%s group not in timing group.", group->firstName());
}
void
@ -3931,6 +4152,9 @@ void
LibertyReader::endTableModel()
{
endTable();
scale_factor_type_ = ScaleFactorType::unknown;
sigma_type_ = nullptr;
index_ = 0;
}
void
@ -3993,6 +4217,7 @@ LibertyReader::makeTable(LibertyAttr *attr,
makeTableAxis(1);
makeTableAxis(2);
if (axis_[0] && axis_[1] && axis_[2]) {
// 3D table
// Column index1*size(index2) + index2
// Row index3
FloatTable *table = makeFloatTable(attr,
@ -4001,6 +4226,7 @@ LibertyReader::makeTable(LibertyAttr *attr,
table_ = make_shared<Table3>(table, axis_[0], axis_[1], axis_[2]);
}
else if (axis_[0] && axis_[1]) {
// 2D table
// Row variable1/axis[0]
// Column variable2/axis[1]
FloatTable *table = makeFloatTable(attr, axis_[0]->size(),
@ -4008,12 +4234,14 @@ LibertyReader::makeTable(LibertyAttr *attr,
table_ = make_shared<Table2>(table, axis_[0], axis_[1]);
}
else if (axis_[0]) {
// 1D table
FloatTable *table = makeFloatTable(attr, 1, axis_[0]->size(), scale);
FloatSeq *values = (*table)[0];
delete table;
table_ = make_shared<Table1>(values, axis_[0]);
}
else {
// scalar
FloatTable *table = makeFloatTable(attr, 1, 1, scale);
float value = (*(*table)[0])[0];
delete (*table)[0];
@ -4377,6 +4605,10 @@ LibertyReader::readFloatSeq(LibertyAttr *attr,
values = new FloatSeq;
parseStringFloatList(value->stringValue(), scale, values, attr);
}
else if (value->isFloat()) {
values = new FloatSeq;
values->push_back(value->floatValue());
}
else
libWarn(140, attr, "%s is missing values.", attr->name());
}
@ -5115,7 +5347,8 @@ RelatedPortGroup::setIsOneToOne(bool one)
TimingGroup::TimingGroup(int line) :
RelatedPortGroup(line),
attrs_(std::make_shared<TimingArcAttrs>()),
related_output_port_name_(nullptr)
related_output_port_name_(nullptr),
receiver_model_(nullptr)
{
for (auto rf_index : RiseFall::rangeIndex()) {
cell_[rf_index] = nullptr;
@ -5125,6 +5358,7 @@ TimingGroup::TimingGroup(int line) :
intrinsic_exists_[rf_index] = false;
resistance_[rf_index] = 0.0F;
resistance_exists_[rf_index] = false;
output_current_[rf_index] = nullptr;
for (auto el_index : EarlyLate::rangeIndex()) {
delay_sigma_[rf_index][el_index] = nullptr;
@ -5249,6 +5483,25 @@ TimingGroup::setConstraintSigma(RiseFall *rf,
constraint_sigma_[rf->index()][early_late->index()] = model;
}
void
TimingGroup::setReceiverModel(ReceiverModelPtr receiver_model)
{
receiver_model_ = receiver_model;
}
OutputCurrent *
TimingGroup::outputCurrent(RiseFall *rf)
{
return output_current_[rf->index()];
}
void
TimingGroup::setOutputCurrent(RiseFall *rf,
OutputCurrent *output_current)
{
output_current_[rf->index()] = output_current;
}
////////////////////////////////////////////////////////////////
InternalPowerGroup::InternalPowerGroup(int line) :

View File

@ -57,6 +57,7 @@ typedef Vector<TimingGroup*> TimingGroupSeq;
typedef Vector<InternalPowerGroup*> InternalPowerGroupSeq;
typedef Vector<LeakagePowerGroup*> LeakagePowerGroupSeq;
typedef void (LibertyPort::*LibertyPortBoolSetter)(bool value);
typedef Vector<OutputCurrentWaveform*> OutputCurrentWaveformSeq;
class LibertyReader : public LibertyGroupVisitor
{
@ -297,7 +298,6 @@ public:
virtual void beginTiming(LibertyGroup *group);
virtual void endTiming(LibertyGroup *group);
virtual TimingGroup *makeTimingGroup(int line);
virtual void visitRelatedPin(LibertyAttr *attr);
virtual void visitRelatedPin(LibertyAttr *attr,
RelatedPortGroup *group);
@ -419,6 +419,30 @@ public:
virtual void visitPgType(LibertyAttr *attr);
virtual void visitVoltageName(LibertyAttr *attr);
// ccs receiver
virtual void beginReceiverCapacitance(LibertyGroup *group);
virtual void endReceiverCapacitance(LibertyGroup *group);
virtual void beginReceiverCapacitance1Rise(LibertyGroup *group);
virtual void endReceiverCapacitanceRiseFall(LibertyGroup *group);
virtual void beginReceiverCapacitance1Fall(LibertyGroup *group);
virtual void beginReceiverCapacitance2Rise(LibertyGroup *group);
virtual void beginReceiverCapacitance2Fall(LibertyGroup *group);
void beginReceiverCapacitance(LibertyGroup *group,
int index,
RiseFall *rf);
void endReceiverCapacitance(LibertyGroup *group,
int index,
RiseFall *rf);
// ccs
void beginOutputCurrentRise(LibertyGroup *group);
void beginOutputCurrentFall(LibertyGroup *group);
void beginOutputCurrent(RiseFall *rf,
LibertyGroup *group);
void endOutputCurrentRiseFall(LibertyGroup *group);
void beginVector(LibertyGroup *group);
void endVector(LibertyGroup *group);
void visitReferenceTime(LibertyAttr *attr);
// Visitors for derived classes to overload.
virtual void beginGroup1(LibertyGroup *) {}
virtual void beginGroup2(LibertyGroup *) {}
@ -453,6 +477,7 @@ protected:
void parseNames(const char *name_str);
void clearAxisValues();
void makeTableAxis(int index);
StringSeq *parseNameList(const char *name_list);
LibertyPort *findPort(const char *port_name);
LibertyPort *findPort(LibertyCell *cell,
@ -567,6 +592,7 @@ protected:
LeakagePowerGroup *leakage_power_;
LeakagePowerGroupSeq leakage_powers_;
RiseFall *rf_;
int index_;
OcvDerate *ocv_derate_;
RiseFallBoth *rf_type_;
EarlyLateAll *derate_type_;
@ -590,6 +616,12 @@ protected:
float distance_scale_;
bool have_resistance_unit_;
const char *default_operating_condition_;
ReceiverModelPtr receiver_model_;
OutputCurrentWaveformSeq output_current_waveforms_;
OutputCurrent *output_current_;
float reference_time_;
bool reference_time_exists_;
static constexpr char escape_ = '\\';
private:
@ -636,12 +668,15 @@ public:
void addTimingGroup(TimingGroup *timing);
InternalPowerGroupSeq *internalPowerGroups() { return &internal_power_groups_; }
void addInternalPowerGroup(InternalPowerGroup *internal_power);
ReceiverModel *receiverModel() const { return receiver_model_; }
void setReceiverModel(ReceiverModelPtr receiver_model);
int line() const { return line_; }
private:
LibertyPortSeq *ports_;
TimingGroupSeq timings_;
InternalPowerGroupSeq internal_power_groups_;
ReceiverModel *receiver_model_;
int line_;
};
@ -747,10 +782,14 @@ public:
void setConstraintSigma(RiseFall *rf,
EarlyLate *early_late,
TableModel *model);
void setReceiverModel(ReceiverModelPtr receiver_model);
OutputCurrent *outputCurrent(RiseFall *rf);
void setOutputCurrent(RiseFall *rf,
OutputCurrent *output_current);
protected:
void makeLinearModels(LibertyLibrary *library);
void makeTableModels(LibertyReader *visitor);
void makeTableModels(LibertyReader *reader);
TimingArcAttrsPtr attrs_;
const char *related_output_port_name_;
@ -764,6 +803,8 @@ protected:
TableModel *transition_[RiseFall::index_count];
TableModel *delay_sigma_[RiseFall::index_count][EarlyLate::index_count];
TableModel *slew_sigma_[RiseFall::index_count][EarlyLate::index_count];
OutputCurrent *output_current_[RiseFall::index_count];
ReceiverModelPtr receiver_model_;
};
class InternalPowerGroup : public InternalPowerAttrs, public RelatedPortGroup

View File

@ -41,9 +41,13 @@ appendSpaces(string *result,
GateTableModel::GateTableModel(TableModel *delay_model,
TableModel *delay_sigma_models[EarlyLate::index_count],
TableModel *slew_model,
TableModel *slew_sigma_models[EarlyLate::index_count]) :
TableModel *slew_sigma_models[EarlyLate::index_count],
ReceiverModelPtr receiver_model,
OutputCurrent *output_current) :
delay_model_(delay_model),
slew_model_(slew_model)
slew_model_(slew_model),
receiver_model_(receiver_model),
output_current_(output_current)
{
for (auto el_index : EarlyLate::rangeIndex()) {
slew_sigma_models_[el_index] = slew_sigma_models ? slew_sigma_models[el_index] : nullptr;
@ -55,6 +59,7 @@ GateTableModel::~GateTableModel()
{
delete delay_model_;
delete slew_model_;
delete output_current_;
deleteSigmaModels(slew_sigma_models_);
deleteSigmaModels(delay_sigma_models_);
}
@ -160,6 +165,8 @@ GateTableModel::reportGateDelay(const LibertyCell *cell,
load_cap, related_out_cap);
if (drvr_slew < 0.0)
*result += "Negative slew clipped to 0.0\n";
if (output_current_)
output_current_->reportWaveform(cell, pvt, in_slew, load_cap, digits, result);
}
void
@ -180,7 +187,7 @@ GateTableModel::reportTableLookup(const char *result_name,
axis_value1, axis_value2, axis_value3);
model->reportValue(result_name, library, cell, pvt,
axis_value1, nullptr, axis_value2, axis_value3,
digits, result);
library->units()->timeUnit(), digits, result);
}
}
@ -327,11 +334,11 @@ GateTableModel::checkAxes(const TablePtr table)
TableAxisPtr axis3 = table->axis3();
bool axis_ok = true;
if (axis1)
axis_ok &= checkAxis(table->axis1());
axis_ok &= checkAxis(axis1);
if (axis2)
axis_ok &= checkAxis(table->axis2());
axis_ok &= checkAxis(axis2);
if (axis3)
axis_ok &= checkAxis(table->axis3());
axis_ok &= checkAxis(axis3);
return axis_ok;
}
@ -347,6 +354,46 @@ GateTableModel::checkAxis(TableAxisPtr axis)
////////////////////////////////////////////////////////////////
ReceiverModel::ReceiverModel() :
capacitance_models_{{nullptr, nullptr}, {nullptr, nullptr}}
{
}
ReceiverModel::~ReceiverModel()
{
for (int index = 0; index < 2; index++) {
for (auto rf_index : RiseFall::rangeIndex())
delete capacitance_models_[index][rf_index];
}
}
void
ReceiverModel::setCapacitanceModel(TableModel *table_model,
int index,
RiseFall *rf)
{
capacitance_models_[index][rf->index()] = table_model;
}
bool
ReceiverModel::checkAxes(TablePtr table)
{
TableAxisPtr axis1 = table->axis1();
TableAxisPtr axis2 = table->axis2();
TableAxisPtr axis3 = table->axis3();
return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
&& axis2 == nullptr
&& axis3 == nullptr)
|| (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
&& axis2 && axis2->variable() == TableAxisVariable::total_output_net_capacitance
&& axis3 == nullptr)
|| (axis1 && axis1->variable() == TableAxisVariable::total_output_net_capacitance
&& axis2 && axis2->variable() == TableAxisVariable::input_net_transition
&& axis3 == nullptr);
}
////////////////////////////////////////////////////////////////
CheckTableModel::CheckTableModel(TableModel *model,
TableModel *sigma_models[EarlyLate::index_count]) :
model_(model)
@ -464,7 +511,7 @@ CheckTableModel::reportTableDelay(const char *result_name,
reportPvt(library, pvt, digits, result);
model_->reportValue(result_name, library, cell, pvt,
axis_value1, from_slew_annotation, axis_value2,
axis_value3, digits, result);
axis_value3, library->units()->timeUnit(), digits, result);
}
}
@ -536,11 +583,11 @@ CheckTableModel::checkAxes(const TablePtr table)
TableAxisPtr axis3 = table->axis3();
bool axis_ok = true;
if (axis1)
axis_ok &= checkAxis(table->axis1());
axis_ok &= checkAxis(axis1);
if (axis2)
axis_ok &= checkAxis(table->axis2());
axis_ok &= checkAxis(axis2);
if (axis3)
axis_ok &= checkAxis(table->axis3());
axis_ok &= checkAxis(axis3);
return axis_ok;
}
@ -646,16 +693,15 @@ TableModel::reportValue(const char *result_name,
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const
{
table_->reportValue("Table value", library, cell, pvt, value1,
comment1, value2, value3, digits, result);
comment1, value2, value3, table_unit, digits, result);
reportPvtScaleFactor(library, cell, pvt, digits, result);
const Units *units = library->units();
const Unit *table_unit = units->timeUnit();
*result += result_name;
*result += " = ";
*result += table_unit->asString(findValue(library, cell, pvt,
@ -725,18 +771,17 @@ Table0::findValue(float,
void
Table0::reportValue(const char *result_name,
const LibertyLibrary *library,
const LibertyLibrary *,
const LibertyCell *,
const Pvt *,
float value1,
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const
{
const Units *units = library->units();
const Unit *table_unit = units->timeUnit();
*result += result_name;
*result += " constant = ";
*result += table_unit->asString(findValue(value1, value2, value3), digits);
@ -811,16 +856,15 @@ Table1::reportValue(const char *result_name, const
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const
{
TableAxisVariable var1 = axis1_->variable();
const Units *units = library->units();
const Unit *table_unit = units->timeUnit();
const Unit *unit1 = tableVariableUnit(var1, units);
const Unit *unit1 = axis1_->unit(units);
*result += "Table is indexed by\n";
*result += " ";
*result += tableVariableString(var1);
*result += axis1_->variableString();
*result += " = ";
*result += unit1->asString(value1, digits);
if (comment1)
@ -856,7 +900,7 @@ Table1::report(const Units *units,
Report *report) const
{
int digits = 4;
const Unit *unit1 = tableVariableUnit(axis1_->variable(), units);
const Unit *unit1 = axis1_->unit(units);
const Unit *table_unit = units->timeUnit();
report->reportLine("%s", tableVariableString(axis1_->variable()));
report->reportLine("------------------------------");
@ -980,17 +1024,15 @@ Table2::reportValue(const char *result_name,
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const
{
TableAxisVariable var1 = axis1_->variable();
TableAxisVariable var2 = axis2_->variable();
const Units *units = library->units();
const Unit *table_unit = units->timeUnit();
const Unit *unit1 = tableVariableUnit(var1, units);
const Unit *unit2 = tableVariableUnit(var2, units);
const Unit *unit1 = axis1_->unit(units);
const Unit *unit2 = axis2_->unit(units);
*result += "------- ";
*result += tableVariableString(var1),
*result += axis1_->variableString(),
*result += " = ";
*result += unit1->asString(value1, digits);
if (comment1)
@ -998,7 +1040,7 @@ Table2::reportValue(const char *result_name,
*result += '\n';
*result += "| ";
*result += tableVariableString(var2);
*result += axis2_->variableString();
*result += " = ";
*result += unit2->asString(value2, digits);
*result += '\n';
@ -1047,8 +1089,8 @@ Table2::report(const Units *units,
{
int digits = 4;
const Unit *table_unit = units->timeUnit();
const Unit *unit1 = tableVariableUnit(axis1_->variable(), units);
const Unit *unit2 = tableVariableUnit(axis2_->variable(), units);
const Unit *unit1 = axis1_->unit(units);
const Unit *unit2 = axis2_->unit(units);
report->reportLine("%s", tableVariableString(axis2_->variable()));
report->reportLine(" ------------------------------");
string line = " ";
@ -1173,20 +1215,17 @@ Table3::reportValue(const char *result_name,
const char *comment1,
float value2,
float value3,
const Unit *table_unit,
int digits,
string *result) const
{
TableAxisVariable var1 = axis1_->variable();
TableAxisVariable var2 = axis2_->variable();
TableAxisVariable var3 = axis3_->variable();
const Units *units = library->units();
const Unit *table_unit = units->timeUnit();
const Unit *unit1 = tableVariableUnit(var1, units);
const Unit *unit2 = tableVariableUnit(var2, units);
const Unit *unit3 = tableVariableUnit(var3, units);
const Unit *unit1 = axis1_->unit(units);
const Unit *unit2 = axis2_->unit(units);
const Unit *unit3 = axis3_->unit(units);
*result += " --------- ";
*result += tableVariableString(var1),
*result += axis1_->variableString(),
*result += " = ";
*result += unit1->asString(value1, digits);
if (comment1)
@ -1194,13 +1233,13 @@ Table3::reportValue(const char *result_name,
*result += '\n';
*result += " | ---- ";
*result += tableVariableString(var2),
*result += axis2_->variableString(),
*result += " = ";
*result += unit2->asString(value2, digits);
*result += '\n';
*result += " | | ";
*result += tableVariableString(var3);
*result += axis3_->variableString();
*result += " = ";
*result += unit3->asString(value3, digits);
*result += '\n';
@ -1296,9 +1335,9 @@ Table3::report(const Units *units,
{
int digits = 4;
const Unit *table_unit = units->timeUnit();
const Unit *unit1 = tableVariableUnit(axis1_->variable(), units);
const Unit *unit2 = tableVariableUnit(axis2_->variable(), units);
const Unit *unit3 = tableVariableUnit(axis3_->variable(), units);
const Unit *unit1 = axis1_->unit(units);
const Unit *unit2 = axis2_->unit(units);
const Unit *unit3 = axis3_->unit(units);
for (size_t index1 = 0; index1 < axis1_->size(); index1++) {
report->reportLine("%s %s", tableVariableString(axis1_->variable()),
unit1->asString(axis1_->axisValue(index1), digits));
@ -1363,6 +1402,47 @@ TableAxis::findAxisIndex(float value) const
}
}
void
TableAxis::findAxisIndex(float value,
// Return values.
size_t &index,
bool &exists) const
{
int max = static_cast<int>(values_->size()) - 1;
if (!values_->empty()
&& value >= (*values_)[0]
&& value <= (*values_)[max]) {
int lower = -1;
int upper = max + 1;
bool ascend = ((*values_)[max] >= (*values_)[0]);
while (upper - lower > 1) {
int mid = (upper + lower) >> 1;
if (value == (*values_)[mid]) {
index = mid;
exists = true;
return;
}
if ((value > (*values_)[mid]) == ascend)
lower = mid;
else
upper = mid;
}
}
exists = false;
}
const char *
TableAxis::variableString() const
{
return tableVariableString(variable_);
}
const Unit *
TableAxis::unit(const Units *units)
{
return tableVariableUnit(variable_, units);
}
////////////////////////////////////////////////////////////////
static EnumNameMap<TableAxisVariable> table_axis_variable_map =
@ -1432,4 +1512,120 @@ tableVariableUnit(TableAxisVariable variable,
return nullptr;
}
////////////////////////////////////////////////////////////////
OutputCurrentWaveform::OutputCurrentWaveform(float axis_value1,
float axis_value2,
TableAxisPtr axis,
Table1 *currents,
float reference_time) :
axis_value1_(axis_value1),
axis_value2_(axis_value2),
axis_(axis),
currents_(currents),
reference_time_(reference_time)
{
}
OutputCurrentWaveform::~OutputCurrentWaveform()
{
delete currents_;
}
bool
OutputCurrentWaveform::checkAxes(TableTemplate *tbl_template)
{
TableAxisPtr axis1 = tbl_template->axis1();
TableAxisPtr axis2 = tbl_template->axis2();
TableAxisPtr axis3 = tbl_template->axis3();
return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
&& axis2->variable() == TableAxisVariable::time
&& axis3 == nullptr)
|| (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
&& axis2 && axis2->variable() == TableAxisVariable::total_output_net_capacitance
&& axis3->variable() == TableAxisVariable::time)
|| (axis1 && axis1->variable() == TableAxisVariable::total_output_net_capacitance
&& axis2 && axis2->variable() == TableAxisVariable::input_net_transition
&& axis3->variable() == TableAxisVariable::time);
}
void
OutputCurrentWaveform::reportWaveform(const Units *units,
int digits,
string *result)
{
const Unit *time_unit = units->timeUnit();
const Unit *current_unit = units->currentUnit();
for (size_t i = 0; i < axis_->values()->size(); i++) {
*result += time_unit->asString(axis_->axisValue(i), digits);
*result += " ";
}
*result += '\n';
for (size_t i = 0; i < currents_->axis1()->size(); i++) {
*result += current_unit->asString(currents_->value(i), digits);
*result += " ";
}
*result += '\n';
}
////////////////////////////////////////////////////////////////
OutputCurrent::OutputCurrent(TableAxisPtr axis1,
TableAxisPtr axis2,
OutputCurrentWaveformSeq &waveforms) :
axis1_(axis1),
axis2_(axis2),
waveforms_(waveforms)
{
}
OutputCurrent::~OutputCurrent()
{
waveforms_.deleteContents();
}
void
OutputCurrent::reportWaveform(const LibertyCell *cell,
const Pvt *,
float in_slew,
float load_cap,
int digits,
string *result) const
{
float axis_value1, axis_value2;
findAxisValues(in_slew, load_cap,
axis_value1, axis_value2);
size_t index1 = axis1_->findAxisIndex(axis_value1);
size_t index2 = axis2_->findAxisIndex(axis_value2);
size_t index = index1 * axis2_->size() + index2;
waveforms_[index]->reportWaveform(cell->libertyLibrary()->units(), digits, result);
}
void
OutputCurrent::findAxisValues(float in_slew,
float load_cap,
// Return values.
float &axis_value1,
float &axis_value2) const
{
axis_value1 = axisValue(axis1_, in_slew, load_cap);
axis_value2 = axisValue(axis2_, in_slew, load_cap);
}
float
OutputCurrent::axisValue(TableAxisPtr axis,
float in_slew,
float load_cap) const
{
TableAxisVariable var = axis->variable();
if (var == TableAxisVariable::input_net_transition)
return in_slew;
else if (var == TableAxisVariable::total_output_net_capacitance)
return load_cap;
else {
criticalError(240, "unsupported table axes");
return 0.0;
}
}
} // namespace

View File

@ -1,18 +1,18 @@
0001 DmpCeff.cc:1597 cell %s delay model not supported on SPF parasitics by DMP delay calculator
0002 Liberty.cc:748 cell %s/%s port %s not found in cell %s/%s.
0003 Liberty.cc:774 cell %s/%s %s -> %s timing group %s not found in cell %s/%s.
0004 Liberty.cc:1708 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check.
0005 Liberty.cc:1722 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.
0006 Liberty.cc:1730 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.
0002 Liberty.cc:749 cell %s/%s port %s not found in cell %s/%s.
0003 Liberty.cc:775 cell %s/%s %s -> %s timing group %s not found in cell %s/%s.
0004 Liberty.cc:1710 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check.
0005 Liberty.cc:1724 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.
0006 Liberty.cc:1732 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.
0007 LibertyExpr.cc:78 %s references unknown port %s.
0008 ConcreteNetwork.cc:1857 cell type %s can not be linked.
0008 ConcreteNetwork.cc:1924 cell type %s can not be linked.
0009 CycleAccting.cc:87 No common period was found between clocks %s and %s.
0010 Genclks.cc:274 no master clock found for generated clock %s.
0013 Genclks.cc:938 generated clock %s source pin %s missing paths from master clock %s.
0015 Sim.cc:871 propagated logic value %c differs from constraint value of %c on pin %s.
0016 LibertyReader.cc:1012 default_max_fanout is 0.0.
0017 Sta.cc:2091 '%s' is not a valid endpoint.
0018 Sta.cc:2015 '%s' is not a valid start point.
0015 Sim.cc:865 propagated logic value %c differs from constraint value of %c on pin %s.
0016 LibertyReader.cc:1045 default_max_fanout is 0.0.
0017 Sta.cc:2093 '%s' is not a valid endpoint.
0018 Sta.cc:2017 '%s' is not a valid start point.
0021 SpefParse.yy:805 %d is not positive.
0022 SpefParse.yy:814 %.4f is not positive.
0023 SpefParse.yy:820 %.4f is not positive.
@ -22,167 +22,167 @@
0027 WritePathSpice.cc:1015 no register/latch found for path from %s to %s,
0028 WritePathSpice.cc:1382 The following subkcts are missing from %s
0029 WritePathSpice.cc:1440 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground.
0030 LibertyReader.cc:591 library missing name.
0031 LibertyReader.cc:623 default_wire_load %s not found.
0032 LibertyReader.cc:634 default_wire_selection %s not found.
0033 LibertyReader.cc:656 input_threshold_pct_%s not found.
0034 LibertyReader.cc:660 output_threshold_pct_%s not found.
0035 LibertyReader.cc:664 slew_lower_threshold_pct_%s not found.
0036 LibertyReader.cc:668 slew_upper_threshold_pct_%s not found.
0037 LibertyReader.cc:673 Library %s is missing one or more thresholds.
0038 LibertyReader.cc:763 unknown unit multiplier %s.
0039 LibertyReader.cc:782 unknown unit scale %c.
0040 LibertyReader.cc:785 unknown unit suffix %s.
0041 LibertyReader.cc:811 capacitive_load_units are not ff or pf.
0042 LibertyReader.cc:814 capacitive_load_units are not a string.
0043 LibertyReader.cc:817 capacitive_load_units missing suffix.
0044 LibertyReader.cc:820 capacitive_load_units scale is not a float.
0045 LibertyReader.cc:823 capacitive_load_units missing scale and suffix.
0046 LibertyReader.cc:826 capacitive_load_unit missing values suffix.
0047 LibertyReader.cc:844 delay_model %s not supported.
0048 LibertyReader.cc:848 delay_model %s not supported.
0049 LibertyReader.cc:852 delay_model %s not supported.
0050 LibertyReader.cc:857 delay_model %s not supported.
0030 LibertyReader.cc:624 library missing name.
0031 LibertyReader.cc:656 default_wire_load %s not found.
0032 LibertyReader.cc:667 default_wire_selection %s not found.
0033 LibertyReader.cc:689 input_threshold_pct_%s not found.
0034 LibertyReader.cc:693 output_threshold_pct_%s not found.
0035 LibertyReader.cc:697 slew_lower_threshold_pct_%s not found.
0036 LibertyReader.cc:701 slew_upper_threshold_pct_%s not found.
0037 LibertyReader.cc:706 Library %s is missing one or more thresholds.
0038 LibertyReader.cc:796 unknown unit multiplier %s.
0039 LibertyReader.cc:815 unknown unit scale %c.
0040 LibertyReader.cc:818 unknown unit suffix %s.
0041 LibertyReader.cc:844 capacitive_load_units are not ff or pf.
0042 LibertyReader.cc:847 capacitive_load_units are not a string.
0043 LibertyReader.cc:850 capacitive_load_units missing suffix.
0044 LibertyReader.cc:853 capacitive_load_units scale is not a float.
0045 LibertyReader.cc:856 capacitive_load_units missing scale and suffix.
0046 LibertyReader.cc:859 capacitive_load_unit missing values suffix.
0047 LibertyReader.cc:877 delay_model %s not supported.
0048 LibertyReader.cc:881 delay_model %s not supported.
0049 LibertyReader.cc:885 delay_model %s not supported.
0050 LibertyReader.cc:890 delay_model %s not supported.
.
0051 LibertyReader.cc:860 unknown delay_model %s
0051 LibertyReader.cc:893 unknown delay_model %s
.
0052 LibertyReader.cc:879 unknown bus_naming_style format.
0053 LibertyReader.cc:557 library %s already exists.
0054 LibertyReader.cc:900 voltage_map voltage is not a float.
0055 LibertyReader.cc:903 voltage_map missing voltage.
0056 LibertyReader.cc:906 voltage_map supply name is not a string.
0057 LibertyReader.cc:909 voltage_map missing supply name and voltage.
0058 LibertyReader.cc:912 voltage_map missing values suffix.
0059 LibertyReader.cc:1130 default_wire_load_mode %s not found.
0060 LibertyReader.cc:646 default_operating_condition %s not found.
0061 LibertyReader.cc:1301 table template missing name.
0062 LibertyReader.cc:1343 missing variable_%d attribute.
0063 LibertyReader.cc:1386 axis type %s not supported.
0064 LibertyReader.cc:1446 bus type %s missing bit_from.
0065 LibertyReader.cc:1448 bus type %s missing bit_to.
0066 LibertyReader.cc:1452 type missing name.
0067 LibertyReader.cc:1479 scaling_factors do not have a name.
0068 LibertyReader.cc:1647 operating_conditions missing name.
0069 LibertyReader.cc:1717 wire_load missing name.
0070 LibertyReader.cc:1760 fanout_length is missing length and fanout.
0071 LibertyReader.cc:1775 wire_load_selection missing name.
0072 LibertyReader.cc:1806 wireload %s not found.
0074 LibertyReader.cc:1813 wire_load_from_area min not a float.
0075 LibertyReader.cc:1816 wire_load_from_area max not a float.
0076 LibertyReader.cc:1819 wire_load_from_area missing parameters.
0077 LibertyReader.cc:1822 wire_load_from_area missing parameters.
0078 LibertyReader.cc:1839 cell missing name.
0079 LibertyReader.cc:1862 cell %s ocv_derate_group %s not found.
0080 LibertyReader.cc:1898 port %s function size does not match port size.
0081 LibertyReader.cc:1966 %s %s bus width mismatch.
0082 LibertyReader.cc:1977 %s %s bus width mismatch.
0083 LibertyReader.cc:1987 clear
0084 LibertyReader.cc:1997 preset
0085 LibertyReader.cc:2033 latch enable function is non-unate for port %s.
0086 LibertyReader.cc:2038 latch enable function is unknown for port %s.
0087 LibertyReader.cc:2114 operating conditions %s not found.
0088 LibertyReader.cc:2117 scaled_cell missing operating condition.
0089 LibertyReader.cc:2120 scaled_cell cell %s has not been defined.
0090 LibertyReader.cc:2123 scaled_cell missing name.
0091 LibertyReader.cc:2149 scaled_cell %s, %s port functions do not match cell port functions.
0092 LibertyReader.cc:2154 scaled_cell ports do not match cell ports.
0093 LibertyReader.cc:2156 scaled_cell %s, %s timing does not match cell timing.
0094 LibertyReader.cc:2175 combinational timing to an input port.
0095 LibertyReader.cc:2263 missing %s_transition.
0096 LibertyReader.cc:2265 missing cell_%s.
0099 LibertyReader.cc:2593 scaling_factors %s not found.
0100 LibertyReader.cc:2636 pin name is not a string.
0101 LibertyReader.cc:2655 pin name is not a string.
0102 LibertyReader.cc:2677 pin name is not a string.
0103 LibertyReader.cc:2755 bus %s bus_type not found.
0104 LibertyReader.cc:2811 bus_type %s not found.
0105 LibertyReader.cc:2814 bus_type is not a string.
0106 LibertyReader.cc:2832 bundle %s member not found.
0107 LibertyReader.cc:2859 member is not a string.
0108 LibertyReader.cc:2866 members attribute is missing values.
0109 LibertyReader.cc:2909 unknown port direction.
0110 LibertyReader.cc:3279 pulse_latch unknown pulse type.
0111 LibertyReader.cc:3659 unknown timing_type %s.
0112 LibertyReader.cc:3679 unknown timing_sense %s.
0113 LibertyReader.cc:3719 mode value is not a string.
0114 LibertyReader.cc:3722 missing mode value.
0115 LibertyReader.cc:3725 mode name is not a string.
0116 LibertyReader.cc:3728 mode missing values.
0117 LibertyReader.cc:3731 mode missing mode name and value.
0118 LibertyReader.cc:3807 unsupported model axis.
0119 LibertyReader.cc:3836 unsupported model axis.
0120 LibertyReader.cc:3867 unsupported model axis.
0121 LibertyReader.cc:3904 unsupported model axis.
0122 LibertyReader.cc:3956 table template %s not found.
0123 LibertyReader.cc:4031 %s is missing values.
0124 LibertyReader.cc:4056 %s is not a list of floats.
0125 LibertyReader.cc:4058 table row has %u columns but axis has %d.
0126 LibertyReader.cc:4068 table has %u rows but axis has %d.
0127 LibertyReader.cc:4121 lut output is not a string.
0128 LibertyReader.cc:4163 mode definition missing name.
0129 LibertyReader.cc:4180 mode value missing name.
0130 LibertyReader.cc:4194 when attribute inside table model.
0131 LibertyReader.cc:4243 %s attribute is not a string.
0132 LibertyReader.cc:4246 %s is not a simple attribute.
0133 LibertyReader.cc:4269 %s is not a simple attribute.
0134 LibertyReader.cc:4282 %s is not a simple attribute.
0135 LibertyReader.cc:4306 %s value %s is not a float.
0136 LibertyReader.cc:4335 %s missing values.
0137 LibertyReader.cc:4339 %s missing values.
0138 LibertyReader.cc:4342 %s is not a complex attribute.
0139 LibertyReader.cc:4368 %s is not a float.
0140 LibertyReader.cc:4387 %s is missing values.
0141 LibertyReader.cc:4390 %s has more than one string.
0142 LibertyReader.cc:4399 %s is missing values.
0143 LibertyReader.cc:4424 %s attribute is not boolean.
0144 LibertyReader.cc:4427 %s attribute is not boolean.
0145 LibertyReader.cc:4430 %s is not a simple attribute.
0146 LibertyReader.cc:4446 attribute %s value %s not recognized.
0147 LibertyReader.cc:4476 unknown early/late value.
0148 LibertyReader.cc:4702 OCV derate group named %s not found.
0149 LibertyReader.cc:4718 ocv_derate missing name.
0150 LibertyReader.cc:4771 unknown rise/fall.
0151 LibertyReader.cc:4791 unknown derate type.
0152 LibertyReader.cc:4823 unsupported model axis.
0153 LibertyReader.cc:4857 unsupported model axis.
0154 LibertyReader.cc:4891 unsupported model axis.
0155 LibertyReader.cc:4964 unknown pg_type.
0156 LibertyReader.cc:5338 port %s subscript out of range.
0157 LibertyReader.cc:5342 port range %s of non-bus port %s.
0158 LibertyReader.cc:5356 port %s not found.
0159 LibertyReader.cc:5426 port %s not found.
0160 LibertyReader.cc:997 default_max_transition is 0.0.
0161 LibertyReader.cc:3167 max_transition is 0.0.
0162 LibertyReader.cc:4266 %s attribute is not an integer.
0163 LibertyReader.cc:1102 default_fanout_load is 0.0.
0164 LibertyReader.cc:2286 timing group from output port.
0165 LibertyReader.cc:2296 timing group from output port.
0166 LibertyReader.cc:2306 timing group from output port.
0167 LibertyReader.cc:2324 timing group from output port.
0168 LibertyReader.cc:2339 timing group from output port.
0169 LibertyReader.cc:4138 cell %s test_cell redefinition.
0170 LibertyReader.cc:3579 timing group missing related_pin/related_bus_pin.
0052 LibertyReader.cc:912 unknown bus_naming_style format.
0053 LibertyReader.cc:590 library %s already exists.
0054 LibertyReader.cc:933 voltage_map voltage is not a float.
0055 LibertyReader.cc:936 voltage_map missing voltage.
0056 LibertyReader.cc:939 voltage_map supply name is not a string.
0057 LibertyReader.cc:942 voltage_map missing supply name and voltage.
0058 LibertyReader.cc:945 voltage_map missing values suffix.
0059 LibertyReader.cc:1163 default_wire_load_mode %s not found.
0060 LibertyReader.cc:679 default_operating_condition %s not found.
0061 LibertyReader.cc:1334 table template missing name.
0062 LibertyReader.cc:1379 missing variable_%d attribute.
0063 LibertyReader.cc:1422 axis type %s not supported.
0064 LibertyReader.cc:1482 bus type %s missing bit_from.
0065 LibertyReader.cc:1484 bus type %s missing bit_to.
0066 LibertyReader.cc:1488 type missing name.
0067 LibertyReader.cc:1515 scaling_factors do not have a name.
0068 LibertyReader.cc:1683 operating_conditions missing name.
0069 LibertyReader.cc:1753 wire_load missing name.
0070 LibertyReader.cc:1796 fanout_length is missing length and fanout.
0071 LibertyReader.cc:1811 wire_load_selection missing name.
0072 LibertyReader.cc:1842 wireload %s not found.
0074 LibertyReader.cc:1849 wire_load_from_area min not a float.
0075 LibertyReader.cc:1852 wire_load_from_area max not a float.
0076 LibertyReader.cc:1855 wire_load_from_area missing parameters.
0077 LibertyReader.cc:1858 wire_load_from_area missing parameters.
0078 LibertyReader.cc:1875 cell missing name.
0079 LibertyReader.cc:1898 cell %s ocv_derate_group %s not found.
0080 LibertyReader.cc:1934 port %s function size does not match port size.
0081 LibertyReader.cc:2002 %s %s bus width mismatch.
0082 LibertyReader.cc:2013 %s %s bus width mismatch.
0083 LibertyReader.cc:2023 clear
0084 LibertyReader.cc:2033 preset
0085 LibertyReader.cc:2069 latch enable function is non-unate for port %s.
0086 LibertyReader.cc:2074 latch enable function is unknown for port %s.
0087 LibertyReader.cc:2150 operating conditions %s not found.
0088 LibertyReader.cc:2153 scaled_cell missing operating condition.
0089 LibertyReader.cc:2156 scaled_cell cell %s has not been defined.
0090 LibertyReader.cc:2159 scaled_cell missing name.
0091 LibertyReader.cc:2185 scaled_cell %s, %s port functions do not match cell port functions.
0092 LibertyReader.cc:2190 scaled_cell ports do not match cell ports.
0093 LibertyReader.cc:2192 scaled_cell %s, %s timing does not match cell timing.
0094 LibertyReader.cc:2211 combinational timing to an input port.
0095 LibertyReader.cc:2302 missing %s_transition.
0096 LibertyReader.cc:2304 missing cell_%s.
0099 LibertyReader.cc:2817 scaling_factors %s not found.
0100 LibertyReader.cc:2860 pin name is not a string.
0101 LibertyReader.cc:2879 pin name is not a string.
0102 LibertyReader.cc:2901 pin name is not a string.
0103 LibertyReader.cc:2979 bus %s bus_type not found.
0104 LibertyReader.cc:3035 bus_type %s not found.
0105 LibertyReader.cc:3038 bus_type is not a string.
0106 LibertyReader.cc:3056 bundle %s member not found.
0107 LibertyReader.cc:3083 member is not a string.
0108 LibertyReader.cc:3090 members attribute is missing values.
0109 LibertyReader.cc:3133 unknown port direction.
0110 LibertyReader.cc:3501 pulse_latch unknown pulse type.
0111 LibertyReader.cc:3876 unknown timing_type %s.
0112 LibertyReader.cc:3896 unknown timing_sense %s.
0113 LibertyReader.cc:3936 mode value is not a string.
0114 LibertyReader.cc:3939 missing mode value.
0115 LibertyReader.cc:3942 mode name is not a string.
0116 LibertyReader.cc:3945 mode missing values.
0117 LibertyReader.cc:3948 mode missing mode name and value.
0118 LibertyReader.cc:2537 unsupported model axis.
0119 LibertyReader.cc:4051 unsupported model axis.
0120 LibertyReader.cc:4080 unsupported model axis.
0121 LibertyReader.cc:4115 unsupported model axis.
0122 LibertyReader.cc:4170 table template %s not found.
0123 LibertyReader.cc:4249 %s is missing values.
0124 LibertyReader.cc:4274 %s is not a list of floats.
0125 LibertyReader.cc:4276 table row has %u columns but axis has %d.
0126 LibertyReader.cc:4286 table has %u rows but axis has %d.
0127 LibertyReader.cc:4339 lut output is not a string.
0128 LibertyReader.cc:4381 mode definition missing name.
0129 LibertyReader.cc:4398 mode value missing name.
0130 LibertyReader.cc:4412 when attribute inside table model.
0131 LibertyReader.cc:4461 %s attribute is not a string.
0132 LibertyReader.cc:4464 %s is not a simple attribute.
0133 LibertyReader.cc:4487 %s is not a simple attribute.
0134 LibertyReader.cc:4500 %s is not a simple attribute.
0135 LibertyReader.cc:4524 %s value %s is not a float.
0136 LibertyReader.cc:4553 %s missing values.
0137 LibertyReader.cc:4557 %s missing values.
0138 LibertyReader.cc:4560 %s is not a complex attribute.
0139 LibertyReader.cc:4586 %s is not a float.
0140 LibertyReader.cc:4609 %s is missing values.
0141 LibertyReader.cc:4612 %s has more than one string.
0142 LibertyReader.cc:4621 %s is missing values.
0143 LibertyReader.cc:4646 %s attribute is not boolean.
0144 LibertyReader.cc:4649 %s attribute is not boolean.
0145 LibertyReader.cc:4652 %s is not a simple attribute.
0146 LibertyReader.cc:4668 attribute %s value %s not recognized.
0147 LibertyReader.cc:4698 unknown early/late value.
0148 LibertyReader.cc:4924 OCV derate group named %s not found.
0149 LibertyReader.cc:4940 ocv_derate missing name.
0150 LibertyReader.cc:4993 unknown rise/fall.
0151 LibertyReader.cc:5013 unknown derate type.
0152 LibertyReader.cc:5045 unsupported model axis.
0153 LibertyReader.cc:5077 unsupported model axis.
0154 LibertyReader.cc:5109 unsupported model axis.
0155 LibertyReader.cc:5180 unknown pg_type.
0156 LibertyReader.cc:5575 port %s subscript out of range.
0157 LibertyReader.cc:5579 port range %s of non-bus port %s.
0158 LibertyReader.cc:5593 port %s not found.
0159 LibertyReader.cc:5663 port %s not found.
0160 LibertyReader.cc:1030 default_max_transition is 0.0.
0161 LibertyReader.cc:3389 max_transition is 0.0.
0162 LibertyReader.cc:4484 %s attribute is not an integer.
0163 LibertyReader.cc:1135 default_fanout_load is 0.0.
0164 LibertyReader.cc:2324 timing group from output port.
0165 LibertyReader.cc:2334 timing group from output port.
0166 LibertyReader.cc:2344 timing group from output port.
0167 LibertyReader.cc:2362 timing group from output port.
0168 LibertyReader.cc:2377 timing group from output port.
0169 LibertyReader.cc:4356 cell %s test_cell redefinition.
0170 LibertyReader.cc:3795 timing group missing related_pin/related_bus_pin.
0179 SpefReader.cc:733 %s.
0190 VerilogReader.cc:1728 %s is not a verilog module.
0191 VerilogReader.cc:1733 %s is not a verilog module.
0201 StaTcl.i:128 no network has been linked.
0202 StaTcl.i:142 network does not support edits.
0204 StaTcl.i:4179 POCV support requires compilation with SSTA=1.
0201 StaTcl.i:117 no network has been linked.
0202 StaTcl.i:131 network does not support edits.
0204 StaTcl.i:4021 POCV support requires compilation with SSTA=1.
0206 LibertyExpr.cc:171 %s %s.
0207 GraphDelayCalc1.cc:738 port not found in cell
0208 Graph.cc:793 arc_delay_annotated array bounds exceeded
0209 Graph.cc:808 arc_delay_annotated array bounds exceeded
0210 Graph.cc:820 arc_delay_annotated array bounds exceeded
0211 SdcNetwork.cc:1026 inst path string lenth estimate busted
0212 SdcNetwork.cc:1098 inst path string lenth estimate exceeded
0213 Sdc.cc:4156 group path name and is_default are mutually exclusive.
0214 WriteSdc.cc:1306 unknown exception type
0215 WriteSdc.cc:1877 illegal set_logic value
0216 WriteSdc.cc:1921 invalid set_case_analysis value
0211 SdcNetwork.cc:1077 inst path string lenth estimate busted
0212 SdcNetwork.cc:1149 inst path string lenth estimate exceeded
0213 Sdc.cc:4021 group path name and is_default are mutually exclusive.
0214 WriteSdc.cc:1254 unknown exception type
0215 WriteSdc.cc:1795 illegal set_logic value
0216 WriteSdc.cc:1836 invalid set_case_analysis value
0228 Graph.cc:833 arc_delay_annotated array bounds exceeded
0251 PathEnumed.cc:126 enumerated path required time
0252 PathEnumed.cc:135 enumerated path required time
0253 PathGroup.cc:402 unknown path end type
0253 PathGroup.cc:399 unknown path end type
0254 PathVertexRep.cc:145 tag group missing tag
0255 ReportPath.cc:289 unsupported path type
0256 ReportPath.cc:310 unsupported path type
@ -190,109 +190,109 @@
0259 ReportPath.cc:2378 unsupported path type
0260 Search.cc:2628 max tag group index exceeded
0261 Search.cc:2860 max tag index exceeded
0262 Search.cc:3543 unexpected filter path
0263 Search.cc:3711 tns incr existing vertex
0264 Sta.cc:4161 corresponding timing arc set not found in equiv cells
0262 Search.cc:3551 unexpected filter path
0263 Search.cc:3719 tns incr existing vertex
0264 Sta.cc:4174 corresponding timing arc set not found in equiv cells
0265 TagGroup.cc:297 tag group missing tag
0266 Sta.cc:2088 '%s' is not a valid endpoint.
0267 Sta.cc:2012 '%s' is not a valid start point.
0272 StaTcl.i:4165 unknown common clk pessimism mode.
0273 StaTcl.i:5121 unknown clock sense
0266 Sta.cc:2090 '%s' is not a valid endpoint.
0267 Sta.cc:2014 '%s' is not a valid start point.
0272 StaTcl.i:4007 unknown common clk pessimism mode.
0273 StaTcl.i:4963 unknown clock sense
0299 Power.tcl:241 activity cannot be set on clock ports.
0300 Util.tcl:218 no commands match '$pattern'.
0300 CmdUtil.tcl:44 no commands match '$pattern'.
0301 Power.tcl:218 activity should be 0.0 to 1.0 or 2.0
0302 Power.tcl:226 duty should be 0.0 to 1.0
0303 Sta.tcl:155 -clock ignored for clock objects.
0304 Sta.tcl:384 -from/-to keywords ignored for lib_pin, port and pin arguments.
0305 Cmds.tcl:166 object '$obj' not found.
0313 Cmds.tcl:841 unsupported object type $object_type.
0314 Cmds.tcl:856 $arg_name must be a single net.
0315 Cmds.tcl:862 $arg_name '$object_type' is not a net.
0316 Cmds.tcl:867 $arg_name '$arg' not found.
0318 Search.tcl:1073 unknown path group '$name'.
0303 Sdc.tcl:1586 -clock ignored for clock objects.
0304 Sdc.tcl:2178 -from/-to keywords ignored for lib_pin, port and pin arguments.
0305 CmdArgs.tcl:166 object '$obj' not found.
0313 CmdArgs.tcl:842 unsupported object type $object_type.
0314 CmdArgs.tcl:857 $arg_name must be a single net.
0315 CmdArgs.tcl:863 $arg_name '$object_type' is not a net.
0316 CmdArgs.tcl:868 $arg_name '$arg' not found.
0318 Search.tcl:1067 unknown path group '$name'.
0319 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale].
0320 Sdc.tcl:496 current_design for other than top cell not supported.
0321 Sdc.tcl:533 patterns argument not supported with -of_objects.
0322 Sdc.tcl:568 instance '$pattern' not found.
0323 Sdc.tcl:629 clock '$pattern' not found.
0324 Sdc.tcl:656 positional arguments not supported with -of_objects.
0325 Sdc.tcl:682 library '$lib_name' not found.
0326 Sdc.tcl:694 cell '$cell_pattern' not found.
0327 Sdc.tcl:741 library/cell/port '$pattern' not found.
0328 Sdc.tcl:761 port '$port_pattern' not found.
0329 Sdc.tcl:766 library '$lib_name' not found.
0330 Sdc.tcl:776 -nocase ignored without -regexp.
0331 Sdc.tcl:802 library '$pattern' not found.
0332 Sdc.tcl:865 patterns argument not supported with -of_objects.
0333 Sdc.tcl:889 net '$pattern' not found.
0334 Sdc.tcl:918 patterns argument not supported with -of_objects.
0335 Sdc.tcl:955 pin '$pattern' not found.
0336 Sdc.tcl:1012 patterns argument not supported with -of_objects.
0337 Sdc.tcl:1026 port '$pattern' not found.
0338 Sdc.tcl:1124 non-increasing clock -waveform edge times.
0339 Sdc.tcl:1127 -waveform time greater than two periods.
0341 Sdc.tcl:1460 extra positional argument $arg.
0342 Sdc.tcl:1493 -clock ignored for clock objects.
0343 Sdc.tcl:1539 set_sense -type data not supported.
0344 Sdc.tcl:1554 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock.
0345 Sdc.tcl:1566 -pulse argument not supported.
0346 Sdc.tcl:1575 -positive, -negative, -stop_propagation and -pulse are mutually exclusive.
0347 Sdc.tcl:1588 hierarchical pin '[get_full_name $pin]' not supported.
0348 Sdc.tcl:1796 -from/-to keywords ignored for lib_pin, port and pin arguments.
0349 Sdc.tcl:1458 unknown keyword argument $arg.
0350 Sdc.tcl:1944 -from, -through or -to required.
0351 Sdc.tcl:2023 -source_latency_included ignored with -reference_pin.
0352 Sdc.tcl:2026 -network_latency_included ignored with -reference_pin.
0353 Sdc.tcl:2045 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'.
0354 Sdc.tcl:2047 $cmd relative to a clock defined on the same port/pin not allowed.
0355 Sdc.tcl:2090 '$args' ignored.
0356 Sdc.tcl:2220 '$args' ignored.
0357 Sdc.tcl:2267 virtual clock [get_name $clk] can not be propagated.
0358 Sdc.tcl:2416 -multiply_by ignored.
0359 Sdc.tcl:2419 -dont_scale ignored.
0360 Sdc.tcl:2422 -no_design_rule ignored.
0361 Sdc.tcl:2463 -clock not supported.
0362 Sdc.tcl:2466 -clock_fall not supported.
0363 Sdc.tcl:2512 -pin_load not allowed for net objects.
0364 Sdc.tcl:2515 -wire_load not allowed for net objects.
0365 Sdc.tcl:2518 -rise/-fall not allowed for net objects.
0366 Sdc.tcl:2651 -data_path, -clock_path, -rise, -fall ignored for ports and designs.
0367 Sdc.tcl:2721 derating factor greater than 2.0.
0368 Sdc.tcl:2758 -cell_delay and -cell_check flags ignored for net objects.
0369 Sdc.tcl:2817 no valid objects specified for $key.
0370 Sdc.tcl:2850 no valid objects specified for $key
0371 Sdc.tcl:3011 set_wire_load_min_block_size not supported.
0372 NetworkEdit.tcl:80 connect_pins is deprecated. Use connect_pin.
0373 Sdc.tcl:3161 define_corners must be called before read_liberty.
0320 Sdc.tcl:437 current_design for other than top cell not supported.
0321 Sdc.tcl:474 patterns argument not supported with -of_objects.
0322 Sdc.tcl:509 instance '$pattern' not found.
0323 Sdc.tcl:570 clock '$pattern' not found.
0324 Sdc.tcl:597 positional arguments not supported with -of_objects.
0325 Sdc.tcl:623 library '$lib_name' not found.
0326 Sdc.tcl:635 cell '$cell_pattern' not found.
0327 Sdc.tcl:682 library/cell/port '$pattern' not found.
0328 Sdc.tcl:702 port '$port_pattern' not found.
0329 Sdc.tcl:707 library '$lib_name' not found.
0330 Sdc.tcl:717 -nocase ignored without -regexp.
0331 Sdc.tcl:743 library '$pattern' not found.
0332 Sdc.tcl:806 patterns argument not supported with -of_objects.
0333 Sdc.tcl:830 net '$pattern' not found.
0334 Sdc.tcl:859 patterns argument not supported with -of_objects.
0335 Sdc.tcl:896 pin '$pattern' not found.
0336 Sdc.tcl:953 patterns argument not supported with -of_objects.
0337 Sdc.tcl:967 port '$pattern' not found.
0338 Sdc.tcl:1065 non-increasing clock -waveform edge times.
0339 Sdc.tcl:1068 -waveform time greater than two periods.
0341 Sdc.tcl:1443 extra positional argument $arg.
0342 Sdc.tcl:1536 -clock ignored for clock objects.
0343 Sdc.tcl:1626 set_sense -type data not supported.
0344 Sdc.tcl:1641 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock.
0345 Sdc.tcl:1653 -pulse argument not supported.
0346 Sdc.tcl:1662 -positive, -negative, -stop_propagation and -pulse are mutually exclusive.
0347 Sdc.tcl:1675 hierarchical pin '[get_full_name $pin]' not supported.
0348 Sdc.tcl:2041 -from/-to keywords ignored for lib_pin, port and pin arguments.
0349 Sdc.tcl:1441 unknown keyword argument $arg.
0350 Sdc.tcl:2288 -from, -through or -to required.
0351 Sdc.tcl:2367 -source_latency_included ignored with -reference_pin.
0352 Sdc.tcl:2370 -network_latency_included ignored with -reference_pin.
0353 Sdc.tcl:2389 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'.
0354 Sdc.tcl:2391 $cmd relative to a clock defined on the same port/pin not allowed.
0355 Sdc.tcl:2445 '$args' ignored.
0356 Sdc.tcl:2575 '$args' ignored.
0357 Sdc.tcl:2710 virtual clock [get_name $clk] can not be propagated.
0358 Sdc.tcl:2884 -multiply_by ignored.
0359 Sdc.tcl:2887 -dont_scale ignored.
0360 Sdc.tcl:2890 -no_design_rule ignored.
0361 Sdc.tcl:2937 -clock not supported.
0362 Sdc.tcl:2940 -clock_fall not supported.
0363 Sdc.tcl:2986 -pin_load not allowed for net objects.
0364 Sdc.tcl:2989 -wire_load not allowed for net objects.
0365 Sdc.tcl:2992 -rise/-fall not allowed for net objects.
0366 Sdc.tcl:3125 -data_path, -clock_path, -rise, -fall ignored for ports and designs.
0367 Sdc.tcl:3196 derating factor greater than 2.0.
0368 Sdc.tcl:3233 -cell_delay and -cell_check flags ignored for net objects.
0369 Sdc.tcl:3303 no valid objects specified for $key.
0370 Sdc.tcl:3336 no valid objects specified for $key
0371 Sdc.tcl:3497 set_wire_load_min_block_size not supported.
0372 NetworkEdit.tcl:129 connect_pins is deprecated. Use connect_pin.
0373 Sdc.tcl:3647 define_corners must be called before read_liberty.
0400 Util.tcl:44 $cmd $key missing value.
0401 Util.tcl:61 $cmd $key missing value.
0402 Util.tcl:71 $cmd $arg is not a known keyword or flag.
0403 Util.tcl:93 $cmd $arg is not a known keyword or flag.
0404 Util.tcl:191 Usage: $cmd $cmd_args($cmd)
0405 Util.tcl:193 Usage: $cmd argument error
0406 Util.tcl:313 $cmd positional arguments not supported.
0407 Util.tcl:319 $cmd requires one positional argument.
0408 Util.tcl:326 $cmd requires zero or one positional arguments.
0409 Util.tcl:332 $cmd requires two positional arguments.
0410 Util.tcl:339 $cmd requires one or two positional arguments.
0411 Util.tcl:345 $cmd requires three positional arguments.
0412 Util.tcl:351 $cmd requires four positional arguments.
0413 Util.tcl:359 $cmd_arg '$arg' is not a float.
0414 Util.tcl:365 $cmd_arg '$arg' is not a positive float.
0415 Util.tcl:371 $cmd_arg '$arg' is not an integer.
0416 Util.tcl:377 $cmd_arg '$arg' is not a positive integer.
0417 Util.tcl:383 $cmd_arg '$arg' is not an integer greater than or equal to one.
0418 Util.tcl:389 $cmd_arg '$arg' is not between 0 and 100.
0419 Search.tcl:342 report_clock_skew -setup and -hold are mutually exclusive options.
0404 CmdUtil.tcl:89 Usage: $cmd $cmd_args($cmd)
0405 CmdUtil.tcl:91 Usage: $cmd argument error
0406 Util.tcl:241 $cmd positional arguments not supported.
0407 Util.tcl:247 $cmd requires one positional argument.
0408 Util.tcl:254 $cmd requires zero or one positional arguments.
0409 Util.tcl:260 $cmd requires two positional arguments.
0410 Util.tcl:267 $cmd requires one or two positional arguments.
0411 Util.tcl:273 $cmd requires three positional arguments.
0412 Util.tcl:279 $cmd requires four positional arguments.
0413 Util.tcl:287 $cmd_arg '$arg' is not a float.
0414 Util.tcl:293 $cmd_arg '$arg' is not a positive float.
0415 Util.tcl:299 $cmd_arg '$arg' is not an integer.
0416 Util.tcl:305 $cmd_arg '$arg' is not a positive integer.
0417 Util.tcl:311 $cmd_arg '$arg' is not an integer greater than or equal to one.
0418 Util.tcl:317 $cmd_arg '$arg' is not between 0 and 100.
0419 Search.tcl:336 report_clock_skew -setup and -hold are mutually exclusive options.
0420 Search.tcl:136 $cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max.
0421 Search.tcl:146 $cmd command failed.
0422 Search.tcl:165 -endpoint_count must be a positive integer.
0423 Search.tcl:174 -group_count must be >= 1.
0424 Search.tcl:205 '$arg' is not a known keyword or flag.
0425 Search.tcl:207 positional arguments not supported.
0426 Search.tcl:526 analysis type single is not consistent with doing both setup/max and hold/min checks.
0427 Search.tcl:531 positional arguments not supported.
0428 Sta.tcl:859 set_assigned_transition transition is not a float.
0426 Search.tcl:520 analysis type single is not consistent with doing both setup/max and hold/min checks.
0427 Search.tcl:525 positional arguments not supported.
0428 DelayCalc.tcl:350 set_assigned_transition transition is not a float.
0430 Sdf.tcl:46 -cond_use min_max cannot be used with analysis type single.
0432 Sdf.tcl:157 SDF -divider must be / or .
0433 Parasitics.tcl:45 path instance '$path' not found.
@ -301,174 +301,173 @@
0436 Variables.tcl:45 sta_report_default_digits must be a positive integer.
0437 Variables.tcl:70 sta_crpr_mode must be pin or transition.
0438 Variables.tcl:187 $var_name value must be 0 or 1.
0439 Sta.tcl:933 unsupported object type $list_type.
0440 Sta.tcl:1235 -from/-to arguments not supported with -of_objects.
0441 Sta.tcl:1363 unsupported -filter expression.
0442 Sta.tcl:657 $cmd missing -from argument.
0443 Sta.tcl:662 $cmd missing -to argument.
0444 Sta.tcl:667 $cmd delay is not a float.
0445 Sta.tcl:672 set_annotated_delay -cell and -net options are mutually excluive.
0446 Sta.tcl:678 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst].
0447 Sta.tcl:683 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]
0448 Sta.tcl:688 $cmd -cell or -net required.
0449 Sta.tcl:752 $cmd missing -from argument.
0450 Sta.tcl:761 $cmd -clock must be rise or fall.
0451 Sta.tcl:768 $cmd missing -to argument.
0452 Sta.tcl:783 $cmd missing -setup|-hold|-recovery|-removal check type..
0453 Sta.tcl:791 $cmd check_value is not a float.
0454 Sta.tcl:100 the -all and -name options are mutually exclusive.
0455 Sta.tcl:103 either -all or -name options must be specified.
0456 Sta.tcl:111 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
0457 Sta.tcl:114 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
0458 Sta.tcl:167 -source '[$pin path_name]' is not a clock pin.
0459 Sta.tcl:246 -from/-to must be used together.
0460 Sta.tcl:266 -rise, -fall options not allowed for single clock uncertainty.
0461 Sta.tcl:310 missing -from, -rise_from or -fall_from argument.
0462 Sta.tcl:322 missing -to, -rise_to or -fall_to argument.
0463 Sta.tcl:436 -from/-to hierarchical instance not supported.
0464 Sta.tcl:562 $cmd command failed.
0465 Sta.tcl:569 positional arguments not supported.
0466 Sta.tcl:573 -from, -through or -to required.
0467 Cmds.tcl:108 unsupported object type $object_type.
0468 Cmds.tcl:405 $corner_name is not the name of process corner.
0469 Cmds.tcl:410 -corner keyword required with multi-corner analysis.
0470 Cmds.tcl:425 $corner_name is not the name of process corner.
0471 Cmds.tcl:430 missing -corner arg.
0472 Cmds.tcl:441 $corner_name is not the name of process corner.
0473 Cmds.tcl:457 $corner_name is not the name of process corner.
0474 Cmds.tcl:482 both -min and -max specified.
0475 Cmds.tcl:496 both -min and -max specified.
0476 Cmds.tcl:523 only one of -early and -late can be specified.
0477 Cmds.tcl:529 -early or -late must be specified.
0478 Cmds.tcl:536 both -early and -late specified.
0479 Cmds.tcl:551 $arg_name must be a single library.
0480 Cmds.tcl:557 $arg_name type '$object_type' is not a library.
0481 Cmds.tcl:562 library '$arg' not found.
0482 Cmds.tcl:579 $arg_name must be a single lib cell.
0483 Cmds.tcl:635 $arg_name must be a single instance.
0484 Cmds.tcl:641 $arg_name type '$object_type' is not an instance.
0485 Cmds.tcl:646 instance '$arg' not found.
0486 Cmds.tcl:665 $arg_name type '$object_type' is not an instance.
0487 Cmds.tcl:672 instance '$arg' not found.
0488 Cmds.tcl:733 $arg_name type '$object_type' is not a pin or port.
0489 Cmds.tcl:740 pin '$arg' not found.
0490 Cmds.tcl:760 $arg_name type '$object_type' is not a port.
0491 Sta.tcl:1083 $cmd object is null.
0492 Sta.tcl:1088 $cmd $type_key must be specified with object name argument.
0493 Sta.tcl:1131 get_property $object is not an object.
0494 Sta.tcl:1158 $object_type not supported.
0495 Sta.tcl:1161 $object_type '$object_name' not found.
0496 Sta.tcl:1478 Directory $spice_dir not found.
0497 Sta.tcl:1481 $spice_dir is not a directory.
0498 Sta.tcl:1484 Cannot write in $spice_dir.
0499 Sta.tcl:1487 No -spice_directory specified.
0500 Sta.tcl:1493 -lib_subckt_file $lib_subckt_file is not readable.
0501 Sta.tcl:1496 No -lib_subckt_file specified.
0502 Sta.tcl:1502 -model_file $model_file is not readable.
0503 Sta.tcl:1505 No -model_file specified.
0504 Sta.tcl:1511 No -power specified.
0505 Sta.tcl:1517 No -ground specified.
0506 Sta.tcl:1521 No -path_args specified.
0507 Sta.tcl:1526 No paths found for -path_args $path_args.
0508 Search.tcl:794 -min and -max cannot both be specified.
0509 Search.tcl:814 pin '$pin_arg' is hierarchical.
0510 Search.tcl:880 -format $format not recognized.
0439 CmdUtil.tcl:209 unsupported object type $list_type.
0440 Sta.tcl:158 -from/-to arguments not supported with -of_objects.
0441 Sta.tcl:286 unsupported -filter expression.
0442 DelayCalc.tcl:148 $cmd missing -from argument.
0443 DelayCalc.tcl:153 $cmd missing -to argument.
0444 DelayCalc.tcl:158 $cmd delay is not a float.
0445 DelayCalc.tcl:163 set_annotated_delay -cell and -net options are mutually excluive.
0446 DelayCalc.tcl:169 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst].
0447 DelayCalc.tcl:174 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]
0448 DelayCalc.tcl:179 $cmd -cell or -net required.
0449 DelayCalc.tcl:243 $cmd missing -from argument.
0450 DelayCalc.tcl:252 $cmd -clock must be rise or fall.
0451 DelayCalc.tcl:259 $cmd missing -to argument.
0452 DelayCalc.tcl:274 $cmd missing -setup|-hold|-recovery|-removal check type..
0453 DelayCalc.tcl:282 $cmd check_value is not a float.
0454 Sdc.tcl:1472 the -all and -name options are mutually exclusive.
0455 Sdc.tcl:1475 either -all or -name options must be specified.
0456 Sdc.tcl:1483 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
0457 Sdc.tcl:1486 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
0458 Sdc.tcl:1598 -source '[$pin path_name]' is not a clock pin.
0459 Sdc.tcl:1866 -from/-to must be used together.
0460 Sdc.tcl:1886 -rise, -fall options not allowed for single clock uncertainty.
0461 Sdc.tcl:1987 missing -from, -rise_from or -fall_from argument.
0462 Sdc.tcl:1999 missing -to, -rise_to or -fall_to argument.
0463 Sdc.tcl:2230 -from/-to hierarchical instance not supported.
0464 Sdc.tcl:2632 $cmd command failed.
0465 Sdc.tcl:2639 positional arguments not supported.
0466 Sdc.tcl:2643 -from, -through or -to required.
0467 CmdArgs.tcl:108 unsupported object type $object_type.
0468 CmdArgs.tcl:405 $corner_name is not the name of process corner.
0469 CmdArgs.tcl:410 -corner keyword required with multi-corner analysis.
0470 CmdArgs.tcl:425 $corner_name is not the name of process corner.
0471 CmdArgs.tcl:430 missing -corner arg.
0472 CmdArgs.tcl:441 $corner_name is not the name of process corner.
0473 CmdArgs.tcl:458 $corner_name is not the name of process corner.
0474 CmdArgs.tcl:483 both -min and -max specified.
0475 CmdArgs.tcl:497 both -min and -max specified.
0476 CmdArgs.tcl:524 only one of -early and -late can be specified.
0477 CmdArgs.tcl:530 -early or -late must be specified.
0478 CmdArgs.tcl:537 both -early and -late specified.
0479 CmdArgs.tcl:552 $arg_name must be a single library.
0480 CmdArgs.tcl:558 $arg_name type '$object_type' is not a library.
0481 CmdArgs.tcl:563 library '$arg' not found.
0482 CmdArgs.tcl:580 $arg_name must be a single lib cell.
0483 CmdArgs.tcl:636 $arg_name must be a single instance.
0484 CmdArgs.tcl:642 $arg_name type '$object_type' is not an instance.
0485 CmdArgs.tcl:647 instance '$arg' not found.
0486 CmdArgs.tcl:666 $arg_name type '$object_type' is not an instance.
0487 CmdArgs.tcl:673 instance '$arg' not found.
0488 CmdArgs.tcl:734 $arg_name type '$object_type' is not a pin or port.
0489 CmdArgs.tcl:741 pin '$arg' not found.
0490 CmdArgs.tcl:761 $arg_name type '$object_type' is not a port.
0491 Property.tcl:32 $cmd object is null.
0492 Property.tcl:37 $cmd $type_key must be specified with object name argument.
0493 Property.tcl:80 get_property $object is not an object.
0494 Property.tcl:107 $object_type not supported.
0495 Property.tcl:110 $object_type '$object_name' not found.
0496 WritePathSpice.tcl:35 Directory $spice_dir not found.
0497 WritePathSpice.tcl:38 $spice_dir is not a directory.
0498 WritePathSpice.tcl:41 Cannot write in $spice_dir.
0499 WritePathSpice.tcl:44 No -spice_directory specified.
0500 WritePathSpice.tcl:50 -lib_subckt_file $lib_subckt_file is not readable.
0501 WritePathSpice.tcl:53 No -lib_subckt_file specified.
0502 WritePathSpice.tcl:59 -model_file $model_file is not readable.
0503 WritePathSpice.tcl:62 No -model_file specified.
0504 WritePathSpice.tcl:68 No -power specified.
0505 WritePathSpice.tcl:74 No -ground specified.
0506 WritePathSpice.tcl:78 No -path_args specified.
0507 WritePathSpice.tcl:83 No paths found for -path_args $path_args.
0508 Search.tcl:788 -min and -max cannot both be specified.
0509 Search.tcl:808 pin '$pin_arg' is hierarchical.
0510 Search.tcl:874 -format $format not recognized.
0511 Sdc.tcl:73 cannot open '$filename'.
0512 Sdc.tcl:128 incomplete command at end of file.
0513 Sdc.tcl:212 hierarchy separator must be one of '$sdc_dividers'.
0514 Sdc.tcl:259 unknown unit $unit '$suffix'.
0515 Sdc.tcl:332 unknown $unit unit '$suffix'.
0516 Sdc.tcl:602 unsupported instance -filter expression.
0517 Sdc.tcl:987 unsupported pin -filter expression.
0518 Sdc.tcl:1063 unsupported port -filter expression.
0519 Sdc.tcl:1096 -add requires -name.
0520 Sdc.tcl:1101 -name or port_pin_list must be specified.
0521 Sdc.tcl:1109 missing -period argument.
0522 Sdc.tcl:1115 -waveform edge_list must have an even number of edge times.
0523 Sdc.tcl:1167 empty ports/pins/nets argument.
0524 Sdc.tcl:1175 -add requires -name.
0525 Sdc.tcl:1180 name or port_pin_list must be specified.
0526 Sdc.tcl:1187 missing -source argument.
0527 Sdc.tcl:1202 -master_clock argument empty.
0528 Sdc.tcl:1205 -add requireds -master_clock.
0529 Sdc.tcl:1209 -multiply_by and -divide_by options are exclusive.
0530 Sdc.tcl:1213 -divide_by is not an integer greater than one.
0531 Sdc.tcl:1216 -combinational implies -divide_by 1.
0532 Sdc.tcl:1221 -multiply_by is not an integer greater than one.
0533 Sdc.tcl:1227 -duty_cycle is not a float between 0 and 100.
0534 Sdc.tcl:1233 -edges only supported for three edges.
0535 Sdc.tcl:1239 edges times are not monotonically increasing.
0536 Sdc.tcl:1248 -edge_shift length does not match -edges length.
0537 Sdc.tcl:1254 missing -multiply_by, -divide_by, -combinational or -edges argument.
0538 Sdc.tcl:1262 cannot specify -invert without -multiply_by, -divide_by or -combinational.
0539 Sdc.tcl:1268 -duty_cycle requires -multiply_by value.
0545 Sdc.tcl:1304 group_path command failed.
0546 Sdc.tcl:1311 positional arguments not supported.
0547 Sdc.tcl:1315 -from, -through or -to required.
0548 Sdc.tcl:1321 -name and -default are mutually exclusive.
0549 Sdc.tcl:1323 -name or -default option is required.
0550 Sdc.tcl:1364 cannot specify both -high and -low.
0551 Sdc.tcl:1372 missing -setup or -hold argument.
0552 Sdc.tcl:1386 -high and -low only permitted for pins and instances.
0553 Sdc.tcl:1393 -high and -low only permitted for pins and instances.
0554 Sdc.tcl:1436 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
0555 Sdc.tcl:1439 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
0556 Sdc.tcl:1507 -source '[get_full_name $pin]' is not a clock pin.
0557 Sdc.tcl:1514 -early/-late is only allowed with -source.
0558 Sdc.tcl:1543 set_sense -type clock|data
0559 Sdc.tcl:1612 transition time can not be specified for virtual clocks.
0560 Sdc.tcl:1633 missing uncertainty value.
0561 Sdc.tcl:1681 -from/-to must be used together.
0562 Sdc.tcl:1701 -rise, -fall options not allowed for single clock uncertainty.
0563 Sdc.tcl:1742 missing -from, -rise_from or -fall_from argument.
0564 Sdc.tcl:1754 missing -to, -rise_to or -fall_to argument.
0565 Sdc.tcl:1826 -from/-to hierarchical instance not supported.
0566 Sdc.tcl:1858 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found.
0567 Sdc.tcl:1899 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found.
0568 Sdc.tcl:2084 missing delay argument.
0569 Sdc.tcl:2215 missing path multiplier argument.
0570 Sdc.tcl:2227 cannot use -start with -end.
0571 Sdc.tcl:2295 value must be 0, zero, 1, one, rise, rising, fall, or falling.
0572 Sdc.tcl:2353 cell '$lib_name:$cell_name' not found.
0573 Sdc.tcl:2359 '$cell_name' not found.
0574 Sdc.tcl:2363 missing -lib_cell argument.
0575 Sdc.tcl:2371 port '$to_port_name' not found.
0576 Sdc.tcl:2383 -pin argument required for cells with multiple outputs.
0577 Sdc.tcl:2398 port '$from_port_name' not found.
0578 Sdc.tcl:2605 port '[get_name $port]' is not an input.
0579 Sdc.tcl:2967 operating condition '$op_cond_name' not found.
0580 Sdc.tcl:2985 operating condition '$op_cond_name' not found.
0581 Sdc.tcl:2999 -analysis_type must be single, bc_wc or on_chip_variation.
0582 Sdc.tcl:3024 mode must be top, enclosed or segmented.
0583 Sdc.tcl:3039 no wire load model specified.
0584 Sdc.tcl:3100 wire load selection group '$selection_name' not found.
0585 Sdc.tcl:3231 no default operating conditions found.
0586 NetworkEdit.tcl:50 unsupported object type $object_type.
0587 NetworkEdit.tcl:119 unsupported object type $object_type.
0588 NetworkEdit.tcl:135 unsupported object type $object_type.
0589 Network.tcl:25 unknown namespace $namespc.
0590 Network.tcl:55 instance $instance_path not found.
0591 Network.tcl:283 net $net_path not found.
0592 Network.tcl:286 net $net_path not found.
0515 CmdUtil.tcl:161 unknown $unit unit '$suffix'.
0516 Sdc.tcl:543 unsupported instance -filter expression.
0517 Sdc.tcl:928 unsupported pin -filter expression.
0518 Sdc.tcl:1004 unsupported port -filter expression.
0519 Sdc.tcl:1037 -add requires -name.
0520 Sdc.tcl:1042 -name or port_pin_list must be specified.
0521 Sdc.tcl:1050 missing -period argument.
0522 Sdc.tcl:1056 -waveform edge_list must have an even number of edge times.
0523 Sdc.tcl:1126 empty ports/pins/nets argument.
0524 Sdc.tcl:1134 -add requires -name.
0525 Sdc.tcl:1139 name or port_pin_list must be specified.
0526 Sdc.tcl:1146 missing -source argument.
0527 Sdc.tcl:1161 -master_clock argument empty.
0528 Sdc.tcl:1164 -add requireds -master_clock.
0529 Sdc.tcl:1168 -multiply_by and -divide_by options are exclusive.
0530 Sdc.tcl:1172 -divide_by is not an integer greater than one.
0531 Sdc.tcl:1175 -combinational implies -divide_by 1.
0532 Sdc.tcl:1180 -multiply_by is not an integer greater than one.
0533 Sdc.tcl:1186 -duty_cycle is not a float between 0 and 100.
0534 Sdc.tcl:1192 -edges only supported for three edges.
0535 Sdc.tcl:1198 edges times are not monotonically increasing.
0536 Sdc.tcl:1207 -edge_shift length does not match -edges length.
0537 Sdc.tcl:1213 missing -multiply_by, -divide_by, -combinational or -edges argument.
0538 Sdc.tcl:1221 cannot specify -invert without -multiply_by, -divide_by or -combinational.
0539 Sdc.tcl:1227 -duty_cycle requires -multiply_by value.
0545 Sdc.tcl:1287 group_path command failed.
0546 Sdc.tcl:1294 positional arguments not supported.
0547 Sdc.tcl:1298 -from, -through or -to required.
0548 Sdc.tcl:1304 -name and -default are mutually exclusive.
0549 Sdc.tcl:1306 -name or -default option is required.
0550 Sdc.tcl:1347 cannot specify both -high and -low.
0551 Sdc.tcl:1355 missing -setup or -hold argument.
0552 Sdc.tcl:1369 -high and -low only permitted for pins and instances.
0553 Sdc.tcl:1376 -high and -low only permitted for pins and instances.
0554 Sdc.tcl:1419 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
0555 Sdc.tcl:1422 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
0556 Sdc.tcl:1550 -source '[get_full_name $pin]' is not a clock pin.
0557 Sdc.tcl:1557 -early/-late is only allowed with -source.
0558 Sdc.tcl:1630 set_sense -type clock|data
0559 Sdc.tcl:1699 transition time can not be specified for virtual clocks.
0560 Sdc.tcl:1732 missing uncertainty value.
0561 Sdc.tcl:1780 -from/-to must be used together.
0562 Sdc.tcl:1800 -rise, -fall options not allowed for single clock uncertainty.
0563 Sdc.tcl:1927 missing -from, -rise_from or -fall_from argument.
0564 Sdc.tcl:1939 missing -to, -rise_to or -fall_to argument.
0565 Sdc.tcl:2071 -from/-to hierarchical instance not supported.
0566 Sdc.tcl:2103 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found.
0567 Sdc.tcl:2144 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found.
0568 Sdc.tcl:2439 missing delay argument.
0569 Sdc.tcl:2570 missing path multiplier argument.
0570 Sdc.tcl:2582 cannot use -start with -end.
0571 Sdc.tcl:2752 value must be 0, zero, 1, one, rise, rising, fall, or falling.
0572 Sdc.tcl:2821 cell '$lib_name:$cell_name' not found.
0573 Sdc.tcl:2827 '$cell_name' not found.
0574 Sdc.tcl:2831 missing -lib_cell argument.
0575 Sdc.tcl:2839 port '$to_port_name' not found.
0576 Sdc.tcl:2851 -pin argument required for cells with multiple outputs.
0577 Sdc.tcl:2866 port '$from_port_name' not found.
0578 Sdc.tcl:3079 port '[get_name $port]' is not an input.
0579 Sdc.tcl:3453 operating condition '$op_cond_name' not found.
0580 Sdc.tcl:3471 operating condition '$op_cond_name' not found.
0581 Sdc.tcl:3485 -analysis_type must be single, bc_wc or on_chip_variation.
0582 Sdc.tcl:3510 mode must be top, enclosed or segmented.
0583 Sdc.tcl:3525 no wire load model specified.
0584 Sdc.tcl:3586 wire load selection group '$selection_name' not found.
0585 Sdc.tcl:3717 no default operating conditions found.
0586 NetworkEdit.tcl:99 unsupported object type $object_type.
0587 NetworkEdit.tcl:198 unsupported object type $object_type.
0588 NetworkEdit.tcl:216 unsupported object type $object_type.
0589 CmdUtil.tcl:226 unknown namespace $namespc.
0590 Network.tcl:35 instance $instance_path not found.
0591 Network.tcl:241 net $net_path not found.
0592 Network.tcl:244 net $net_path not found.
0593 Link.tcl:34 missing top_cell_name argument and no current_design.
0594 DelayNormal1.cc:203 unknown early/late value.
0595 DelayNormal2.cc:378 unknown early/late value.
0596 Sim.cc:205 unknown function operator
0596 Sim.cc:210 unknown function operator
0597 EstimateParasitics.cc:188 load pin not leaf or top level
0600 Sdc.tcl:1940 '$args' ignored.
0601 Sdc.tcl:2439 set_fanout_load not supported.
0602 Sdc.tcl:2899 no valid objects specified for $key.
0603 NetworkEdit.tcl:172 disconnect_pins is deprecated. Use disconnect_pin.
0600 Sdc.tcl:2284 '$args' ignored.
0601 Sdc.tcl:2913 set_fanout_load not supported.
0602 Sdc.tcl:3385 no valid objects specified for $key.
0604 Sdc.tcl:281 unknown $unit prefix '$prefix'.
0605 Sdc.tcl:3061 wire load model '$model_name' not found.
0606 Sta.tcl:1128 get_property unsupported object type $object_type.
0607 StaTcl.i:4415 unknown report path field %s
0608 StaTcl.i:4427 unknown report path field %s
0609 Search.tcl:427 -all_violators is deprecated. Use -violators
0610 Search.tcl:507 -max_transition deprecated. Use -max_slew.
0611 Search.tcl:512 -min_transition deprecated. Use -min_slew.
0605 Sdc.tcl:3547 wire load model '$model_name' not found.
0606 Property.tcl:77 get_property unsupported object type $object_type.
0607 StaTcl.i:4257 unknown report path field %s
0608 StaTcl.i:4269 unknown report path field %s
0609 Search.tcl:421 -all_violators is deprecated. Use -violators
0610 Search.tcl:501 -max_transition deprecated. Use -max_slew.
0611 Search.tcl:506 -min_transition deprecated. Use -min_slew.
0612 Sdf.tcl:41 -cond_use must be min, max or min_max.
0616 Search.tcl:1024 specify one of -setup and -hold.
0616 Search.tcl:1018 specify one of -setup and -hold.
0617 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type.
0618 DmpCeff.cc:1581 parasitic Pi model has NaNs.
0619 PathEnum.cc:474 path diversion missing edge.
@ -481,16 +480,23 @@
0702 LibertyWriter.cc:436 3 axis table models not supported.
0703 LibertyWriter.cc:576 %s/%s/%s timing arc type %s not supported.
0704 LibertyWriter.cc:289 %s/%s bundled ports not supported.
0705 Liberty.cc:793 Liberty cell %s/%s for corner %s/%s not found
0705 Liberty.cc:794 Liberty cell %s/%s for corner %s/%s not found.
0706 Parasitics.tcl:70 read_spef -increment is deprecated.
0710 LumpedCapDelayCalc.cc:168 gate delay input variable is NaN
0710 LumpedCapDelayCalc.cc:169 gate delay input variable is NaN
0800 VcdReader.cc:109 unhandled vcd command.
0801 VcdReader.cc:145 timescale syntax error.
0802 VcdReader.cc:159 Unknown timescale unit.
0804 VcdReader.cc:200 Variable syntax error.
0805 Vcd.cc:172 Unknown variable %s ID %s
0806 ReadVcdActivities.cc:227 clock %s vcd period %s differs from SDC clock period %s
0807 Sdc.tcl:453 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported.
0810 MakeTimingModel.cc:188 clock %s pin %s is inside model block.
0900 LibertyReader.cc:2533 level_shifter_type must be HL, LH, or HL_LH
0901 LibertyReader.cc:2569 switch_cell_type must be coarse_grain or fine_grain
0806 ReadVcdActivities.cc:251 clock %s vcd period %s differs from SDC clock period %s
0807 Sdc.tcl:394 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported.
0810 MakeTimingModel.cc:189 clock %s pin %s is inside model block.
0900 LibertyReader.cc:2757 level_shifter_type must be HL, LH, or HL_LH
0901 LibertyReader.cc:2793 switch_cell_type must be coarse_grain or fine_grain
0902 LibertyReader.cc:2460 unsupported model axis.
0903 LibertyReader.cc:4131 %s group not in timing group.
0904 LibertyReader.cc:2443 receiver_capacitance group not in timing or pin group.
0906 LibertyReader.cc:4024 unsupported model axis.
0907 LibertyReader.cc:2486 output_current_%s group not in timing group.
0908 LibertyReader.cc:2571 vector reference_time not found.
0912 LibertyReader.cc:2569 vector index_1 and index_2 must have one value.

View File

@ -524,7 +524,8 @@ MakeTimingModel::makeGateModelScalar(Delay delay,
TableModel *slew_model = new TableModel(slew_table, tbl_template,
ScaleFactorType::cell, rf);
GateTableModel *gate_model = new GateTableModel(delay_model, nullptr,
slew_model, nullptr);
slew_model, nullptr,
nullptr, nullptr);
return gate_model;
}
@ -606,7 +607,8 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin,
TableModel *slew_model = new TableModel(slew_table, tbl_template,
ScaleFactorType::cell, rf);
GateTableModel *gate_model = new GateTableModel(delay_model, nullptr,
slew_model, nullptr);
slew_model, nullptr,
nullptr, nullptr);
return gate_model;
}
}