get_timing_paths - 2023.1 English

Vivado Design Suite Tcl Command Reference Guide (UG835)

Document ID
UG835
Release Date
2023-05-16
Version
2023.1 English

Get timing paths

Syntax

get_timing_paths [‑from <args>] [‑rise_from <args>] [‑fall_from <args>]
    [‑to <args>] [‑rise_to <args>] [‑fall_to <args>] [‑through <args>]
    [‑rise_through <args>] [‑fall_through <args>] [‑delay_type <arg>]
    [‑setup] [‑hold] [‑max_paths <arg>] [‑nworst <arg>] [‑unique_pins]
    [‑slack_lesser_than <arg>] [‑slack_greater_than <arg>] [‑group <args>]
    [‑no_report_unconstrained] [‑user_ignored] [‑routable_nets]
    [‑sort_by <arg>] [‑filter <arg>] [‑regexp] [‑nocase] [‑cell <args>]
    [‑quiet] [‑verbose]

Usage

Name Description
[-from] From pins, ports, cells or clocks
[-rise_from] Rising from pins, ports, cells or clocks
[-fall_from] Falling from pins, ports, cells or clocks
[-to] To pins, ports, cells or clocks
[-rise_to] Rising to pins, ports, cells or clocks
[-fall_to] Falling to pins, ports, cells or clocks
[-through] Through pins, ports, cells or nets
[-rise_through] Rising through pins, ports, cells or nets
[-fall_through] Falling through pins, ports, cells or nets
[-delay_type] Type of path delay: Values: max, min, min_max, max_rise, max_fall, min_rise, min_fall Default: max
[-setup] Get max delay timing paths (equivalent to -delay_type max)
[-hold] Get min delay timing paths (equivalent to -delay_type min)
[-max_paths] Maximum number of paths to return: Value >=1 Default: 1
[-nworst] List N worst paths to endpoint: Value >=1 Default: 1
[-unique_pins] for each unique set of pins, show at most 1 path per path group
[-slack_lesser_than] Include paths with slack less than this Default: 1e+30
[-slack_greater_than] Include paths with slack greater than this Default: -1e+30
[-group] Limit paths in this group(s)
[-no_report_unconstrained] Do not get unconstrained paths
[-user_ignored] only report paths which have infinite slack because of set_false_path or set_clock_groups timing constraints
[-routable_nets] store the number of routable nets traversed as a property on timing paths.
[-sort_by] Sorting order of paths: Values: group, slack Default: slack
[-filter] Filter list with expression
[-regexp] Patterns specified in filter are full regular expressions
[-nocase] Perform case-insensitive matching for patterns specified in filter (valid only when -regexp specified)
[-cell] run get_timing_paths on the cell
[-quiet] Ignore command errors
[-verbose] Suspend message limits during command execution

Categories

Object, Timing

Description

Gets timing path objects that meet the specified criteria. This command can be used to predefine timing paths to pass to the report_timing command for instance. Another usage of this command is to create custom reporting and analysis.

The get_timing_paths command is very similar to the report_timing command. However, get_timing_paths returns timing path objects which can be queried for properties, or passed to other Tcl commands for processing, where report_timing returns a file or a string.

Note: To improve memory and performance, the get_* commands return a container list of a single type of objects (e.g. cells, nets, pins, or ports). You can add new objects to the list (using lappend for instance), but you can only add the same type of object that is currently in the list. Adding a different type of object, or string, to the list is not permitted and will result in a Tcl error.

Arguments

-from <args> - (Optional) Defines the starting points of the timing paths to be analyzed. Ports, pins, or cells can be specified as timing path startpoints. You can also specify a clock object, and all startpoints clocked by the named clock will be analyzed.

-rise_from <args> - (Optional) Similar to the -from option, but only the rising edge of signals coming from the startpoints are considered for timing analysis. If a clock object is specified, only the paths launched by the rising edge of the clock are considered as startpoints.

