set_data_check no -setup|-hold

This commit is contained in:
James Cherry 2019-06-26 15:58:23 -07:00
parent beaaafc4f2
commit 389b9b8276
9 changed files with 1652 additions and 1640 deletions

View File

@ -44,7 +44,7 @@ DataCheck::margin(const TransRiseFall *from_tr,
void void
DataCheck::setMargin(const TransRiseFallBoth *from_tr, DataCheck::setMargin(const TransRiseFallBoth *from_tr,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
const SetupHold *setup_hold, const SetupHoldAll *setup_hold,
float margin) float margin)
{ {
TransRiseFallIterator from_tr_iter(from_tr); TransRiseFallIterator from_tr_iter(from_tr);
@ -58,7 +58,7 @@ DataCheck::setMargin(const TransRiseFallBoth *from_tr,
void void
DataCheck::removeMargin(const TransRiseFallBoth *from_tr, DataCheck::removeMargin(const TransRiseFallBoth *from_tr,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
const SetupHold *setup_hold) const SetupHoldAll *setup_hold)
{ {
TransRiseFallIterator from_tr_iter(from_tr); TransRiseFallIterator from_tr_iter(from_tr);
while (from_tr_iter.hasNext()) { while (from_tr_iter.hasNext()) {

View File

@ -46,11 +46,11 @@ public:
bool &exists) const; bool &exists) const;
void setMargin(const TransRiseFallBoth *from_tr, void setMargin(const TransRiseFallBoth *from_tr,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
const SetupHold *setup_hold, const SetupHoldAll *setup_hold,
float margin); float margin);
void removeMargin(const TransRiseFallBoth *from_tr, void removeMargin(const TransRiseFallBoth *from_tr,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
const SetupHold *setup_hold); const SetupHoldAll *setup_hold);
bool empty() const; bool empty() const;
void marginIsOneValue(SetupHold *setup_hold, void marginIsOneValue(SetupHold *setup_hold,
// Return values. // Return values.

View File

@ -2570,7 +2570,7 @@ Sdc::setDataCheck(Pin *from,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold, const SetupHoldAll *setup_hold,
float margin) float margin)
{ {
DataCheck *check = nullptr; DataCheck *check = nullptr;
@ -2605,7 +2605,7 @@ Sdc::removeDataCheck(Pin *from,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold) const SetupHoldAll *setup_hold)
{ {
DataCheck probe(from, to, clk); DataCheck probe(from, to, clk);
DataCheckSet *checks = data_checks_from_map_.findKey(from); DataCheckSet *checks = data_checks_from_map_.findKey(from);

View File

@ -529,14 +529,14 @@ public:
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold, const SetupHoldAll *setup_hold,
float margin); float margin);
void removeDataCheck(Pin *from, void removeDataCheck(Pin *from,
const TransRiseFallBoth *from_tr, const TransRiseFallBoth *from_tr,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold); const SetupHoldAll *setup_hold);
DataCheckSet *dataChecksFrom(const Pin *from) const; DataCheckSet *dataChecksFrom(const Pin *from) const;
DataCheckSet *dataChecksTo(const Pin *to) const; DataCheckSet *dataChecksTo(const Pin *to) const;
void setInputDelay(Pin *pin, void setInputDelay(Pin *pin,

View File

@ -241,6 +241,9 @@ initSta()
void void
deleteAllMemory() deleteAllMemory()
{ {
// Verilog modules refer to the network in the sta so it has
// to deleted before the sta.
deleteVerilogReader();
Sta *sta = Sta::sta(); Sta *sta = Sta::sta();
if (sta) { if (sta) {
delete sta; delete sta;
@ -255,7 +258,6 @@ deleteAllMemory()
Transition::destroy(); Transition::destroy();
TimingRole::destroy(); TimingRole::destroy();
PortDirection::destroy(); PortDirection::destroy();
deleteVerilogReader();
deleteLiberty(); deleteLiberty();
} }
@ -1372,7 +1374,7 @@ Sta::setDataCheck(Pin *from,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold, const SetupHoldAll *setup_hold,
float margin) float margin)
{ {
sdc_->setDataCheck(from, from_tr, to, to_tr, clk, setup_hold,margin); sdc_->setDataCheck(from, from_tr, to, to_tr, clk, setup_hold,margin);
@ -1385,7 +1387,7 @@ Sta::removeDataCheck(Pin *from,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold) const SetupHoldAll *setup_hold)
{ {
sdc_->removeDataCheck(from, from_tr, to, to_tr, clk, setup_hold); sdc_->removeDataCheck(from, from_tr, to, to_tr, clk, setup_hold);
search_->requiredInvalid(to); search_->requiredInvalid(to);

View File

@ -392,14 +392,14 @@ public:
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold, const SetupHoldAll *setup_hold,
float margin); float margin);
void removeDataCheck(Pin *from, void removeDataCheck(Pin *from,
const TransRiseFallBoth *from_tr, const TransRiseFallBoth *from_tr,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold); const SetupHoldAll *setup_hold);
// set_disable_timing cell [-from] [-to] // set_disable_timing cell [-from] [-to]
// Disable all edges thru cell if from/to are null. // Disable all edges thru cell if from/to are null.
// Bus and bundle ports are NOT supported. // Bus and bundle ports are NOT supported.

View File

@ -702,10 +702,12 @@ proc unset_data_checks_cmd { cmd cmd_args } {
set clk [get_clock_warn "clock" $keys(-clock)] set clk [get_clock_warn "clock" $keys(-clock)]
} }
if [info exists flags(-setup)] { if { [info exists flags(-setup)] && ![info exists flags(-hold)] } {
set setup_hold "max" set setup_hold "setup"
} elseif [info exists flags(-hold)] { } elseif { [info exists flags(-hold)] && ![info exists flags(-setup)] } {
set setup_hold "min" set setup_hold "hold"
} else {
set setup_hold "setup_hold"
} }
unset_data_check_cmd $from $from_tr $to $to_tr $clk $setup_hold unset_data_check_cmd $from $from_tr $to $to_tr $clk $setup_hold

File diff suppressed because it is too large Load Diff

View File

@ -979,11 +979,17 @@ using namespace sta;
%typemap(in) SetupHoldAll* { %typemap(in) SetupHoldAll* {
int length; int length;
char *arg = Tcl_GetStringFromObj($input, &length); char *arg = Tcl_GetStringFromObj($input, &length);
MinMaxAll *min_max = MinMaxAll::find(arg); if (stringEqual(arg, "hold")
if (min_max) || stringEqual(arg, "min"))
$1 = min_max; $1 = SetupHoldAll::min();
else if (stringEqual(arg, "setup")
|| stringEqual(arg, "max"))
$1 = SetupHoldAll::max();
else if (stringEqual(arg, "setup_hold")
|| stringEqual(arg, "min_max"))
$1 = SetupHoldAll::all();
else { else {
tclError(interp, "Error: %s not min, max or min_max.", arg); tclError(interp, "Error: %s not setup, hold, setup_hold, min, max or min_max.", arg);
return TCL_ERROR; return TCL_ERROR;
} }
} }
@ -3069,11 +3075,11 @@ set_clock_gating_check_pin_cmd(Pin *pin,
} }
void void
set_clock_gating_check_instance_cmd(Instance *inst, set_clock_gating_check_instance_cmd(Instance *inst,
const TransRiseFallBoth *tr, const TransRiseFallBoth *tr,
const SetupHold *setup_hold, const SetupHold *setup_hold,
float margin, float margin,
LogicValue active_value) LogicValue active_value)
{ {
Sta::sta()->setClockGatingCheck(inst, tr, setup_hold, margin, active_value); Sta::sta()->setClockGatingCheck(inst, tr, setup_hold, margin, active_value);
} }
@ -3084,7 +3090,7 @@ set_data_check_cmd(Pin *from,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold, const SetupHoldAll *setup_hold,
float margin) float margin)
{ {
Sta::sta()->setDataCheck(from, from_tr, to, to_tr, clk, setup_hold, margin); Sta::sta()->setDataCheck(from, from_tr, to, to_tr, clk, setup_hold, margin);
@ -3096,7 +3102,7 @@ unset_data_check_cmd(Pin *from,
Pin *to, Pin *to,
const TransRiseFallBoth *to_tr, const TransRiseFallBoth *to_tr,
Clock *clk, Clock *clk,
const SetupHold *setup_hold) const SetupHoldAll *setup_hold)
{ {
Sta::sta()->removeDataCheck(from, from_tr, to, to_tr, clk, setup_hold); Sta::sta()->removeDataCheck(from, from_tr, to, to_tr, clk, setup_hold);
} }