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.
All 74 cards in this deck, with answers
-
report_checksReports 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_delayismax(setup),-formatisfull, 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 minReports 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.
minuses the earliest arrivals, which are checked against hold requirements;maxuses the latest arrivals, checked against setup. OpenSTA reference -
report_checks -path_delay min_maxReports 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_maxruns both analyses in one report: the setup (max) paths and the hold (min) paths. OpenSTA reference -
report_checks -group_path_count 10Reports 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_countdefaults 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 3Reports 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_countcaps the paths per group;-endpoint_path_countcaps 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_endpointkeeps one path per set of pins. OpenSTA reference -
report_checks -format end -group_path_count 20Lists 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
endformat 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_clockReports 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
fullformat shows the clock network delay as a single line.full_clockexpands it into the clock buffers on both sides, which shows where skew comes from.full_clock_expandedalso 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_pinandnetadd the input pins and the nets as rows. OpenSTA reference -
report_checks -slack_max 0 -group_path_count 100Reports 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_maxkeeps paths with less slack than the value, and-slack_minkeeps paths with more. Together with a large path count,-slack_max 0lists 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-tonarrow the report the same way they narrow a timing exception: from start points, through intermediate pins, to endpoints. OpenSTA reference -
report_checks -unconstrainedAlso 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_slackReports 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_slackmerges the groups into one list ordered by slack. OpenSTA reference -
report_checks -path_group core_clockReports 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_pathare 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_pathstakes the same selection options asreport_checksbut returns objects for a script.get_propertyreads their fields, such asslack,startpoint, andendpoint. OpenSTA reference -
report_wnsPrints 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_slackshows the actual worst slack, positive or negative.-minswitches to hold. OpenSTA reference -
report_tnsPrints 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 -minPrints 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_slackreports the actual value, so a passing design shows its margin.report_wns -minwould show 0 for the same design. OpenSTA reference -
report_check_typesReports 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 -violatorsLists 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_fanoutReports 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/DPrints 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 -throughthen shows the path. OpenSTA reference -
report_arrival u1/DPrints 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/DPrints 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_skewReports 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.
-setupand-holdchoose which check's view of skew to report. OpenSTA reference -
report_clock_latencyReports 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_periodReports 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_propertiesLists 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 -verboseChecks 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
-verboseonly counts are printed. OpenSTA reference -
check_setup -unconstrained_endpointsWarns 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_setupreturns 1 when there are no warnings, so a flow can refuse to continue with broken constraints. OpenSTA reference -
report_disabled_edgesLists 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/ZShows 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/ZPrints 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 n42Lists 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 u1Lists 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/ZLists 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_X1Describes 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_unitsPrints 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_unannotatedReports 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_unannotatedSummarizes 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_portsand-to_out_ports. OpenSTA reference -
report_annotated_checkSummarizes 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_annotationSummarizes 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 fromset_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_powerReports 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: maxis a setup check andPath Type: mina hold check. The capture side confirms it: a setup report subtractslibrary setup time, a hold report addslibrary 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 timeThe 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 timeThere 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 6limits the list to 6 per group, so it cannot show how many fail in total.report_tns, or-slack_max 0with 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_wnscan 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_unannotatedlists 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.
randfare 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.spefDefines 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_funcMakes 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
-scenesnames others. Switching scenes is how one session compares the same path at the slow and the fast condition.get_sceneslists what is defined. OpenSTA reference -
report_checks -scenes {slow_func fast_func} -format endReports 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 fastThe 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 usedefine_scene, which ties a mode, a library, and parasitics together rather than naming a corner alone. OpenSTA reference -
get_scenes -modes funcReturns 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 10Prints 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.
summarykeeps the start point, whichenddrops, and omits the required and arrival columns thatendshows. It is the quickest way to see which registers the failing paths run between. OpenSTA reference -
report_checks -path_delay min_max -format shortPrints 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.jsonWrites 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
-fieldsis ignored because every field is present. OpenSTA reference -
check_setup -no_clock -unconstrained_endpoints -loopsRuns 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_maxasks 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