-fall_from <args> - (Optional) Similar to the -from option, but only the falling edge of signals coming from the startpoints are considered for timing analysis. If a clock object is specified, only the paths launched by the falling edge of the clock are considered as startpoints.

-to <args> - (Optional) Specifies the endpoints, or destination objects of timing paths to be analyzed. Ports, pins, and cell objects can be specified as endpoints. A clock object can also be specified, in which case endpoints clocked by the named clock are analyzed.

-rise_to <args> - (Optional) Similar to the -to option, but only the rising edge of signals going to the endpoints is considered for timing analysis. If a clock object is specified, only the paths captured by the rising edge of the named clock are considered as endpoints.

-fall_to <args> - (Optional) Similar to the -to option, but only the falling edge of signals going to the endpoints is considered for timing analysis. If a clock object is specified, only the paths captured by the falling edge of the named clock are considered as endpoints.

-through <args> - (Optional) Specifies that only paths through the specified pins, cell instance, or nets are considered during timing analysis. You can specify individual -through (or -rise_through and -fall_through ) points in sequence to define a specific path through the design for analysis. The order of the specified through points is important to define a specific path. You can also specify through points with multiple objects, in which case the timing path can pass through any of the specified through objects.

-rise_through <args> - (Optional) Similar to the -through option, but timing analysis is only performed on paths with a rising transition at the specified objects.

-fall_through <args> - (Optional) Similar to the -through option, but timing analysis is only performed on paths with a falling transition at the specified objects.

-delay_type <arg> - (Optional) Specifies the type of delay to analyze when running the timing report. The valid values are min, max, min_max, max_rise, max_fall, min_rise, min_fall. The default setting for -delay_type is max.

-setup - (Optional) Check for setup violations. This is the same as specifying -delay_type max.

-hold - (Optional) Check for hold violations. This is the same as specifying -delay_type min.

Note: -setup and -hold can be specified together, which is the same as specifying -delay_type min_max.

-max_paths <arg> - (Optional) The maximum number of paths to output when sorted by slack; or the maximum number of paths per path group when sorted by group, as specified by -sort_by. This is specified as a value greater than or equal to 1. The default value is 1, returning the single worst timing path, or the worst path per group.

-nworst <arg> - (Optional) The number of timing paths to show to each endpoint. The timing report will report the N worst paths based on the specified value. This is specified as a value greater than or equal to 1. The default setting is 1.

-unique_pins - (Optional) Show only one timing path per each unique pin or group of pins. This is a boolean option, enabled by its use.

-routable_nets - (Optional) Report the number of routable nets traversed as a property of the timing paths returned.

-slack_greater_than <arg> - (Optional) Report timing on paths with a calculated slack value greater than the specified value. Used with -slack_lesser_than to provide a range of slack values of specific interest.

-slack_lesser_than <arg> - (Optional) Report timing on paths with a calculated slack value less than the specified value. Used with -slack_greater_than to provide a range of slack values of specific interest.

-group <args> - (Optional) Report timing for paths in the specified path groups.

-no_report_unconstrained - (Optional) Do not report timing on unconstrained paths.

-user_ignored - (Optional) Show the timing paths that are ignored during timing analysis because the user has specified set_false_path or set_clock_groups timing constraints. This is a boolean option, enabled by its use.

-sort_by [ slack | group ] - (Optional) Sort timing paths by path groups, or by slack values. The default sort order is by slack values.

-filter <args> - (Optional) Filter the results list with the specified expression. The -filter argument filters the list of objects returned by get_timing_paths based on property values on the timing paths. You can find the properties on an object with the report_property or list_property commands. In the case of the timing path object, "DATAPATH_DELAY", "ENDPOINT_PIN" and "ENDPOINT_CLOCK" are some of the properties that can be used to filter results.

