TimingArcSet attrs
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
c230ba0e1a
commit
74bc7af476
|
|
@ -159,19 +159,19 @@ public:
|
||||||
void deleteTimingArc(TimingArc *arc);
|
void deleteTimingArc(TimingArc *arc);
|
||||||
TimingArc *findTimingArc(unsigned arc_index);
|
TimingArc *findTimingArc(unsigned arc_index);
|
||||||
void setRole(TimingRole *role);
|
void setRole(TimingRole *role);
|
||||||
FuncExpr *cond() const { return cond_; }
|
FuncExpr *cond() const { return attrs_->cond(); }
|
||||||
// Cond default is the timing arcs with no condition when there are
|
// Cond default is the timing arcs with no condition when there are
|
||||||
// other conditional timing arcs between the same pins.
|
// other conditional timing arcs between the same pins.
|
||||||
bool isCondDefault() const { return is_cond_default_; }
|
bool isCondDefault() const { return is_cond_default_; }
|
||||||
void setIsCondDefault(bool is_default);
|
void setIsCondDefault(bool is_default);
|
||||||
// SDF IOPATHs match sdfCond.
|
// SDF IOPATHs match sdfCond.
|
||||||
// sdfCond (IOPATH) reuses sdfCondStart (timing check) variable.
|
// sdfCond (IOPATH) reuses sdfCondStart (timing check) variable.
|
||||||
const char *sdfCond() const { return sdf_cond_start_; }
|
const char *sdfCond() const { return attrs_->sdfCondStart(); }
|
||||||
// SDF timing checks match sdfCondStart/sdfCondEnd.
|
// SDF timing checks match sdfCondStart/sdfCondEnd.
|
||||||
const char *sdfCondStart() const { return sdf_cond_start_; }
|
const char *sdfCondStart() const { return attrs_->sdfCondStart(); }
|
||||||
const char *sdfCondEnd() const { return sdf_cond_end_; }
|
const char *sdfCondEnd() const { return attrs_->sdfCondEnd(); }
|
||||||
const char *modeName() const { return mode_name_; }
|
const char *modeName() const { return attrs_->modeName(); }
|
||||||
const char *modeValue() const { return mode_value_; }
|
const char *modeValue() const { return attrs_->modeValue(); }
|
||||||
// Timing arc set index in cell.
|
// Timing arc set index in cell.
|
||||||
TimingArcIndex index() const { return index_; }
|
TimingArcIndex index() const { return index_; }
|
||||||
bool isDisabledConstraint() const { return is_disabled_constraint_; }
|
bool isDisabledConstraint() const { return is_disabled_constraint_; }
|
||||||
|
|
@ -203,13 +203,7 @@ protected:
|
||||||
TimingRole *role_;
|
TimingRole *role_;
|
||||||
TimingArcAttrs *attrs_;
|
TimingArcAttrs *attrs_;
|
||||||
TimingArcSeq arcs_;
|
TimingArcSeq arcs_;
|
||||||
FuncExpr *cond_;
|
|
||||||
bool is_cond_default_;
|
bool is_cond_default_;
|
||||||
const char *sdf_cond_start_;
|
|
||||||
const char *sdf_cond_end_;
|
|
||||||
const char *mode_name_;
|
|
||||||
const char *mode_value_;
|
|
||||||
float ocv_arc_depth_;
|
|
||||||
unsigned index_;
|
unsigned index_;
|
||||||
bool is_disabled_constraint_;
|
bool is_disabled_constraint_;
|
||||||
TimingArc *from_arc1_[RiseFall::index_count];
|
TimingArc *from_arc1_[RiseFall::index_count];
|
||||||
|
|
|
||||||
|
|
@ -3925,38 +3925,32 @@ LibertyReader::makeTable(LibertyAttr *attr,
|
||||||
FloatTable *table = makeFloatTable(attr,
|
FloatTable *table = makeFloatTable(attr,
|
||||||
axis_[0]->size()*axis_[1]->size(),
|
axis_[0]->size()*axis_[1]->size(),
|
||||||
axis_[2]->size(), scale);
|
axis_[2]->size(), scale);
|
||||||
if (table)
|
table_ = new Table3(table,
|
||||||
table_ = new Table3(table,
|
axis_[0], own_axis_[0],
|
||||||
axis_[0], own_axis_[0],
|
axis_[1], own_axis_[1],
|
||||||
axis_[1], own_axis_[1],
|
axis_[2], own_axis_[2]);
|
||||||
axis_[2], own_axis_[2]);
|
|
||||||
}
|
}
|
||||||
else if (axis_[0] && axis_[1]) {
|
else if (axis_[0] && axis_[1]) {
|
||||||
// Row variable1/axis[0]
|
// Row variable1/axis[0]
|
||||||
// Column variable2/axis[1]
|
// Column variable2/axis[1]
|
||||||
FloatTable *table = makeFloatTable(attr, axis_[0]->size(),
|
FloatTable *table = makeFloatTable(attr, axis_[0]->size(),
|
||||||
axis_[1]->size(), scale);
|
axis_[1]->size(), scale);
|
||||||
if (table)
|
table_ = new Table2(table,
|
||||||
table_ = new Table2(table,
|
axis_[0], own_axis_[0],
|
||||||
axis_[0], own_axis_[0],
|
axis_[1], own_axis_[1]);
|
||||||
axis_[1], own_axis_[1]);
|
|
||||||
}
|
}
|
||||||
else if (axis_[0]) {
|
else if (axis_[0]) {
|
||||||
FloatTable *table = makeFloatTable(attr, 1, axis_[0]->size(), scale);
|
FloatTable *table = makeFloatTable(attr, 1, axis_[0]->size(), scale);
|
||||||
if (table) {
|
FloatSeq *values = (*table)[0];
|
||||||
FloatSeq *values = (*table)[0];
|
delete table;
|
||||||
delete table;
|
table_ = new Table1(values, axis_[0], own_axis_[0]);
|
||||||
table_ = new Table1(values, axis_[0], own_axis_[0]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
FloatTable *table = makeFloatTable(attr, 1, 1, scale);
|
FloatTable *table = makeFloatTable(attr, 1, 1, scale);
|
||||||
if (table) {
|
float value = (*(*table)[0])[0];
|
||||||
float value = (*(*table)[0])[0];
|
delete (*table)[0];
|
||||||
delete (*table)[0];
|
delete table;
|
||||||
delete table;
|
table_ = new Table0(value);
|
||||||
table_ = new Table0(value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,7 @@ TimingArcAttrs::setSdfCond(const char *cond)
|
||||||
{
|
{
|
||||||
stringDelete(sdf_cond_);
|
stringDelete(sdf_cond_);
|
||||||
sdf_cond_ = stringCopy(cond);
|
sdf_cond_ = stringCopy(cond);
|
||||||
|
sdf_cond_start_ = sdf_cond_end_ = sdf_cond_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -184,20 +185,10 @@ TimingArcSet::TimingArcSet(LibertyCell *cell,
|
||||||
related_out_(related_out),
|
related_out_(related_out),
|
||||||
role_(role),
|
role_(role),
|
||||||
attrs_(attrs),
|
attrs_(attrs),
|
||||||
cond_(attrs->cond()),
|
|
||||||
is_cond_default_(false),
|
is_cond_default_(false),
|
||||||
sdf_cond_start_(attrs->sdfCondStart()),
|
|
||||||
sdf_cond_end_(attrs->sdfCondEnd()),
|
|
||||||
mode_name_(attrs->modeName()),
|
|
||||||
mode_value_(attrs->modeValue()),
|
|
||||||
ocv_arc_depth_(attrs->ocvArcDepth()),
|
|
||||||
index_(0),
|
index_(0),
|
||||||
is_disabled_constraint_(false)
|
is_disabled_constraint_(false)
|
||||||
{
|
{
|
||||||
const char *sdf_cond = attrs->sdfCond();
|
|
||||||
if (sdf_cond)
|
|
||||||
sdf_cond_start_ = sdf_cond_end_ = sdf_cond;
|
|
||||||
|
|
||||||
init(cell);
|
init(cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -208,12 +199,7 @@ TimingArcSet::TimingArcSet(TimingRole *role,
|
||||||
related_out_(nullptr),
|
related_out_(nullptr),
|
||||||
role_(role),
|
role_(role),
|
||||||
attrs_(attrs),
|
attrs_(attrs),
|
||||||
cond_(nullptr),
|
|
||||||
is_cond_default_(false),
|
is_cond_default_(false),
|
||||||
sdf_cond_start_(nullptr),
|
|
||||||
sdf_cond_end_(nullptr),
|
|
||||||
mode_name_(nullptr),
|
|
||||||
mode_value_(nullptr),
|
|
||||||
index_(0),
|
index_(0),
|
||||||
is_disabled_constraint_(false)
|
is_disabled_constraint_(false)
|
||||||
{
|
{
|
||||||
|
|
@ -363,15 +349,16 @@ float
|
||||||
TimingArcSet::ocvArcDepth() const
|
TimingArcSet::ocvArcDepth() const
|
||||||
{
|
{
|
||||||
if (from_) {
|
if (from_) {
|
||||||
if (ocv_arc_depth_ != 0.0)
|
float depth = attrs_->ocvArcDepth();
|
||||||
return ocv_arc_depth_;
|
if (depth != 0.0)
|
||||||
|
return depth;
|
||||||
else {
|
else {
|
||||||
LibertyCell *cell = from_->libertyCell();
|
LibertyCell *cell = from_->libertyCell();
|
||||||
float depth = cell->ocvArcDepth();
|
depth = cell->ocvArcDepth();
|
||||||
if (depth != 0.0)
|
if (depth != 0.0)
|
||||||
return depth;
|
return depth;
|
||||||
else {
|
else {
|
||||||
float depth = cell->libertyLibrary()->ocvArcDepth();
|
depth = cell->libertyLibrary()->ocvArcDepth();
|
||||||
if (depth != 0.0)
|
if (depth != 0.0)
|
||||||
return depth;
|
return depth;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue