All sections

The cards come in more than one shape: a command to explain, real tool output to read, a description whose command you name, and a command with a gap to fill. A missed card returns later in the round and starts the schedule over. A card answered correctly moves up the schedule and next appears after 1, 3, 7, then 21 days. Keys 1 to 4 choose an option, h shows a hint, and Enter moves on. A hint keeps the card where it is on the schedule. An ordering card is answered by clicking its items in order, and one wrong click ends it. Time values are in nanoseconds. Progress is stored in this browser.

SourceThese cards follow the reporting commands of OpenSTA, the open-source static timing analyzer used by OpenROAD, and each answer links to that command in the OpenSTA command reference. Report commands are not a standard: other timers name and format their reports differently. The report excerpts are real OpenSTA output from the gcd example design. Reference: OpenSTA command reference (OpenSTA on GitHub).
All 74 cards in this deck, with answers
  • report_checks
    Reports the worst setup path in each path group, in full detail.

    Hint: Three defaults decide what you get: which analysis, how much detail per path, and how many paths per group.

    With no options, -path_delay is max (setup), -format is full, and one path is reported per path group. Paths are grouped by the clock that captures them, with separate groups for unclocked and unconstrained paths. OpenSTA reference

  • report_checks -path_delay min
    Reports the worst hold path in each path group.

    Hint: In a timing tool, min and max name the two analyses, not the size of anything.

    min uses the earliest arrivals, which are checked against hold requirements; max uses the latest arrivals, checked against setup. OpenSTA reference

  • report_checks -path_delay min_max
    Reports both the worst setup path and the worst hold path in each group.

    Hint: Read it as min plus max: the two analyses in one report.

    min_max runs both analyses in one report: the setup (max) paths and the hold (min) paths. OpenSTA reference

  • report_checks -group_path_count 10
    Reports up to 10 of the worst paths in each path group.

    Hint: There are two counts in this command: one per path group, one per endpoint. This is the first.

    The default is 1 per group. Because -endpoint_path_count defaults to 1, each endpoint contributes at most one path, so these are the 10 worst endpoints of each group. OpenSTA reference

  • report_checks -group_path_count 5 -endpoint_path_count 3
    Reports 5 paths per group, allowing up to 3 different paths into one endpoint.

    Hint: The group count caps the whole group; the endpoint count only decides how those paths may be shared out.

    -group_path_count caps the paths per group; -endpoint_path_count caps how many of them may end at the same endpoint. Many of those paths can differ only in rise and fall edges; -unique_paths_to_endpoint keeps one path per set of pins. OpenSTA reference

  • report_checks -format end -group_path_count 20
    Lists the 20 worst endpoints per group, one line per endpoint.

    Hint: The end of a path is its endpoint, and the format keeps only that.

    The end format drops the stage-by-stage detail and keeps one line per path end: required time, arrival, and slack. It is the usual way to see how many endpoints fail and by how much. OpenSTA reference

  • report_checks -format full_clock
    Reports the data path plus the launch and capture clock paths, stage by stage.

    Hint: The default report compresses each clock into a single `clock network delay` line. Ask what expanding it shows.

    The default full format shows the clock network delay as a single line. full_clock expands it into the clock buffers on both sides, which shows where skew comes from. full_clock_expanded also shows the path from a generated clock's source. OpenSTA reference

  • report_checks -fields {slew cap fanout}
    Adds slew, capacitance, and fanout columns to every stage of the path.

    Hint: Fields add columns to each stage; they do not filter which paths are reported.

    The extra columns explain a slow stage: a large load, a high fanout, or a slow input slew. input_pin and net add the input pins and the nets as rows. OpenSTA reference

  • report_checks -slack_max 0 -group_path_count 100
    Reports up to 100 paths per group with slack below 0, the failing ones.

    Hint: Read `-slack_max` as an upper bound on the slack of the paths you want listed.

    -slack_max keeps paths with less slack than the value, and -slack_min keeps paths with more. Together with a large path count, -slack_max 0 lists the failing paths. OpenSTA reference

  • report_checks -through [get_pins u_alu/sum*]
    Reports the worst path that passes through one of the pins u_alu/sum*.

    Hint: `-from`, `-through`, and `-to` mean here what they mean in a timing exception.

    -from, -through, and -to narrow the report the same way they narrow a timing exception: from start points, through intermediate pins, to endpoints. OpenSTA reference

  • report_checks -unconstrained
    Also reports paths that have no timing requirement at all.

    Hint: A path with no requirement has no slack, so ask where such paths are normally put.

    They are reported in their own group. Without this option the unconstrained group is not reported at all. An unconstrained path usually means a constraint is missing, for example an output port with no output delay. OpenSTA reference

  • report_checks -group_path_count 5 -sort_by_slack
    Reports the paths in slack order across all groups, not group by group.

    Hint: By default paths are listed group by group, sorted inside each group.

    By default paths are listed group by group, worst first within each group. -sort_by_slack merges the groups into one list ordered by slack. OpenSTA reference

  • report_checks -path_group core_clock
    Reports only the paths in the path group named core_clock.

    Hint: A path's group is the clock that captures it, unless `group_path` moved it.

    A path's default group is the clock that captures it, so this reports paths captured by core_clock. Groups made with group_path are selected the same way. OpenSTA reference

  • set paths [find_timing_paths -path_delay max -group_path_count 10]
    Stores the 10 worst setup paths as path objects in a variable, printing nothing.

    Hint: The name says find, not report. Ask what a script would want back.

    find_timing_paths takes the same selection options as report_checks but returns objects for a script. get_property reads their fields, such as slack, startpoint, and endpoint. OpenSTA reference

  • report_wns
    Prints the worst negative setup slack, or 0 if every setup check passes.

    Hint: The N in WNS (Worst Negative Slack) is negative. Ask what it can report when nothing is negative.

    WNS (Worst Negative Slack) never reports a positive number; a design that passes shows 0. report_worst_slack shows the actual worst slack, positive or negative. -min switches to hold. OpenSTA reference

  • report_tns
    Prints the negative slacks of the failing endpoints added together.

    Hint: The T is total. Ask what it is totalled over.

    TNS (Total Negative Slack) measures how widespread the failures are, and WNS (Worst Negative Slack) how deep the worst one is. A small WNS (Worst Negative Slack) with a large TNS (Total Negative Slack) means many endpoints fail by a little. OpenSTA reference

  • report_worst_slack -min
    Prints the worst hold slack in the design, even if it is positive.

    Hint: Compare it with `report_wns`: only one of the two can report a positive number. `-min` selects hold.

    report_worst_slack reports the actual value, so a passing design shows its margin. report_wns -min would show 0 for the same design. OpenSTA reference

  • report_check_types
    Reports the worst slack of each kind of timing and design-rule check.

    Hint: Types means kinds of check: setup and hold, but also slew, capacitance, fanout, and pulse width.

    The kinds include setup, hold, recovery, removal, clock-gating, maximum slew, capacitance, fanout, minimum pulse width, and minimum period. Each can be requested alone with its option. OpenSTA reference

  • report_check_types -violators
    Lists every violated check of every kind, from setup to maximum slew.

    Hint: A violator is any check with negative slack, not only a timing path.

    This is the sign-off question in one command: is anything violated, of any kind? Timing and design-rule violations are listed together. OpenSTA reference

  • report_check_types -max_slew -max_capacitance -max_fanout
    Reports only the slew, capacitance, and fanout design-rule checks.

    Hint: All three options name design rules, so the report is narrowed to those.

    These are the electrical design rules, reported separately from timing slack. Reporting changes nothing; repair is a separate step. OpenSTA reference

  • report_slack u1/D
    Prints the rise and fall, min and max slack at u1/D per clock.

    Hint: It reports at one pin, so no path is walked. Ask which numbers exist at a pin.

    Pin-level commands print numbers at one pin, without a path. They answer "how much margin is there here?" quickly, and report_checks -through then shows the path. OpenSTA reference

  • report_arrival u1/D
    Prints the earliest and latest arrival times at pin u1/D, per clock.

    Hint: Arrival is when the data gets there, as opposed to when it is needed.

    The arrival is when data reaches the pin. Min and max arrivals feed the hold and setup checks respectively. OpenSTA reference

  • report_required u1/D
    Prints the required times that arrivals at u1/D are checked against.

    Hint: Required is the limit that the arrival is compared against; slack is the difference.

    For setup, data must arrive before the max required time; for hold, after the min required time. Slack is the difference between required and arrival. OpenSTA reference

  • report_clock_skew
    Reports the largest clock-arrival difference between registers that share a path.

    Hint: Skew matters only between registers with a path between them, so ask which pairs are compared.

    Skew only matters between registers connected by a timing path, so only those pairs are compared. -setup and -hold choose which check's view of skew to report. OpenSTA reference

  • report_clock_latency
    Reports the delay from each clock's source to its registers.

    Hint: Latency is the delay from a clock's source to where the clock is used.

    With propagated clocks this is the computed delay through the built clock tree; with ideal clocks it reflects the latency set in the constraints. OpenSTA reference

  • report_clock_min_period
    Reports the smallest period each clock could run at.

    Hint: Ask what the smallest period is that the paths in the design would still meet.

    It also prints the matching highest frequency. It is found from the worst register-to-register paths on the same clock edge. Paths between clocks or edges, latch paths, and paths with multicycle or maximum-delay exceptions are ignored. OpenSTA reference

  • report_clock_properties
    Lists every defined clock with its period and edge times.

    Hint: Properties here means how each clock was defined, not what was measured on it.

    It is a quick check that the clocks were defined as intended, before any path is examined. OpenSTA reference

  • check_setup -verbose
    Checks the constraints for problems and names each offender.

    Hint: The name is about checking the setup of the constraints, not about setup timing.

    The checks cover inputs with no input delay, outputs with no output delay, registers with no clock or several clocks, unconstrained endpoints, combinational loops, and generated clocks without a source clock. Without -verbose only counts are printed. OpenSTA reference

  • check_setup -unconstrained_endpoints
    Warns about endpoints that no timing check covers.

    Hint: An endpoint is unconstrained when nothing checks it: no timing check and no output delay.

    An unconstrained endpoint is never checked, so it can hide a real failure. Input ports without input delay are a separate check, -no_input_delay. OpenSTA reference

  • if {![check_setup]} { exit 1 }
    Stops the script when any constraint check produces a warning.

    Hint: The command returns a value. Ask what a flow would do with it.

    check_setup returns 1 when there are no warnings, so a flow can refuse to continue with broken constraints. OpenSTA reference

  • report_disabled_edges
    Lists the disabled timing arcs and the reason for each.

    Hint: A disabled arc carries no timing at all. Ask what could have disabled one.

    The reason is constraint, constant, or loop. Arcs can be disabled by set_disable_timing, by constants from case analysis, or automatically to break combinational loops. Unexpected entries often explain paths that are missing from reports. OpenSTA reference

  • report_dcalc -from u1/A -to u1/Z
    Shows how the delay of the arc from u1/A to u1/Z was calculated.

    Hint: dcalc is delay calculation: it shows the working behind one arc's delay.

    It shows the inputs to the library lookup, the input slew and the output load, and the delay and slew that result. It is used to debug a delay that looks wrong. OpenSTA reference

  • report_slews u1/Z
    Prints the rise and fall slews at pin u1/Z, for min and max analysis.

    Hint: A slew is a transition time, reported at one pin.

    A slow slew at a pin slows the cells it drives. The limit it is checked against is reported by report_check_types -max_slew. OpenSTA reference

  • report_net n42
    Lists the pins net n42 connects, with its pin and wire capacitance.

    Hint: A net joins a driver to its loads and carries capacitance.

    It shows the driver and the loads on the net and how much capacitance they and the wire contribute, which explains a slow driver. OpenSTA reference

  • report_instance u1
    Lists the library cell of instance u1 and the net on each of its pins.

    Hint: An instance is one placed cell. Ask what is specific to it rather than to its cell type.

    It shows how one instance is connected. The timing arcs of its cell come from report_lib_cell. OpenSTA reference

  • report_edges -from u1/A -to u1/Z
    Lists the timing arcs from u1/A to u1/Z with their delays.

    Hint: An edge is one arc of the timing graph, with a delay on it.

    An edge is one arc in the timing graph, with rise and fall delays. For the calculation behind each delay, use report_dcalc. OpenSTA reference

  • report_lib_cell NangateOpenCellLibrary/BUF_X1
    Describes the library cell BUF_X1, its pins and their properties.

    Hint: The name includes a library, so this is about a cell definition, not a placed instance.

    It shows the library definition, not the design. The name includes the library, as in NangateOpenCellLibrary/BUF_X1. OpenSTA reference

  • report_units
    Prints the units used for values in commands and reports.

    Hint: Numbers in commands and reports carry no units of their own.

    Numbers in commands and reports carry no units of their own, so this is the way to confirm that 0.46 means nanoseconds and not picoseconds. OpenSTA reference

  • report_parasitic_annotation -report_unannotated
    Reports parasitic coverage and lists the nets that lack it.

    Hint: Annotation means data loaded from a file; SPEF (Standard Parasitic Exchange Format) carries parasitics.

    Delays computed without parasitics on some nets are optimistic, so the coverage of the SPEF (Standard Parasitic Exchange Format) file is checked before sign-off timing is trusted. OpenSTA reference

  • report_annotated_delay -report_unannotated
    Summarizes SDF (Standard Delay Format) delay coverage and lists unannotated arcs.

    Hint: SDF (Standard Delay Format) carries delays. Ask what this reports about them.

    An SDF (Standard Delay Format) file gives delays directly instead of having them calculated. Arcs to and from top-level ports are included only with -from_in_ports and -to_out_ports. OpenSTA reference

  • report_annotated_check
    Summarizes how many timing checks received values from an SDF (Standard Delay Format) file.

    Hint: The same idea as the delay report, but for timing checks rather than delays.

    Timing checks (setup, hold, recovery, removal) can be annotated from an SDF (Standard Delay Format) file separately from delays, so their coverage is reported separately. OpenSTA reference

  • report_activity_annotation
    Summarizes which pins have annotated switching activity.

    Hint: Activity is how often pins switch, which is what a power calculation needs.

    Activity comes from simulation (read_vcd, read_saif) or from set_power_activity. Power depends on how often nets switch. Without annotated activity, default input activity is propagated, which is only an estimate. OpenSTA reference

  • report_power
    Reports internal, switching, and leakage power by cell group.

    Hint: Power splits into internal, switching, and leakage, reported per kind of cell.

    The groups are sequential, combinational, clock, macro, and pad, in watts. Without simulation activity, an input activity of 0.1 and duty of 0.5 are assumed and propagated through the logic. OpenSTA reference

  • Which kind of check does this path report?
    report excerpt
    Startpoint: dpath.b_reg.out[4]$_DFFE_PP_
                (rising edge-triggered flip-flop clocked by core_clock)
    Endpoint: dpath.b_reg.out[4]$_DFFE_PP_
              (rising edge-triggered flip-flop clocked by core_clock)
    Path Group: core_clock
    Path Type: min
       ...
       0.00    0.00   clock core_clock (rise edge)
       0.07    0.07   clock network delay (propagated)
       0.15    0.22   clock uncertainty
       0.00    0.22   clock reconvergence pessimism
               0.22 ^ dpath.b_reg.out[4]$_DFFE_PP_/CK (DFF_X1)
       0.00    0.22   library hold time
               0.22   data required time
    ---------------------------------------------------------
               0.22   data required time
              -0.19   data arrival time
    ---------------------------------------------------------
              -0.04   slack (VIOLATED)
    A hold check: the path type is min, with a library hold time.

    Hint: Look at the Path Type line, and at which library time the capture side uses.

    Path Type: max is a setup check and Path Type: min a hold check. The capture side confirms it: a setup report subtracts library setup time, a hold report adds library hold time. A path from a register back to itself is common in hold reports. OpenSTA reference

  • How is the slack of -0.06 obtained?
    report excerpt
       0.38    0.38   clock core_clock (rise edge)
       0.07    0.45   clock network delay (propagated)
       0.00    0.45   clock reconvergence pessimism
               0.45 ^ dpath.a_reg.out[9]$_DFFE_PP_/CK (DFF_X1)
      -0.03    0.42   library setup time
               0.42   data required time
    ---------------------------------------------------------
               0.42   data required time
              -0.48   data arrival time
    ---------------------------------------------------------
              -0.06   slack (VIOLATED)
    The data required time, 0.42, minus the data arrival time, 0.48.

    Hint: The two lines just above the final rule are the two numbers being compared.

    Setup slack is required minus arrival: the data must arrive before the required time, so a later arrival gives a negative slack. For a hold check the order reverses, arrival minus required. OpenSTA reference

  • Why is the data required time 0.42 when the clock period is 0.38?
    report excerpt
       0.38    0.38   clock core_clock (rise edge)
       0.07    0.45   clock network delay (propagated)
       0.00    0.45   clock reconvergence pessimism
               0.45 ^ dpath.a_reg.out[9]$_DFFE_PP_/CK (DFF_X1)
      -0.03    0.42   library setup time
               0.42   data required time
    The capture clock reaches the register 0.07 late, and setup takes back 0.03.

    Hint: Follow the capture side down: the edge time, then the clock tree, then the library time.

    The capture edge occurs at 0.38 at the clock source, but it arrives at the register's clock pin through the clock tree, 0.07 later, at 0.45. The data must arrive the setup time before that: 0.45 minus 0.03 is 0.42. OpenSTA reference

  • Both clock edges show a clock network delay of 0.07. What does that mean for this path?
    report excerpt
       0.00    0.00   clock core_clock (rise edge)
       0.07    0.07   clock network delay (propagated)
       0.00    0.07 ^ dpath.a_reg.out[2]$_DFFE_PP_/CK (DFF_X1)
       0.10    0.17 ^ dpath.a_reg.out[2]$_DFFE_PP_/Q (DFF_X1)
       ...
       0.38    0.38   clock core_clock (rise edge)
       0.07    0.45   clock network delay (propagated)
       0.00    0.45   clock reconvergence pessimism
               0.45 ^ dpath.a_reg.out[9]$_DFFE_PP_/CK (DFF_X1)
    The clock reaches both registers equally late, so no skew.

    Hint: Compare the launch side and the capture side line by line.

    The launch side adds 0.07 to the arrival and the capture side adds 0.07 to the required time, so the two cancel. (propagated) means the delay was computed through the built clock tree; an estimate would read (ideal). OpenSTA reference

  • Which logic gate, after the launching flip-flop, adds the most delay, and why?
    report excerpt
    Fanout     Cap    Slew   Delay    Time   Description
    -----------------------------------------------------------------------------
                              0.00    0.00   clock core_clock (rise edge)
                              0.07    0.07   clock network delay (propagated)
                      0.01    0.00    0.07 ^ dpath.a_reg.out[2]$_DFFE_PP_/CK (DFF_X1)
         4    7.49    0.02    0.10    0.17 ^ dpath.a_reg.out[2]$_DFFE_PP_/Q (DFF_X1)
         3    6.51    0.02    0.03    0.20 v _520_/ZN (NAND2_X1)
         1    2.04    0.01    0.02    0.22 ^ _551_/ZN (NAND2_X1)
         2    3.48    0.01    0.02    0.24 v _553_/ZN (NAND2_X1)
         1    5.86    0.01    0.03    0.27 v place79/Z (BUF_X1)
         2    7.97    0.01    0.02    0.29 ^ _554_/ZN (NAND2_X4)
         1    5.90    0.01    0.01    0.30 v _722_/ZN (NAND2_X4)
         2    8.76    0.01    0.01    0.32 ^ _724_/ZN (NAND2_X4)
        14   35.04    0.02    0.03    0.34 v _755_/ZN (NAND2_X4)
        16   35.73    0.05    0.07    0.41 ^ _854_/ZN (AOI21_X4)
         1    2.51    0.02    0.03    0.44 v _891_/ZN (NAND2_X1)
         1    1.71    0.01    0.02    0.46 ^ _894_/ZN (NAND3_X1)
         1    1.72    0.01    0.01    0.47 v _896_/ZN (NAND2_X1)
         1    1.44    0.01    0.01    0.48 ^ _897_/ZN (INV_X1)
                      0.01    0.00    0.48 ^ dpath.a_reg.out[9]$_DFFE_PP_/D (DFF_X1)
                                      0.48   data arrival time
    _854_, the AOI21_X4, at 0.07: it drives a fanout of 16 and 35.73 fF.

    Hint: The Delay column is per stage, and the Cap and Fanout columns say why a stage is slow.

    The Delay column shows each stage's contribution, and the Cap and Fanout columns explain it: _854_ drives the largest load in the path, and its output slew of 0.05 is also the slowest, which slows the next stage. Capacitance here is in femtofarads, the unit this library uses. OpenSTA reference

  • What makes this hold check fail?
    report excerpt
       0.00    0.00   clock core_clock (rise edge)
       0.07    0.07   clock network delay (propagated)
       0.00    0.07 ^ dpath.b_reg.out[4]$_DFFE_PP_/CK (DFF_X1)
       0.09    0.16 v dpath.b_reg.out[4]$_DFFE_PP_/Q (DFF_X1)
       0.02    0.18 ^ _825_/ZN (INV_X1)
       0.01    0.19 v _826_/ZN (OAI21_X2)
       0.00    0.19 v dpath.b_reg.out[4]$_DFFE_PP_/D (DFF_X1)
               0.19   data arrival time
    
       0.00    0.00   clock core_clock (rise edge)
       0.07    0.07   clock network delay (propagated)
       0.15    0.22   clock uncertainty
       0.00    0.22   clock reconvergence pessimism
               0.22 ^ dpath.b_reg.out[4]$_DFFE_PP_/CK (DFF_X1)
       0.00    0.22   library hold time
               0.22   data required time
    ---------------------------------------------------------
               0.22   data required time
              -0.19   data arrival time
    ---------------------------------------------------------
              -0.04   slack (VIOLATED)
    The 0.15 clock uncertainty pushes the required time past the 0.19 arrival.

    Hint: Work out what the required time would be without the extra line in the middle.

    For hold, the data must arrive after the required time. Without uncertainty the required time would be 0.07 and the check would pass; the 0.15 of hold uncertainty moves it to 0.22. A hold violation is fixed by adding delay to the data path, not by speeding it up. OpenSTA reference

  • What does the clock reconvergence pessimism line of 0.00 mean here?
    report excerpt
       0.00    0.00   clock core_clock (rise edge)
       0.07    0.07   clock network delay (propagated)
       0.15    0.22   clock uncertainty
       0.00    0.22   clock reconvergence pessimism
               0.22 ^ dpath.b_reg.out[4]$_DFFE_PP_/CK (DFF_X1)
       0.00    0.22   library hold time
               0.22   data required time
    There was no early and late difference on the shared clock path to remove.

    Hint: CRPR (Clock Reconvergence Pessimism Removal) credits back pessimism on the shared clock path. Ask what would create pessimism in the first place.

    CRPR (Clock Reconvergence Pessimism Removal) credits back the difference between late and early delay on the part of the clock tree that launch and capture share, since one buffer cannot be early and late at once. With no derating or variation in this run, early and late delays are equal and the credit is 0. OpenSTA reference

  • What does this report tell you about the number of failing endpoints?
    report excerpt
    % report_checks -format end -group_path_count 6
    max_delay/setup group core_clock
    
                                         Required  Actual
    Endpoint                               Delay   Delay   Slack
    ------------------------------------------------------------
    dpath.a_reg.out[9]$_DFFE_PP_/D (DFF_X1)    0.42    0.48   -0.06 (VIOLATED)
    dpath.a_reg.out[4]$_DFFE_PP_/D (DFF_X1)    0.42    0.48   -0.06 (VIOLATED)
    dpath.a_reg.out[8]$_DFFE_PP_/D (DFF_X1)    0.42    0.48   -0.06 (VIOLATED)
    dpath.a_reg.out[10]$_DFFE_PP_/D (DFF_X1)    0.42    0.48   -0.06 (VIOLATED)
    dpath.a_reg.out[6]$_DFFE_PP_/D (DFF_X1)    0.42    0.48   -0.06 (VIOLATED)
    dpath.a_reg.out[0]$_DFFE_PP_/D (DFF_X1)    0.42    0.48   -0.06 (VIOLATED)
    
    max_delay/setup group vclk_core_clock
    
                                         Required  Actual
    Endpoint                               Delay   Delay   Slack
    ------------------------------------------------------------
    resp_msg[14] (output)                   0.36    0.42   -0.06 (VIOLATED)
    resp_msg[13] (output)                   0.36    0.42   -0.06 (VIOLATED)
    resp_msg[11] (output)                   0.36    0.42   -0.06 (VIOLATED)
    resp_msg[12] (output)                   0.36    0.42   -0.06 (VIOLATED)
    resp_msg[9] (output)                    0.36    0.41   -0.05 (VIOLATED)
    resp_msg[15] (output)                   0.36    0.41   -0.05 (VIOLATED)
    At least 6 fail in each group; the list stops at the count asked for.

    Hint: Look at the command line at the top: something there limits how many rows appear.

    -group_path_count 6 limits the list to 6 per group, so it cannot show how many fail in total. report_tns, or -slack_max 0 with a large count, answers that. OpenSTA reference

  • What do these two numbers tell you together?
    report excerpt
    % report_wns
    wns max -0.06
    
    % report_tns
    tns max -2.18
    The worst failure is small, but at least 37 endpoints fail.

    Hint: One number is the worst single failure and the other is a sum. Divide one by the other.

    WNS (Worst Negative Slack) is the deepest failure and TNS (Total Negative Slack) the sum over failing endpoints. No endpoint fails by more than 0.06, so a total of 2.18 needs at least 2.18 / 0.06, about 37, failing endpoints. Both lines say max, so these are setup numbers. OpenSTA reference

  • What does this output say must be fixed before the slack can be trusted?
    report excerpt
    % check_setup -verbose
    Warning: There is 1 input port missing set_input_delay.
      req_msg[5]
    Warning: There are 18 output ports missing set_output_delay.
      req_rdy
      resp_msg[0]
      resp_msg[10]
       ...
      resp_val
    Warning: There are 18 unconstrained endpoints.
      req_rdy
      resp_msg[0]
    An input delay on req_msg[5] and output delays on 18 ports are missing.

    Hint: These are warnings about missing constraints, not about failing timing.

    Ports with no input or output delay are not timed, so their paths never appear in slack reports; a clean report_wns can hide them. The 18 unconstrained endpoints are the same 18 output ports. OpenSTA reference

  • This first table lists each group twice. Which lines are hold and which are setup?
    report excerpt
    % report_check_types
    Group                                  Slack
    --------------------------------------------
    core_clock                             -0.04
    vclk_core_clock                         0.22
    core_clock                             -0.06
    vclk_core_clock                        -0.06
    The first core_clock and vclk_core_clock lines are hold; the second pair is setup.

    Hint: Compare the four slack values with the worst hold and worst setup slack from the path reports.

    The table has no labels, so compare it with the path reports: -0.04 is the worst hold slack from report_checks -path_delay min, and -0.06 is the worst setup slack. Min (hold) is printed first, then max (setup). OpenSTA reference

  • What does this clock skew report show?
    report excerpt
    % report_clock_skew
    Clock core_clock
       0.07 source latency dpath.a_reg.out[12]$_DFFE_PP_/CK ^
      -0.07 target latency dpath.b_reg.out[9]$_DFFE_PP_/CK ^
       0.00 CRPR
    --------------
      -0.00 setup skew
    
    Clock vclk_core_clock
    No launch/capture paths found.
    Both clock pins see the same 0.07 latency, so setup skew is 0.

    Hint: Skew is a difference. Look at the two latency lines and at what sits between them.

    Skew is the target latency minus the source latency, adjusted by CRPR (Clock Reconvergence Pessimism Removal). The virtual clock reaches no registers, so it has no register pairs to compare, which is normal. OpenSTA reference

  • The clock is defined with a 0.38 ns period. What does this report tell you?
    report excerpt
    % report_clock_min_period
    core_clock period_min = 0.44 fmax = 2267.21
    vclk_core_clock period_min = 0.00 fmax = inf
    Its register paths need 0.44 ns, so 0.38 cannot be met yet.

    Hint: Compare the period reported here with the 0.38 ns the clock was given.

    The minimum period comes from the worst same-edge register-to-register paths. fmax is its inverse, in megahertz: 1 / 0.441 ns is about 2267 MHz (megahertz). The virtual clock has no register paths, so it shows 0 and infinity. OpenSTA reference

  • What does this output tell you about the parasitics that were read?
    report excerpt
    % report_parasitic_annotation
    Found 22 unannotated drivers.
    Found 0 partially unannotated drivers.
    22 driver nets have no parasitics, so their wires are ignored.

    Hint: Annotation comes from the parasitics file, so ask what those 22 drivers are missing.

    These nets got nothing from the SPEF (Standard Parasitic Exchange Format) file. A net without parasitics is timed with pin capacitance only, which is optimistic. -report_unannotated lists the nets, so they can be checked before the timing is trusted. OpenSTA reference

  • report_slack on the D pin of dpath.a_reg.out[9] prints this. What is the setup slack for rising data on core_clock?
    report excerpt
    (core_clock ^) r 0.15:0.02 f 0.15:0.04
    (vclk_core_clock ^) r 0.16:0.26 f 0.18:0.24
    0.02: each pair is printed min:max, and max is the setup check.

    Hint: Each pair is two numbers separated by a colon: min first, then max.

    r and f are rising and falling data; each gives min:max slack. Min is the hold check and max the setup check, so rising data has 0.15 of hold slack and 0.02 of setup slack, matching the 0.02 in the path report for this endpoint. OpenSTA reference

  • define_scene slow_func -mode func -liberty ss_0p72v_125c -spef gcd_max.spef
    Defines one analysis combination of mode, library, and parasitics.

    Hint: Three things are named. Ask what each one contributes to an analysis.

    The mode brings the constraints, the library the cell timing, and the SPEF (Standard Parasitic Exchange Format) file the wires. A design is signed off at several such combinations: each pairs an operating condition (the library and parasitics) with a mode (the constraints that apply in it). A scene names one such combination, so reports can cover several at once. Scenes are defined after the libraries and parasitics are read. OpenSTA reference

  • set_mode func create_clock -name clk -period 2.0 [get_ports clk] set_mode test create_clock -name clk -period 20.0 [get_ports clk]
    Puts each set of constraints in its own mode, so both can exist at once.

    Hint: The same clock is created twice with different periods. Ask why that is not a conflict.

    A chip is constrained differently in different modes: functional, scan shift, at-speed test. Modes keep those constraint sets apart, and a scene then says which mode is analysed with which library. Creating the first mode removes the default one. OpenSTA reference

  • set_scene slow_func
    Makes that scene the one later commands report on.

    Hint: Ask what the commands typed after it now refer to.

    Reporting commands work on the current scene unless -scenes names others. Switching scenes is how one session compares the same path at the slow and the fast condition. get_scenes lists what is defined. OpenSTA reference

  • report_checks -scenes {slow_func fast_func} -format end
    Reports the paths across both scenes rather than only the current one.

    Hint: Ask what the report covers that the current scene alone would not.

    Most reporting commands take -scenes, and the default is every scene. Sign-off timing is the worst result across all of them, since setup usually fails slow and hold fails fast. OpenSTA reference

  • define_corners slow fast
    The older way of declaring corners, now deprecated in favour of scenes.

    Hint: Check whether this is the current way to do it.

    It is kept so older scripts still run, and it is used before read_liberty, which is what distinguishes it. New flows use define_scene, which ties a mode, a library, and parasitics together rather than naming a corner alone. OpenSTA reference

  • get_scenes -modes func
    Returns the scenes that use the functional mode's constraints.

    Hint: Ask what a mode can have several of.

    One mode is usually paired with several operating conditions, so a script iterates the scenes of a mode to report each. Like the other object-access commands, it accepts -filter. OpenSTA reference

  • report_checks -format summary -group_path_count 10
    Prints one line per path with its start point, end point, and slack.

    Hint: Between the full path and one line per end, there is a middle.

    summary keeps the start point, which end drops, and omits the required and arrival columns that end shows. It is the quickest way to see which registers the failing paths run between. OpenSTA reference

  • report_checks -path_delay min_max -format short
    Prints only each path's header, with no stages and no numbers.

    Hint: Ask what remains when the stages and the numbers are both dropped.

    What is left is the start point, end point, path group, and path type. That alone answers which paths would be reported, which is how a selection is checked before a long report is run. Confirm it by reading the header lines: the path type says whether it is a setup or a hold path. OpenSTA reference

  • report_checks -format json > paths.json
    Writes the paths in a machine-readable form, ignoring the field options.

    Hint: Ask who reads this one.

    A script that post-processes timing should not parse the human report, whose layout changes between versions. The JSON (JavaScript Object Notation) form is stable, and -fields is ignored because every field is present. OpenSTA reference

  • check_setup -no_clock -unconstrained_endpoints -loops
    Runs only those three checks, rather than the whole set.

    Hint: Three separate checks are named. Ask what running all of them at once would take.

    With no keywords every check runs: missing input and output delays, registers with no clock or several clocks, unconstrained endpoints, combinational loops, and generated clocks whose source is not a clock. Naming a few narrows a long run, or focuses a script on what it cares about. OpenSTA reference

  • You want one number for the worst slack in the design, tracked run over run, and it must keep reporting the margin once every path passes.
    report_worst_slack

    Hint: One of these reports zero as soon as nothing is failing.

    Worst negative slack is clamped at zero, so a design that closes reports the same number however much margin it has. The worst slack keeps counting upward, which is what makes it the better number to plot across runs. OpenSTA reference

  • A path is failing and you suspect the clock reaches its two registers at different times. You want that difference, for the register pairs that share a path.
    report_clock_skew

    Hint: Two of these describe the clock network, but only one compares two ends of a path.

    Latency is how long the clock takes to reach one register, which largely cancels within a clock. Skew is the difference between two of them on the same path, which does not cancel and is what eats the budget. OpenSTA reference

  • Before trusting any number, you want to know whether the constraints themselves are sound: unclocked registers, endpoints nothing checks, ports with no delay.
    check_setup

    Hint: The others report timing; this one reports whether timing means anything.

    A design with half its registers unclocked reports beautiful timing, because nothing is checked. This is the command that says so, and it is the first thing to run on a new constraints file. Listing unconstrained paths is useful too, but it answers a narrower question. OpenSTA reference

  • report_checks ____ min -digits 3
    -path_delay

    Hint: The report wanted here is the hold report.

    Minimum delay paths are the hold checks and maximum delay paths the setup checks, and min_max asks for both. Other timers spell the same option -delay_type, which is why a script moved between tools trips here rather than anywhere more interesting. OpenSTA reference

  • report_checks -format ____
    full_clock_expanded

    Hint: Two of these show the clock. Only one expands it cell by cell.

    The plain full format shows the data path with the clock arrival as a single number. Adding the clock shows the clock edges, and expanding it shows every buffer in the tree, which is what you need when the skew itself is the suspect. OpenSTA reference

  • report_checks ____ 10 -path_group reg2reg
    -group_path_count

    Hint: The other counting option limits how many paths may share one endpoint.

    By default one path is reported per endpoint and a handful per group. Raising the group count gives a longer list of the worst paths; raising the endpoint count gives several paths through the same endpoint, which is what you want when one register is failing for more than one reason. OpenSTA reference