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

View File

@ -1532,11 +1532,11 @@ proc set_clock_transition { args } {
# -rise/-fall are obsolete. # -rise/-fall are obsolete.
define_cmd_args "set_clock_uncertainty" \ define_cmd_args "set_clock_uncertainty" \
{[-from|-rise_from|-fall_from from_clock;\ {[-from|-rise_from|-fall_from from_clock]\
[-to|-rise_to|-fall_to to_clock] [-rise] [-fall]\ [-to|-rise_to|-fall_to to_clock] [-rise] [-fall]\
[-setup] [-hold] uncertainty [objects]} [-setup] [-hold] uncertainty [objects]}
proc set_clock_uncertainty { args } { proc set_clock_uncertainty { args } {
parse_key_args "set_clock_uncertainty" args \ parse_key_args "set_clock_uncertainty" args \
keys {-from -rise_from -fall_from -to -rise_to -fall_to} \ keys {-from -rise_from -fall_from -to -rise_to -fall_to} \
flags {-rise -fall -setup -hold} flags {-rise -fall -setup -hold}
@ -1616,16 +1616,16 @@ define_cmd_args "set_clock_uncertainty" \
set_clock_uncertainty_pin $pin $min_max $uncertainty set_clock_uncertainty_pin $pin $min_max $uncertainty
} }
} }
} }
################################################################ ################################################################
define_cmd_args "set_data_check" \ define_cmd_args "set_data_check" \
{[-from from_pin] [-rise_from from_pin] [-fall_from from_pin]\ {[-from from_pin] [-rise_from from_pin] [-fall_from from_pin]\
[-to to_pin] [-rise_to to_pin] [-fall_to to_pin]\ [-to to_pin] [-rise_to to_pin] [-fall_to to_pin]\
[-setup | -hold] [-clock clock] margin} [-setup | -hold] [-clock clock] margin}
proc set_data_check { args } { proc set_data_check { args } {
parse_key_args "set_data_check" args \ parse_key_args "set_data_check" args \
keys {-from -rise_from -fall_from -to -rise_to -fall_to -clock} \ keys {-from -rise_from -fall_from -to -rise_to -fall_to -clock} \
flags {-setup -hold} flags {-setup -hold}
@ -1635,7 +1635,7 @@ define_cmd_args "set_clock_uncertainty" \
set from_tr "rise_fall" set from_tr "rise_fall"
set to_tr "rise_fall" set to_tr "rise_fall"
set clk "NULL" set clk "NULL"
set setup_hold "max"
if [info exists keys(-from)] { if [info exists keys(-from)] {
set from [get_port_pin_error "from_pin" $keys(-from)] set from [get_port_pin_error "from_pin" $keys(-from)]
} elseif [info exists keys(-rise_from)] { } elseif [info exists keys(-rise_from)] {
@ -1664,23 +1664,25 @@ define_cmd_args "set_clock_uncertainty" \
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"
} }
set_data_check_cmd $from $from_tr $to $to_tr $clk $setup_hold $margin set_data_check_cmd $from $from_tr $to $to_tr $clk $setup_hold $margin
} }
################################################################ ################################################################
define_cmd_args "set_disable_timing" \ define_cmd_args "set_disable_timing" \
{[-from from_port] [-to to_port] objects} {[-from from_port] [-to to_port] objects}
# Parallax supports -from or -to alone. # Parallax supports -from or -to alone.
# OT requires both -from and -to args. # OT requires both -from and -to args.
proc set_disable_timing { args } { proc set_disable_timing { args } {
parse_key_args "set_disable_timing" args keys {-from -to} flags {} parse_key_args "set_disable_timing" args keys {-from -to} flags {}
check_argc_eq1 "set_disable_timing" $args check_argc_eq1 "set_disable_timing" $args
@ -1721,9 +1723,9 @@ define_cmd_args "set_clock_uncertainty" \
foreach timing_arc_set $timing_arc_sets { foreach timing_arc_set $timing_arc_sets {
disable_timing_arc_set $timing_arc_set disable_timing_arc_set $timing_arc_set
} }
} }
proc set_disable_timing_instance { inst from to } { proc set_disable_timing_instance { inst from to } {
set from_ports [parse_disable_inst_ports $inst $from] set from_ports [parse_disable_inst_ports $inst $from]
set to_ports [parse_disable_inst_ports $inst $to] set to_ports [parse_disable_inst_ports $inst $to]
if { ![$inst is_leaf] } { if { ![$inst is_leaf] } {
@ -1746,11 +1748,11 @@ define_cmd_args "set_clock_uncertainty" \
} }
} }
} }
} }
# Find ports in inst's cell that have pins. # Find ports in inst's cell that have pins.
# Bus ports are expanded into a list. # Bus ports are expanded into a list.
proc parse_disable_inst_ports { inst port_name } { proc parse_disable_inst_ports { inst port_name } {
global hierarchy_separator global hierarchy_separator
if { $port_name == "" } { if { $port_name == "" } {
@ -1771,9 +1773,9 @@ define_cmd_args "set_clock_uncertainty" \
} }
} }
return $ports return $ports
} }
proc set_disable_timing_cell { cell from to } { proc set_disable_timing_cell { cell from to } {
set from_ports [parse_disable_cell_ports $cell $from] set from_ports [parse_disable_cell_ports $cell $from]
set to_ports [parse_disable_cell_ports $cell $to] set to_ports [parse_disable_cell_ports $cell $to]
if { $from_ports == "NULL" && $to_ports == "NULL" } { if { $from_ports == "NULL" && $to_ports == "NULL" } {
@ -1793,11 +1795,11 @@ define_cmd_args "set_clock_uncertainty" \
} }
} }
} }
} }
# Find cell ports. # Find cell ports.
# Bus ports are expanded into a list. # Bus ports are expanded into a list.
proc parse_disable_cell_ports { cell port_name } { proc parse_disable_cell_ports { cell port_name } {
global hierarchy_separator global hierarchy_separator
if { $port_name == "" } { if { $port_name == "" } {
@ -1811,18 +1813,18 @@ define_cmd_args "set_clock_uncertainty" \
} }
} }
return $ports return $ports
} }
################################################################ ################################################################
define_cmd_args "set_false_path" \ define_cmd_args "set_false_path" \
{[-setup] [-hold] [-rise] [-fall] [-reset_path] [-comment comment]\ {[-setup] [-hold] [-rise] [-fall] [-reset_path] [-comment comment]\
[-from from_list] [-rise_from from_list] [-fall_from from_list]\ [-from from_list] [-rise_from from_list] [-fall_from from_list]\
[-through through_list] [-rise_through through_list]\ [-through through_list] [-rise_through through_list]\
[-fall_through through_list] [-to to_list] [-rise_to to_list]\ [-fall_through through_list] [-to to_list] [-rise_to to_list]\
[-fall_to to_list]} [-fall_to to_list]}
proc set_false_path { args } { proc set_false_path { args } {
parse_key_args "set_false_path" args \ parse_key_args "set_false_path" args \
keys {-from -rise_from -fall_from -to -rise_to -fall_to -comment} \ keys {-from -rise_from -fall_from -to -rise_to -fall_to -comment} \
flags {-setup -hold -rise -fall -reset_path} 0 flags {-setup -hold -rise -fall -reset_path} 0
@ -1863,54 +1865,54 @@ define_cmd_args "set_clock_uncertainty" \
set comment [parse_comment_key keys] set comment [parse_comment_key keys]
make_false_path $from $thrus $to $min_max $comment make_false_path $from $thrus $to $min_max $comment
} }
################################################################ ################################################################
define_cmd_args "set_ideal_latency" \ define_cmd_args "set_ideal_latency" \
{[-rise] [-fall] [-min] [-max] delay objects} {[-rise] [-fall] [-min] [-max] delay objects}
proc set_ideal_latency { args } { proc set_ideal_latency { args } {
# ignored # ignored
} }
################################################################ ################################################################
# Specifies net has zero weight for placement. # Specifies net has zero weight for placement.
define_cmd_args "set_ideal_net" { nets } define_cmd_args "set_ideal_net" { nets }
################################################################ ################################################################
define_cmd_args "set_ideal_network" {[-no_propagation] objects} define_cmd_args "set_ideal_network" {[-no_propagation] objects}
proc set_ideal_network { args } { proc set_ideal_network { args } {
# ignored # ignored
} }
################################################################ ################################################################
define_cmd_args "set_ideal_transition" \ define_cmd_args "set_ideal_transition" \
{[-rise] [-fall] [-min] [-max] transition_time objects} {[-rise] [-fall] [-min] [-max] transition_time objects}
proc set_ideal_transition { args } { proc set_ideal_transition { args } {
# ignored # ignored
} }
################################################################ ################################################################
define_cmd_args "set_input_delay" \ define_cmd_args "set_input_delay" \
{[-rise] [-fall] [-max] [-min]\ {[-rise] [-fall] [-max] [-min]\
[-clock clock] [-clock_fall]\ [-clock clock] [-clock_fall]\
[-reference_pin ref_pin]\ [-reference_pin ref_pin]\
[-source_latency_included] [-network_latency_included]\ [-source_latency_included] [-network_latency_included]\
[-add_delay] delay port_pin_list} [-add_delay] delay port_pin_list}
proc set_input_delay { args } { proc set_input_delay { args } {
set_port_delay "set_input_delay" "set_input_delay_cmd" $args \ set_port_delay "set_input_delay" "set_input_delay_cmd" $args \
{"input" "bidirect"} {"input" "bidirect"}
} }
proc set_port_delay { cmd sta_cmd cmd_args port_dirs } { proc set_port_delay { cmd sta_cmd cmd_args port_dirs } {
parse_key_args $cmd cmd_args \ parse_key_args $cmd cmd_args \
keys {-clock -reference_pin} \ keys {-clock -reference_pin} \
flags {-rise -fall -max -min -clock_fall -add_delay \ flags {-rise -fall -max -min -clock_fall -add_delay \
@ -1962,22 +1964,22 @@ define_cmd_args "set_clock_uncertainty" \
$min_max $add $delay $min_max $add $delay
} }
} }
} }
################################################################ ################################################################
define_cmd_args "set_max_delay" \ define_cmd_args "set_max_delay" \
{[-rise] [-fall] [-ignore_clock_latency] [-reset_path] [-comment comment]\ {[-rise] [-fall] [-ignore_clock_latency] [-reset_path] [-comment comment]\
[-from from_list] [-rise_from from_list] [-fall_from from_list]\ [-from from_list] [-rise_from from_list] [-fall_from from_list]\
[-through through_list] [-rise_through through_list]\ [-through through_list] [-rise_through through_list]\
[-fall_through through_list]\ [-fall_through through_list]\
[-to to_list] [-rise_to to_list] [-fall_to to_list] delay} [-to to_list] [-rise_to to_list] [-fall_to to_list] delay}
proc set_max_delay { args } { proc set_max_delay { args } {
set_path_delay "set_max_delay" $args max set_path_delay "set_max_delay" $args max
} }
proc set_path_delay { cmd args min_max } { proc set_path_delay { cmd args min_max } {
parse_key_args $cmd args \ parse_key_args $cmd args \
keys {-from -rise_from -fall_from -to -rise_to -fall_to -comment} \ keys {-from -rise_from -fall_from -to -rise_to -fall_to -comment} \
flags {-rise -fall -ignore_clock_latency -reset_path} 0 flags {-rise -fall -ignore_clock_latency -reset_path} 0
@ -2014,13 +2016,13 @@ define_cmd_args "set_clock_uncertainty" \
make_path_delay $from $thrus $to $min_max $ignore_clk_latency \ make_path_delay $from $thrus $to $min_max $ignore_clk_latency \
$delay $comment $delay $comment
} }
################################################################ ################################################################
define_cmd_args "set_max_time_borrow" {limit objects} define_cmd_args "set_max_time_borrow" {limit objects}
proc set_max_time_borrow { limit objects } { proc set_max_time_borrow { limit objects } {
check_positive_float "borrow_limit" $limit check_positive_float "borrow_limit" $limit
set limit [time_ui_sta $limit] set limit [time_ui_sta $limit]
parse_clk_inst_pin_arg $objects clks insts pins parse_clk_inst_pin_arg $objects clks insts pins
@ -2033,26 +2035,26 @@ define_cmd_args "set_clock_uncertainty" \
foreach clk $clks { foreach clk $clks {
set_latch_borrow_limit_clk $clk $limit set_latch_borrow_limit_clk $clk $limit
} }
} }
################################################################ ################################################################
define_cmd_args "set_min_delay" \ define_cmd_args "set_min_delay" \
{[-rise] [-fall] [-ignore_clock_latency] [-reset_path] [-comment comment]\ {[-rise] [-fall] [-ignore_clock_latency] [-reset_path] [-comment comment]\
[-from from_list] [-rise_from from_list] [-fall_from from_list]\ [-from from_list] [-rise_from from_list] [-fall_from from_list]\
[-through through_list] [-rise_through through_list]\ [-through through_list] [-rise_through through_list]\
[-fall_through through_list]\ [-fall_through through_list]\
[-to to_list] [-rise_to to_list] [-fall_to to_list] delay} [-to to_list] [-rise_to to_list] [-fall_to to_list] delay}
proc set_min_delay { args } { proc set_min_delay { args } {
set_path_delay "set_min_delay" $args min set_path_delay "set_min_delay" $args min
} }
################################################################ ################################################################
define_cmd_args "set_min_pulse_width" {[-low] [-high] value [objects]} define_cmd_args "set_min_pulse_width" {[-low] [-high] value [objects]}
proc set_min_pulse_width { args } { proc set_min_pulse_width { args } {
parse_key_args "set_min_pulse_width" args keys {} flags {-low -high} parse_key_args "set_min_pulse_width" args keys {} flags {-low -high}
check_argc_eq1or2 "set_min_pulse_width" $args check_argc_eq1or2 "set_min_pulse_width" $args
@ -2083,11 +2085,11 @@ define_cmd_args "set_clock_uncertainty" \
} else { } else {
set_min_pulse_width_global $hi_low $min_width set_min_pulse_width_global $hi_low $min_width
} }
} }
################################################################ ################################################################
define_cmd_args "set_multicycle_path" \ define_cmd_args "set_multicycle_path" \
{[-setup] [-hold] [-rise] [-fall] [-start] [-end]\ {[-setup] [-hold] [-rise] [-fall] [-start] [-end]\
[-reset_path] [-comment comment]\ [-reset_path] [-comment comment]\
[-from from_list] [-rise_from from_list]\ [-from from_list] [-rise_from from_list]\
@ -2095,7 +2097,7 @@ define_cmd_args "set_clock_uncertainty" \
[-rise_through through_list] [-fall_through through_list]\ [-rise_through through_list] [-fall_through through_list]\
[-to to_list] [-rise_to to_list] [-fall_to to_list] path_multiplier} [-to to_list] [-rise_to to_list] [-fall_to to_list] path_multiplier}
proc set_multicycle_path { args } { proc set_multicycle_path { args } {
parse_key_args "set_multicycle_path" args \ parse_key_args "set_multicycle_path" args \
keys {-from -rise_from -fall_from -to -rise_to -fall_to -comment} \ keys {-from -rise_from -fall_from -to -rise_to -fall_to -comment} \
flags {-setup -hold -rise -fall -start -end -reset_path} 0 flags {-setup -hold -rise -fall -start -end -reset_path} 0
@ -2155,27 +2157,27 @@ define_cmd_args "set_clock_uncertainty" \
make_multicycle_path $from $thrus $to $min_max $use_end_clk \ make_multicycle_path $from $thrus $to $min_max $use_end_clk \
$path_multiplier $comment $path_multiplier $comment
} }
################################################################ ################################################################
define_cmd_args "set_output_delay" \ define_cmd_args "set_output_delay" \
{[-rise] [-fall] [-max] [-min]\ {[-rise] [-fall] [-max] [-min]\
[-clock clock] [-clock_fall]\ [-clock clock] [-clock_fall]\
[-reference_pin ref_pin]\ [-reference_pin ref_pin]\
[-source_latency_included] [-network_latency_included]\ [-source_latency_included] [-network_latency_included]\
[-add_delay] delay port_pin_list} [-add_delay] delay port_pin_list}
proc set_output_delay { args } { proc set_output_delay { args } {
set_port_delay "set_output_delay" "set_output_delay_cmd" $args \ set_port_delay "set_output_delay" "set_output_delay_cmd" $args \
{"output" "tristate" "bidirect"} {"output" "tristate" "bidirect"}
} }
################################################################ ################################################################
define_cmd_args "set_propagated_clock" {objects} define_cmd_args "set_propagated_clock" {objects}
proc set_propagated_clock { objects } { proc set_propagated_clock { objects } {
parse_clk_port_pin_arg $objects clks pins parse_clk_port_pin_arg $objects clks pins
foreach clk $clks { foreach clk $clks {
if { [$clk is_virtual] } { if { [$clk is_virtual] } {
@ -2187,18 +2189,18 @@ define_cmd_args "set_clock_uncertainty" \
foreach pin $pins { foreach pin $pins {
set_propagated_clock_pin_cmd $pin set_propagated_clock_pin_cmd $pin
} }
} }
################################################################ ################################################################
# #
# Environment Commands # Environment Commands
# #
################################################################ ################################################################
define_cmd_args "set_case_analysis" \ define_cmd_args "set_case_analysis" \
{0|1|zero|one|rise|rising|fall|falling pins} {0|1|zero|one|rise|rising|fall|falling pins}
proc set_case_analysis { value pins } { proc set_case_analysis { value pins } {
if { !($value == "0" \ if { !($value == "0" \
|| $value == "1" \ || $value == "1" \
|| $value == "zero" \ || $value == "zero" \
@ -2213,14 +2215,14 @@ define_cmd_args "set_clock_uncertainty" \
foreach pin $pins1 { foreach pin $pins1 {
set_case_analysis_cmd $pin $value set_case_analysis_cmd $pin $value
} }
} }
################################################################ ################################################################
define_cmd_args "set_drive" {[-rise] [-fall] [-min] [-max] \ define_cmd_args "set_drive" {[-rise] [-fall] [-min] [-max] \
resistance ports} resistance ports}
proc set_drive { args } { proc set_drive { args } {
parse_key_args "set_drive" args keys {} flags {-rise -fall -min -max} parse_key_args "set_drive" args keys {} flags {-rise -fall -min -max}
set tr [parse_rise_fall_flags flags] set tr [parse_rise_fall_flags flags]
set min_max [parse_min_max_all_check_flags flags] set min_max [parse_min_max_all_check_flags flags]
@ -2234,18 +2236,18 @@ define_cmd_args "set_clock_uncertainty" \
foreach port $ports { foreach port $ports {
set_drive_resistance_cmd $port $tr $min_max $res set_drive_resistance_cmd $port $tr $min_max $res
} }
} }
################################################################ ################################################################
define_cmd_args "set_driving_cell" \ define_cmd_args "set_driving_cell" \
{[-lib_cell cell] [-library library]\ {[-lib_cell cell] [-library library]\
[-rise] [-fall] [-min] [-max]\ [-rise] [-fall] [-min] [-max]\
[-pin pin] [-from_pin from_pin]\ [-pin pin] [-from_pin from_pin]\
[-input_transition_rise trans_rise] [-input_transition_fall trans_fall]\ [-input_transition_rise trans_rise] [-input_transition_fall trans_fall]\
[-multiply_by factor] [-dont_scale] [-no_design_rule] ports} [-multiply_by factor] [-dont_scale] [-no_design_rule] ports}
proc set_driving_cell { args } { proc set_driving_cell { args } {
parse_key_args "set_driving_cell" args \ parse_key_args "set_driving_cell" args \
keys {-lib_cell -cell -library -pin -from_pin -multiply_by \ keys {-lib_cell -cell -library -pin -from_pin -multiply_by \
-input_transition_rise -input_transition_fall} \ -input_transition_rise -input_transition_fall} \
@ -2344,22 +2346,22 @@ define_cmd_args "set_clock_uncertainty" \
set_drive_cell_cmd $library $cell $port $from_port \ set_drive_cell_cmd $library $cell $port $from_port \
$from_slew_rise $from_slew_fall $to_port $tr $min_max $from_slew_rise $from_slew_fall $to_port $tr $min_max
} }
} }
################################################################ ################################################################
define_cmd_args "set_fanout_load" {fanout ports} define_cmd_args "set_fanout_load" {fanout ports}
proc set_fanout_load { fanout port_list } { proc set_fanout_load { fanout port_list } {
sta_warn "set_fanout_load not supported." sta_warn "set_fanout_load not supported."
} }
################################################################ ################################################################
define_cmd_args "set_input_transition" \ define_cmd_args "set_input_transition" \
{[-rise] [-fall] [-min] [-max] transition ports} {[-rise] [-fall] [-min] [-max] transition ports}
proc set_input_transition { args } { proc set_input_transition { args } {
parse_key_args "set_input_transition" args keys {-clock -clock_fall} \ parse_key_args "set_input_transition" args keys {-clock -clock_fall} \
flags {-rise -fall -max -min} flags {-rise -fall -max -min}
@ -2384,15 +2386,15 @@ define_cmd_args "set_clock_uncertainty" \
foreach port $ports { foreach port $ports {
set_input_slew_cmd $port $tr $min_max $slew set_input_slew_cmd $port $tr $min_max $slew
} }
} }
################################################################ ################################################################
define_cmd_args "set_load" \ define_cmd_args "set_load" \
{[-rise] [-fall] [-max] [-min] [-subtract_pin_load]\ {[-rise] [-fall] [-max] [-min] [-subtract_pin_load]\
[-pin_load] [-wire_load] capacitance objects} [-pin_load] [-wire_load] capacitance objects}
proc set_load { args } { proc set_load { args } {
parse_key_args "set_load" args keys {-corner} \ parse_key_args "set_load" args keys {-corner} \
flags {-rise -fall -min -max -subtract_pin_load -pin_load -wire_load}\ flags {-rise -fall -min -max -subtract_pin_load -pin_load -wire_load}\
@ -2436,59 +2438,59 @@ define_cmd_args "set_clock_uncertainty" \
set_net_wire_cap $net $subtract_pin_load $corner $min_max $cap set_net_wire_cap $net $subtract_pin_load $corner $min_max $cap
} }
} }
} }
################################################################ ################################################################
define_cmd_args "set_logic_dc" {port_list} define_cmd_args "set_logic_dc" {port_list}
proc set_logic_dc { port_list } { proc set_logic_dc { port_list } {
set_logic_value $port_list "X" set_logic_value $port_list "X"
} }
# OT supports set_logic cmds on pins. # OT supports set_logic cmds on pins.
# OC only supports them on ports. # OC only supports them on ports.
proc set_logic_value { port_list value } { proc set_logic_value { port_list value } {
set pins [get_port_pins_error "pins" $port_list] set pins [get_port_pins_error "pins" $port_list]
foreach pin $pins { foreach pin $pins {
set_logic_value_cmd $pin $value set_logic_value_cmd $pin $value
} }
} }
################################################################ ################################################################
define_cmd_args "set_logic_one" {port_list} define_cmd_args "set_logic_one" {port_list}
proc set_logic_one { port_list } { proc set_logic_one { port_list } {
set_logic_value $port_list "1" set_logic_value $port_list "1"
} }
################################################################ ################################################################
define_cmd_args "set_logic_zero" {port_list} define_cmd_args "set_logic_zero" {port_list}
proc set_logic_zero { port_list } { proc set_logic_zero { port_list } {
set_logic_value $port_list "0" set_logic_value $port_list "0"
} }
################################################################ ################################################################
define_cmd_args "set_max_area" {area} define_cmd_args "set_max_area" {area}
proc set_max_area { area } { proc set_max_area { area } {
check_positive_float "area" $area check_positive_float "area" $area
set_max_area_cmd $area set_max_area_cmd $area
} }
################################################################ ################################################################
define_cmd_args "set_max_capacitance" {cap objects} define_cmd_args "set_max_capacitance" {cap objects}
proc set_max_capacitance { cap objects } { proc set_max_capacitance { cap objects } {
set_capacitance_limit $cap "max" $objects set_capacitance_limit $cap "max" $objects
} }
proc set_capacitance_limit { cap min_max objects } { proc set_capacitance_limit { cap min_max objects } {
parse_cell_port_pin_args $objects cells ports pins parse_cell_port_pin_args $objects cells ports pins
check_positive_float "limit" $cap check_positive_float "limit" $cap
set cap [capacitance_ui_sta $cap] set cap [capacitance_ui_sta $cap]
@ -2501,17 +2503,17 @@ define_cmd_args "set_clock_uncertainty" \
foreach pin $pins { foreach pin $pins {
set_pin_capacitance_limit $pin $min_max $cap set_pin_capacitance_limit $pin $min_max $cap
} }
} }
################################################################ ################################################################
define_cmd_args "set_max_fanout" {fanout objects} define_cmd_args "set_max_fanout" {fanout objects}
proc set_max_fanout { fanout objects } { proc set_max_fanout { fanout objects } {
set_fanout_limit $fanout "max" $objects set_fanout_limit $fanout "max" $objects
} }
proc set_fanout_limit { fanout min_max objects } { proc set_fanout_limit { fanout min_max objects } {
check_positive_float "limit" $fanout check_positive_float "limit" $fanout
parse_cell_port_args $objects cells ports parse_cell_port_args $objects cells ports
foreach port $ports { foreach port $ports {
@ -2524,14 +2526,14 @@ define_cmd_args "set_clock_uncertainty" \
foreach cell $cells { foreach cell $cells {
set_cell_fanout_limit $cell $min_max $fanout set_cell_fanout_limit $cell $min_max $fanout
} }
} }
################################################################ ################################################################
define_cmd_args "set_max_transition" \ define_cmd_args "set_max_transition" \
{[-clock_path] [-data_path] [-rise] [-fall] slew objects} {[-clock_path] [-data_path] [-rise] [-fall] slew objects}
proc set_max_transition { args } { proc set_max_transition { args } {
parse_key_args "set_max_transition" args keys {} \ parse_key_args "set_max_transition" args keys {} \
flags {-clock_path -data_path -rise -fall} flags {-clock_path -data_path -rise -fall}
check_argc_eq2 "set_max_transition" $args check_argc_eq2 "set_max_transition" $args
@ -2581,14 +2583,14 @@ define_cmd_args "set_clock_uncertainty" \
foreach pin $pins { foreach pin $pins {
set_slew_limit_pin $pin "max" $slew set_slew_limit_pin $pin "max" $slew
} }
} }
################################################################ ################################################################
define_cmd_args "set_port_fanout_number" \ define_cmd_args "set_port_fanout_number" \
{[-max] [-min] fanout ports} {[-max] [-min] fanout ports}
proc set_port_fanout_number { args } { proc set_port_fanout_number { args } {
parse_key_args "set_port_fanout_number" args keys {} flags {-max -min} parse_key_args "set_port_fanout_number" args keys {} flags {-max -min}
set min_max [parse_min_max_all_check_flags flags] set min_max [parse_min_max_all_check_flags flags]
@ -2600,13 +2602,13 @@ define_cmd_args "set_clock_uncertainty" \
foreach port $ports { foreach port $ports {
set_port_ext_fanout_cmd $port $fanout $min_max set_port_ext_fanout_cmd $port $fanout $min_max
} }
} }
################################################################ ################################################################
define_cmd_args "set_resistance" {[-min] [-max] resistance nets} define_cmd_args "set_resistance" {[-min] [-max] resistance nets}
proc set_resistance { args } { proc set_resistance { args } {
parse_key_args "set_resistance" args keys {} flags {-max -min} parse_key_args "set_resistance" args keys {} flags {-max -min}
set min_max [parse_min_max_all_check_flags flags] set min_max [parse_min_max_all_check_flags flags]
@ -2619,15 +2621,15 @@ define_cmd_args "set_clock_uncertainty" \
foreach net $nets { foreach net $nets {
set_net_resistance $net $min_max $res set_net_resistance $net $min_max $res
} }
} }
################################################################ ################################################################
define_cmd_args "set_timing_derate" \ define_cmd_args "set_timing_derate" \
{-early|-late [-rise] [-fall] [-clock] [-data] \ {-early|-late [-rise] [-fall] [-clock] [-data] \
[-net_delay] [-cell_delay] [-cell_check] derate [objects]} [-net_delay] [-cell_delay] [-cell_check] derate [objects]}
proc set_timing_derate { args } { proc set_timing_derate { args } {
parse_key_args "set_timing_derate" args keys {} \ parse_key_args "set_timing_derate" args keys {} \
flags {-rise -fall -early -late -clock -data \ flags {-rise -fall -early -late -clock -data \
-net_delay -cell_delay -cell_check} -net_delay -cell_delay -cell_check}
@ -2711,9 +2713,9 @@ define_cmd_args "set_clock_uncertainty" \
} }
} }
} }
} }
proc parse_from_arg { keys_var arg_error_var } { proc parse_from_arg { keys_var arg_error_var } {
upvar 1 $keys_var keys upvar 1 $keys_var keys
if [info exists keys(-from)] { if [info exists keys(-from)] {
@ -2736,10 +2738,10 @@ define_cmd_args "set_clock_uncertainty" \
return "NULL" return "NULL"
} }
return [make_exception_from $from_pins $from_clks $from_insts $tr] return [make_exception_from $from_pins $from_clks $from_insts $tr]
} }
# "arg_error" is set to notify the caller to cleanup and post error. # "arg_error" is set to notify the caller to cleanup and post error.
proc parse_thrus_arg { args_var arg_error_var } { proc parse_thrus_arg { args_var arg_error_var } {
upvar 1 $args_var args upvar 1 $args_var args
set thrus {} set thrus {}
@ -2774,19 +2776,19 @@ define_cmd_args "set_clock_uncertainty" \
} }
set args $args_rtn set args $args_rtn
return $thrus return $thrus
} }
# Parse -to|-rise_to|-fall_to keywords. # Parse -to|-rise_to|-fall_to keywords.
proc parse_to_arg { keys_var flags_var arg_error_var } { proc parse_to_arg { keys_var flags_var arg_error_var } {
upvar 1 $keys_var keys upvar 1 $keys_var keys
upvar 1 $flags_var flags upvar 1 $flags_var flags
upvar 1 $arg_error_var arg_error upvar 1 $arg_error_var arg_error
set end_tr [parse_rise_fall_flags flags] set end_tr [parse_rise_fall_flags flags]
return [parse_to_arg1 keys $end_tr arg_error] return [parse_to_arg1 keys $end_tr arg_error]
} }
proc parse_to_arg1 { keys_var end_tr arg_error_var } { proc parse_to_arg1 { keys_var end_tr arg_error_var } {
upvar 1 $keys_var keys upvar 1 $keys_var keys
upvar 1 $arg_error_var arg_error upvar 1 $arg_error_var arg_error
@ -2815,9 +2817,9 @@ define_cmd_args "set_clock_uncertainty" \
return "NULL" return "NULL"
} }
return [make_exception_to $to_pins $to_clks $to_insts $to_tr $end_tr] return [make_exception_to $to_pins $to_clks $to_insts $to_tr $end_tr]
} }
proc delete_from_thrus_to { from thrus to } { proc delete_from_thrus_to { from thrus to } {
if { $from != "NULL" } { if { $from != "NULL" } {
delete_exception_from $from delete_exception_from $from
} }
@ -2829,9 +2831,9 @@ define_cmd_args "set_clock_uncertainty" \
if { $to != "NULL" } { if { $to != "NULL" } {
delete_exception_to $to delete_exception_to $to
} }
} }
proc parse_comment_key { keys_var } { proc parse_comment_key { keys_var } {
upvar 1 $keys_var keys upvar 1 $keys_var keys
set comment "" set comment ""
@ -2839,24 +2841,24 @@ define_cmd_args "set_clock_uncertainty" \
set comment $keys(-comment) set comment $keys(-comment)
} }
return $comment return $comment
} }
################################################################ ################################################################
define_cmd_args "set_min_capacitance" {cap objects} define_cmd_args "set_min_capacitance" {cap objects}
proc set_min_capacitance { cap objects } { proc set_min_capacitance { cap objects } {
set_capacitance_limit $cap "min" $objects set_capacitance_limit $cap "min" $objects
} }
################################################################ ################################################################
define_cmd_args "set_operating_conditions" \ define_cmd_args "set_operating_conditions" \
{[-analysis_type single|bc_wc|on_chip_variation] [-library lib]\ {[-analysis_type single|bc_wc|on_chip_variation] [-library lib]\
[condition] [-min min_condition] [-max max_condition]\ [condition] [-min min_condition] [-max max_condition]\
[-min_library min_lib] [-max_library max_lib]} [-min_library min_lib] [-max_library max_lib]}
proc set_operating_conditions { args } { proc set_operating_conditions { args } {
parse_key_args "set_operating_conditions" args \ parse_key_args "set_operating_conditions" args \
keys {-analysis_type -library -min -max -min_library -max_library} flags {} keys {-analysis_type -library -min -max -min_library -max_library} flags {}
parse_op_cond_analysis_type keys parse_op_cond_analysis_type keys
@ -2871,9 +2873,9 @@ define_cmd_args "set_clock_uncertainty" \
if [info exists keys(-max)] { if [info exists keys(-max)] {
parse_op_cond $keys(-max) "-max_library" "max" keys parse_op_cond $keys(-max) "-max_library" "max" keys
} }
} }
proc parse_op_cond { op_cond_name lib_key min_max key_var } { proc parse_op_cond { op_cond_name lib_key min_max key_var } {
upvar 1 $key_var keys upvar 1 $key_var keys
if [info exists keys($lib_key)] { if [info exists keys($lib_key)] {
set liberty [get_liberty_error $lib_key $keys($lib_key)] set liberty [get_liberty_error $lib_key $keys($lib_key)]
@ -2900,9 +2902,9 @@ define_cmd_args "set_clock_uncertainty" \
sta_error "operating condition '$op_cond_name' not found." sta_error "operating condition '$op_cond_name' not found."
} }
} }
} }
proc parse_op_cond_analysis_type { key_var } { proc parse_op_cond_analysis_type { key_var } {
upvar 1 $key_var keys upvar 1 $key_var keys
if [info exists keys(-analysis_type)] { if [info exists keys(-analysis_type)] {
set analysis_type $keys(-analysis_type) set analysis_type $keys(-analysis_type)
@ -2916,21 +2918,21 @@ define_cmd_args "set_clock_uncertainty" \
} elseif { [info exists keys(-min)] && [info exists keys(-max)] } { } elseif { [info exists keys(-min)] && [info exists keys(-max)] } {
set_analysis_type_cmd "bc_wc" set_analysis_type_cmd "bc_wc"
} }
} }
################################################################ ################################################################
define_cmd_args "set_wire_load_min_block_size" {block_size} define_cmd_args "set_wire_load_min_block_size" {block_size}
proc set_wire_load_min_block_size { block_size } { proc set_wire_load_min_block_size { block_size } {
sta_warn "set_wire_load_min_block_size not supported." sta_warn "set_wire_load_min_block_size not supported."
} }
################################################################ ################################################################
define_cmd_args "set_wire_load_mode" "top|enclosed|segmented" define_cmd_args "set_wire_load_mode" "top|enclosed|segmented"
proc set_wire_load_mode { mode } { proc set_wire_load_mode { mode } {
if { $mode == "top" \ if { $mode == "top" \
|| $mode == "enclosed" \ || $mode == "enclosed" \
|| $mode == "segmented" } { || $mode == "segmented" } {
@ -2938,14 +2940,14 @@ define_cmd_args "set_clock_uncertainty" \
} else { } else {
sta_error "mode must be top, enclosed or segmented." sta_error "mode must be top, enclosed or segmented."
} }
} }
################################################################ ################################################################
define_cmd_args "set_wire_load_model" \ define_cmd_args "set_wire_load_model" \
{-name model_name [-library lib_name] [-min] [-max] [objects]} {-name model_name [-library lib_name] [-min] [-max] [objects]}
proc set_wire_load_model { args } { proc set_wire_load_model { args } {
parse_key_args "set_wire_load_model" args keys {-name -library} \ parse_key_args "set_wire_load_model" args keys {-name -library} \
flags {-min -max} flags {-min -max}
@ -2977,14 +2979,14 @@ define_cmd_args "set_clock_uncertainty" \
} }
set objects $args set objects $args
set_wire_load_cmd $wireload $min_max set_wire_load_cmd $wireload $min_max
} }
################################################################ ################################################################
define_cmd_args "set_wire_load_selection_group" \ define_cmd_args "set_wire_load_selection_group" \
{[-library lib] [-min] [-max] group_name [objects]} {[-library lib] [-min] [-max] group_name [objects]}
proc set_wire_load_selection_group { args } { proc set_wire_load_selection_group { args } {
parse_key_args "set_wire_load_selection_group" args keys {-library} \ parse_key_args "set_wire_load_selection_group" args keys {-library} \
flags {-min -max} flags {-min -max}
@ -3015,73 +3017,73 @@ define_cmd_args "set_clock_uncertainty" \
sta_error "wire load selection group '$selection_name' not found." sta_error "wire load selection group '$selection_name' not found."
} }
set_wire_load_selection_group_cmd $selection $min_max set_wire_load_selection_group_cmd $selection $min_max
} }
################################################################ ################################################################
# #
# Multivoltage and Power Optimization Commands # Multivoltage and Power Optimization Commands
# #
################################################################ ################################################################
define_cmd_args "create_voltage_area" \ define_cmd_args "create_voltage_area" \
{[-name name] [-coordinate coordinates] [-guard_band_x guard_x]\ {[-name name] [-coordinate coordinates] [-guard_band_x guard_x]\
[-guard_band_y guard_y] cells } [-guard_band_y guard_y] cells }
proc create_voltage_area { args } { proc create_voltage_area { args } {
# ignored # ignored
} }
################################################################ ################################################################
define_cmd_args "set_level_shifter_strategy" {[-rule rule_type]} define_cmd_args "set_level_shifter_strategy" {[-rule rule_type]}
proc set_level_shifter_strategy { args } { proc set_level_shifter_strategy { args } {
# ignored # ignored
} }
################################################################ ################################################################
define_cmd_args "set_level_shifter_threshold" {[-voltage volt]} define_cmd_args "set_level_shifter_threshold" {[-voltage volt]}
proc set_level_shifter_threshold { args } { proc set_level_shifter_threshold { args } {
# ignored # ignored
} }
################################################################ ################################################################
define_cmd_args "set_max_dynamic_power" {power [unit]} define_cmd_args "set_max_dynamic_power" {power [unit]}
proc set_max_dynamic_power { power {unit {}} } { proc set_max_dynamic_power { power {unit {}} } {
# ignored # ignored
} }
################################################################ ################################################################
define_cmd_args "set_max_leakage_power" {power [unit]} define_cmd_args "set_max_leakage_power" {power [unit]}
proc set_max_leakage_power { power {unit {}} } { proc set_max_leakage_power { power {unit {}} } {
# ignored # ignored
} }
################################################################ ################################################################
# #
# Non-SDC commands # Non-SDC commands
# #
################################################################ ################################################################
define_cmd_args "define_corners" { corner1 [corner2]... } define_cmd_args "define_corners" { corner1 [corner2]... }
proc define_corners { args } { proc define_corners { args } {
define_corners_cmd $args define_corners_cmd $args
} }
################################################################ ################################################################
define_cmd_args "set_pvt"\ define_cmd_args "set_pvt"\
{insts [-min] [-max] [-process process] [-voltage voltage]\ {insts [-min] [-max] [-process process] [-voltage voltage]\
[-temperature temperature]} [-temperature temperature]}
proc set_pvt { args } { proc set_pvt { args } {
parse_key_args "set_pvt" args \ parse_key_args "set_pvt" args \
keys {-process -voltage -temperature} flags {-min -max} keys {-process -voltage -temperature} flags {-min -max}
@ -3095,9 +3097,9 @@ define_cmd_args "set_clock_uncertainty" \
} else { } else {
set_pvt_min_max $insts $min_max keys set_pvt_min_max $insts $min_max keys
} }
} }
proc set_pvt_min_max { insts min_max keys_var } { proc set_pvt_min_max { insts min_max keys_var } {
upvar 1 $keys_var keys upvar 1 $keys_var keys
set op_cond [operating_conditions $min_max] set op_cond [operating_conditions $min_max]
if { $op_cond == "NULL" } { if { $op_cond == "NULL" } {
@ -3125,9 +3127,9 @@ define_cmd_args "set_clock_uncertainty" \
foreach inst $insts { foreach inst $insts {
set_instance_pvt $inst $min_max $process $voltage $temperature set_instance_pvt $inst $min_max $process $voltage $temperature
} }
} }
proc default_operating_conditions {} { proc default_operating_conditions {} {
set found 0 set found 0
set lib_iter [liberty_library_iterator] set lib_iter [liberty_library_iterator]
while {[$lib_iter has_next]} { while {[$lib_iter has_next]} {
@ -3143,7 +3145,7 @@ define_cmd_args "set_clock_uncertainty" \
sta_error "no default operating conditions found." sta_error "no default operating conditions found."
} }
return $op_cond return $op_cond
} }
# sta namespace end. # sta namespace end.
} }

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,7 +3075,7 @@ 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,
@ -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);
} }