Placement

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
  • global_placement -density 0.7
    Spreads the cells for short wires, up to 70% density per bin.

    Hint: Global placement is analytical: cells get positions, not legal ones.

    Cells may still overlap; legalization comes later. The placer balances wirelength against a density penalty on a grid of bins, so cells end up near where they belong but not on legal sites. A lower target density spreads cells further apart, which eases routing and costs wirelength. OpenROAD reference

  • global_placement -timing_driven -routability_driven
    Weights critical nets and inflates congested areas while placing the cells.

    Hint: Both flags make the placer care about something beyond wirelength, and both cost runtime.

    Timing-driven mode runs a virtual repair_design to find slacks and weights low-slack nets so they are shortened; it needs set_wire_rc for the estimates. Routability-driven mode estimates congestion and inflates the cells in congested tiles to spread them. OpenROAD reference

  • detailed_placement -max_displacement {5 1}
    Legalizes the cells onto rows, moving each at most 5 sites, 1 row.

    Hint: Global placement leaves cells overlapping and off-site. Ask what fixes that, and what the limit restricts.

    The displacement limit is in sites and rows. Legalization removes overlaps and snaps cells to legal sites while keeping them near where global placement put them. The displacement limit caps how far a cell may be moved to find a legal spot. OpenROAD reference

  • check_placement -verbose
    Reports the cells that are not legally placed, and why.

    Hint: It only looks. Ask what would make a placement illegal.

    Overlapping, off-site, and out-of-row cells are all reported. It is the gate between placement and the stages that assume legality. A script runs it after legalization and stops if anything is reported; -report_file_name writes the list to a file. OpenROAD reference

  • set_placement_padding -global -left 1 -right 1
    Keeps one empty site on each side of every cell when legalizing.

    Hint: The padding is measured in sites, and it exists for the steps that come after placement.

    The padding is in sites, applied on both sides of each cell. The reserved sites give the router room to reach pins and leave space for buffers added later by repair. Padding applies to legalization, so it is set before detailed_placement. -masters and -instances narrow it to certain cells. OpenROAD reference

  • filler_placement FILL*
    Fills the gaps between placed cells with filler cells.

    Hint: The rails run along the rows, and placement leaves gaps in them.

    The rails then run unbroken along each row. A filler cell carries the power and ground rails and the well and implant layers across a gap, which keeps the rows legal for manufacturing. The argument is a pattern of filler master names, widest first. remove_fillers clears them again so a later stage can edit the rows. OpenROAD reference

  • improve_placement -max_displacement 3
    Swaps and shifts already-placed cells a little to shorten the wiring.

    Hint: It runs after legalization, and it keeps the placement legal.

    The pass makes local improvements: swapping neighbouring cells and moving a cell within the given distance, keeping the result legal. It is cheap compared with placing again. OpenROAD reference

  • optimize_mirroring
    Flips cells about their vertical axis where that shortens the connections.

    Hint: A cell can be flipped without changing where it sits.

    Mirroring changes which side a cell's pins face without moving the cell or breaking legality, so it shortens wires at no cost in area. It is run after legalization. OpenROAD reference

  • cluster_flops -tray_weight 20.0
    Groups nearby flip-flops into multi-bit trays that share one clock pin.

    Hint: The gain is in the clock network, not in the data paths.

    One multi-bit register has a single clock input for several bits, so the clock tree drives fewer sinks and burns less power. The weights trade the clock saving against the extra wirelength pulling the bits together. OpenROAD reference

  • balance_row_usage
    Evens out how full the placement rows are across the core.

    Hint: Rows are the resource; ask what happens when some are full and others are empty.

    Some rows end up packed while their neighbours are empty, and a full row leaves the legalizer and the repair steps nowhere to put anything, and it concentrates routing demand. Evening out row usage keeps later steps possible. OpenROAD reference

  • remove_fillers
    Removes the filler cells, freeing the gaps in the rows again.

    Hint: Ask what would block a later step that needs an empty site.

    Fillers occupy every free site, so anything that wants to insert or move a cell must clear them first. A flow removes them, makes its change, and fills again, which is why filler insertion is late in the flow. OpenROAD reference