Games / Command flash cards / Timing reports / Checking the constraints

Checking the constraints

The cards come in more than one shape: a command to explain, and a description whose command you name. 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 6 cards in this section, with answers
  • 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

  • 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

  • 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