The filter search pattern should be quoted to avoid having to escape special characters. String matching is case-sensitive and is always anchored to the start and to the end of the search string. The wildcard “*” character can be used at the beginning or at the end of a search string to widen the search to include a substring of the property value.
Note: The filter returns an object if a specified property exists on the object, and the specified pattern matches the property value on the object. In the case of the "*" wildcard character, this will match a property with a defined value of "".

The following example gets the first 100 most critical timing paths objects and returns only those from the path group clk_tx_clk_core_1:

get_timing_paths -max_paths 100 -filter {GROUP == clk_tx_clk_core_1}
For string comparison, the specific operators that can be used in filter expressions are "equal" (==), "not-equal" (!=), "match" (=~), and "not-match" (!~). Numeric comparison operators <, >, <=, and >= can also be used. Multiple filter expressions can be joined by AND and OR (&& and ||). The following gets input pins that do NOT contain the “RESET” substring within their name:
get_pins * -filter {DIRECTION == IN && NAME !~ "*RESET*"}
Boolean (bool) type properties can be directly evaluated in filter expressions as true or not true:
-filter {IS_PRIMITIVE && !IS_LOC_FIXED}
-regexp - (Optional) Specifies that the search <patterns> are written as regular expressions. Both search <patterns> and -filter expressions must be written as regular expressions when this argument is used. Xilinx® regular expression Tcl commands are always anchored to the start of the search string. You can add ".*" to the beginning or end of a search string to widen the search to include a substring. See http://perldoc.perl.org/perlre.html for help with regular expression syntax.
Note: The Tcl built-in command regexp is not anchored, and works as a standard Tcl command. For more information refer to http://www.tcl.tk/man/tcl8.5/TclCmd/regexp.htm.

-nocase - (Optional) Perform case-insensitive matching when a pattern has been specified. This argument applies to the use of -regexp only.

-cell <arg> - (Optional) Apply the get_timing_paths command to the specified cell. Cells can be specified by name, or as an object returned by the get_cells command.

-quiet - (Optional) Execute the command quietly, returning no messages from the command. The command also returns TCL_OK regardless of any errors encountered during execution.
Note: Any errors encountered on the command-line, while launching the command, will be returned. Only errors occurring inside the command will be trapped.
-verbose - (Optional) Temporarily override any message limits and return all messages from this command.
Note: Message limits can be defined with the set_msg_config command.

Examples

Get the five worst timing paths from the specified endpoint and report all the properties of the fourth timing path in the list:

report_property -all [lindex [get_timing_paths -to [get_ports led_pins[*]]\
-nworst 5] 3]

Define a procedure called custom_report and report the 100 worst paths from the clk_tx_clk_core_1 path group using the procedure.

proc custom_report { listOfPaths } {
   puts [format {%-40s %-40s %-20s %-20s %7s} "Startpoint" "Endpoint" \
      "Launch Clock" "Capture Clock" "Slack"]
   puts [string repeat "-" 140]
   foreach path $listOfPaths {
      set startpoint [get_property STARTPOINT_PIN $path]
      set startclock [get_property STARTPOINT_CLOCK $path]
      set endpoint [get_property ENDPOINT_PIN $path]
      set endclock [get_property ENDPOINT_CLOCK $path]
      set slack [get_property SLACK $path]
      puts [format {%-40s %-40s %-20s %-20s %7s} $startpoint $endpoint \
         $startclock $endclock $slack]
   }
}
set paths [get_timing_paths -group clk_tx_clk_core_1 -max_paths 100]\
custom_report $path

Use get_timing_paths to perform a timing analysis on the specified paths.

set paths [get_timing_paths -group clk_tx_clk_core_1 -max_paths 100]
report_timing -of_objects $paths

Which is the equivalent of:

report_timing -group clk_tx_clk_core_1 -max_paths 100

Return timing paths where the logic levels are greater than the specified number of logic levels.

get_timing_paths -max_paths 1000 -filter {LOGIC_LEVELS > 1}