Timing and optimization

Each card shows a command to explain. 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 cover the make variables that drive OpenROAD-flow-scripts, the reference flow built on OpenROAD. Each card shows a line as it appears in a design's or a platform's config.mk, and each answer links to that variable in the flow's own variable reference. Variables come and go between releases; this deck follows the version in the openroad/orfs image. Reference: flow variable reference (OpenROAD-flow-scripts on GitHub).
All 10 cards in this section, with answers
  • export TNS_END_PERCENT = 100
    Repairs all violating endpoints, not only the worst ones.

    Hint: Ask what a lower number would buy, given that the worst path is always repaired.

    The worst path is always repaired; this says how much of the failing tail is repaired after it, as a percentage of violating endpoints. The default is 100, and it is reduced (5 is common) to cut runtime, which leaves total negative slack worse. OpenROAD-flow-scripts reference

  • export SETUP_SLACK_MARGIN = 0.05
    Keeps repairing setup until each path has 0.05 ns of slack in hand.

    Hint: Repair normally stops at zero slack. Ask what this changes about stopping.

    Repairing to a margin (overfixing) leaves headroom for what later stages add, since routing and extraction usually make timing worse. A negative value underfixes, stopping before slack reaches zero, which is used to save runtime. HOLD_SLACK_MARGIN is the same for hold. OpenROAD-flow-scripts reference

  • export HOLD_SLACK_MARGIN = 0.1
    Repairs hold until each path has 0.1 ns of hold slack in hand.

    Hint: Hold is fixed by adding delay. Ask what a margin costs here.

    Hold margin costs buffers and area, because delay has to be added to the fast paths. It buys safety against the on-chip variation that a single corner does not show. A negative value underfixes. OpenROAD-flow-scripts reference

  • export CAP_MARGIN = 20 export SLEW_MARGIN = 20
    Repairs capacitance and slew to limits 20% tighter than the real ones.

    Hint: Both are design-rule limits, and the margins work the same way as the slack ones.

    Before routing, parasitics are estimated from placement and are optimistic. Overfixing against tighter limits leaves room for the real wires. The two become the margin arguments of repair_design. OpenROAD-flow-scripts reference

  • export SKIP_GATE_CLONING = 1
    Stops timing repair from duplicating a gate to split its load.

    Hint: Cloning is one of the transforms timing repair can apply. Ask what it costs.

    Cloning a gate lets each copy drive part of the fanout, which helps a heavily loaded driver, but it adds area and makes the netlist diverge from the synthesized one. Flows disable it when netlist stability or area matters more. Cloning is used by default. OpenROAD-flow-scripts reference

  • export SKIP_LAST_GASP = 1
    Skips the final timing-repair attempt made after the main passes.

    Hint: The name says when it runs, not what it does.

    The last-gasp pass is a final push on whatever still fails after the normal transforms have run. It costs runtime for a small gain, so runs that care about turnaround skip it. It is used by default. OpenROAD-flow-scripts reference

  • export SKIP_INCREMENTAL_REPAIR = 1
    Skips the repair that runs inside global routing.

    Hint: Ask which stage's repair this is, given the parasitics that stage provides.

    After global routing, parasitics are much closer to the truth, so the flow repairs timing again with better numbers. Skipping it saves runtime and leaves those violations for later stages, or unfixed. OpenROAD-flow-scripts reference

  • export RECOVER_POWER = 20
    Slows the 20% of paths with the most slack, to save power.

    Hint: The percentage refers to paths that are not in trouble.

    Slack on a path means it is running faster than it has to, which costs leakage and area. Downsizing those cells trades the unneeded speed back for power. The value becomes repair_timing -recover_power. OpenROAD-flow-scripts reference

  • export MATCH_CELL_FOOTPRINT = 1
    Allows sizing to swap only cells with the same layout boundary.

    Hint: The restriction is physical, not electrical.

    Same-footprint swaps drop into place without disturbing placement or routing, so they can be made late. It narrows the choice of cells, which limits how much timing can improve. OpenROAD-flow-scripts reference

  • export OPT_POST_GRT_WNS = 0
    Turns off the worst-slack repair that normally runs after global routing.

    Hint: Check the default. Ask what kind of repair is gentle enough to run after routing.

    The pass is deliberately gentle: it swaps threshold voltage and reroutes wires rather than adding or moving cells, so it disturbs the placement and routing as little as possible. It is on by default. OpenROAD-flow-scripts reference