DFT (Design for Test)

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 follow OpenROAD's own commands, checked against the signatures printed by the tool (OpenROAD 26Q3) and the documentation of the module that implements each one. Each answer links to that module's documentation. Commands differ between versions, and commercial tools use different names entirely. Reference: OpenROAD module documentation (OpenROAD on GitHub).
All 6 cards in this section, with answers
  • set_dft_config -max_length 200 -clock_mixing no_mix
    Caps each scan chain at 200 bits and keeps one clock and edge per chain.

    Hint: Two limits on the chains that will be built later: how long, and what may share one.

    Chains are shift registers built from scan flops. no_mix keeps flops of one clock and edge together, which can leave chains of unequal length; clock_mix allows mixing and stitches falling-edge flops before rising-edge ones. -max_chains takes priority over the length limit. OpenROAD reference

  • scan_replace
    Swaps each flip-flop for the scan version of the same cell.

    Hint: It changes cells, not connections, and the cells are bigger afterwards.

    A scan flop has a second data input and a select, so it can shift instead of capture. The swap changes cell areas, so it is done before placement. OpenROAD reference

  • report_dft_plan
    Shows the chains that would be stitched, changing nothing yet.

    Hint: Ask which of preview and commit this one is.

    It is the iteration point: change the configuration, look at the chains, and repeat until the plan is right. It is run after scan_replace and global placement, because the plan depends on where the flops are. OpenROAD reference

  • execute_dft_plan
    Stitches the scan chains into the netlist, connecting each flop to the next.

    Hint: This is the step the preview was previewing.

    Each chain's scan output feeds the next flop's scan input, and the ends are connected to the scan-in and scan-out drivers named in the configuration. The netlist changes, so timing must be rechecked. OpenROAD reference

  • report_dft_config
    Prints the configuration that the plan and the stitching will use.

    Hint: It prints inputs, not results.

    The settings are sticky, so a long script can lose track of them. Printing them before planning keeps the plan explainable. OpenROAD reference

  • scan_opt
    Reorders the flops within a chain so the chain's wiring is shorter.

    Hint: It runs after placement, so it knows where the flops are.

    A chain stitched in netlist order can wander across the block. Reordering it into a spatial order keeps the same flops and the same test while cutting the wire the chain costs. OpenROAD reference