Routing

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 11 cards in this section, with answers
  • set_routing_layers -signal metal1-metal6 -clock metal4-metal6
    Lets signals use metal1 to metal6 and confines clocks to metal4 to metal6.

    Hint: Two ranges are given. Ask why the clock would get a different one.

    Upper layers are thicker, so they are less resistive; putting clocks there keeps their delay and skew low. The signal range usually excludes the top layers, which the power grid uses. OpenROAD reference

  • set_global_routing_layer_adjustment metal4 0.5
    Tells the global router metal4 has half the capacity it appears to.

    Hint: The router counts tracks. Ask what else is already using them.

    Half the metal4 tracks are treated as unavailable. The power grid, pins, and macro blockages already consume tracks the router would otherwise count. Derating spreads routing out and keeps the detailed router from meeting congestion it cannot resolve. * sets every layer, a range sets several, and a negative value adds capacity. OpenROAD reference

  • global_route -congestion_iterations 30 -congestion_report_file congestion.rpt
    Routes every net through regions, retrying 30 times on congestion.

    Hint: Global routing works on regions, and it negotiates when too many nets want the same one.

    Each net gets a path through a grid of regions with limited capacity, and the congestion report is written to the named file. Where demand exceeds capacity, the router reroutes nets over the given number of iterations. The report can be opened in the graphical viewer. Unresolved congestion stops the flow unless -allow_congestion is set. OpenROAD reference

  • global_route -guide_file route.guide
    Writes each net's regions as a guide for the detailed router.

    Hint: Ask what the detailed router is given to work from.

    The guides are written to the named file. A guide is the corridor the detailed router keeps a net inside, which is what makes detailed routing tractable. write_guides writes the same thing afterwards, and read_guides reads one back. OpenROAD reference

  • set_routing_alpha 0.4
    Trades total wirelength against source-to-sink delay per net.

    Hint: One extreme is the shortest total wire; the other is the shortest path to each sink.

    The value applies when each net's route tree is built. At 0 the tree is a minimum-wirelength Steiner tree, which can take a long detour to a far sink. At 1 every sink gets its most direct path, at the cost of wire. Clock and other timing-critical nets get a higher value, with -clock_nets or per net. OpenROAD reference

  • pin_access -min_access_points 3
    Works out the points and vias by which each pin can be reached.

    Hint: Before a net can be routed, the router needs to know how a pin can be entered.

    A pin is a shape on a low layer that may be reachable only from certain directions and through certain vias. Detailed routing does this itself; the command exists to run and debug the step alone. OpenROAD reference

  • detailed_route -output_drc route_drc.rpt -droute_end_iter 10
    Routes real wires and vias in up to 10 passes, listing violations.

    Hint: It is iterative: each pass tries to remove what the last one could not.

    The violations go to the named file. The detailed router turns each guide into metal and vias that obey the technology's rules, then repeats over the remaining violations. The report lists what is left, which is the number a tapeout must drive to zero. OpenROAD reference

  • create_ndr -name double -width {*2} -spacing {*2}
    Defines a rule whose wires are twice the default width and spacing.

    Hint: Default rules give minimum width and spacing. Ask what a non-default rule changes.

    A wider wire has less resistance and a wider space has less coupling, at the cost of routing room. Clocks and other sensitive nets get such a rule. Defining it changes nothing until assign_ndr applies it. OpenROAD reference

  • assign_ndr -ndr double -all_clocks
    Applies the rule named double to every clock net in the design.

    Hint: The rule already exists. Ask what is still missing.

    Rules are defined once and then applied to nets, either -all_clocks or a named net. The router obeys the rule from then on. OpenROAD reference

  • check_antennas -report_violating_nets
    Reports nets whose metal collects more charge than a gate survives.

    Hint: The damage happens during manufacturing, not in the finished chip.

    -report_violating_nets lists the nets. While a layer is being etched, a long piece of metal connected to a gate accumulates charge and can break the thin oxide. The ratio of metal area to gate area must stay under the foundry's limit. The check needs routing, so it runs after detailed_route. OpenROAD reference

  • repair_antennas ANTENNA_X1 -iterations 5
    Adds diode cells to the violating nets and repeats up to five times.

    Hint: A diode gives the collected charge somewhere to go.

    A diode placed on the net bleeds the charge to the substrate, so the gate survives the etch. Repair reroutes and rechecks, hence the iterations. -jumper_only instead breaks the long metal by hopping to another layer. OpenROAD reference