|
|
|
@ -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.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|