set_data_check no -setup|-hold
This commit is contained in:
parent
beaaafc4f2
commit
389b9b8276
|
|
@ -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()) {
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
10
tcl/Cmds.tcl
10
tcl/Cmds.tcl
|
|
@ -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
|
||||||
|
|
|
||||||
3226
tcl/Sdc.tcl
3226
tcl/Sdc.tcl
File diff suppressed because it is too large
Load Diff
28
tcl/StaTcl.i
28
tcl/StaTcl.i
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue