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 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 11 cards in this section, with answers
  • export PLACE_DENSITY = 0.60
    Asks global placement to spread cells to 60% density per bin.

    Hint: It is a target for the placer, not a property of the floorplan.

    Utilization sizes the die; this decides how tightly the placer packs cells within it. A lower value spreads cells out, which eases routing and lengthens wires; a higher value does the opposite and runs faster. OpenROAD-flow-scripts reference

  • export PLACE_DENSITY_LB_ADDON = 0.20
    Raises the flow's computed lower bound on density by 0.20.

    Hint: The flow computes a lower bound for density on its own. Ask what this does to it.

    The flow derives a minimum sensible density from the design, and this adds headroom above it, which spreads cells further. It is the usual knob for a design that places easily but routes badly. OpenROAD-flow-scripts reference

  • export CELL_PAD_IN_SITES_GLOBAL_PLACEMENT = 4
    Reserves four sites of empty space beside each cell.

    Hint: The unit is sites, and the padding is not real silicon.

    The padding applies during global placement. It is a placement fiction that leaves room for routing to reach pins and for repair to add cells. It is set separately for global and detailed placement, usually larger for global. OpenROAD-flow-scripts reference

  • export IO_PLACER_H = metal3 export IO_PLACER_V = metal2
    Puts pins on horizontal tracks on metal3 and on vertical tracks on metal2.

    Hint: Horizontal and vertical describe the tracks, not which edge the pin sits on.

    The two variables become the -hor_layers and -ver_layers arguments of place_pins. The layer has to match the track direction, since the pin shape sits on a track. OpenROAD-flow-scripts reference

  • export GPL_TIMING_DRIVEN = 0
    Turns off timing-driven placement, which is on by default.

    Hint: Check the default before deciding what setting it to 0 means.

    Timing-driven placement weights critical nets so they are shortened, at the cost of runtime. It is on by default and turned off for quick exploration runs or when the timing estimate is not yet meaningful. OpenROAD-flow-scripts reference

  • export CLUSTER_FLOPS = 1
    Groups flip-flops into multi-bit cells where the library has them.

    Hint: It only works if the library has the cells for it.

    One multi-bit register serves several bits from a single clock pin, so the clock tree drives fewer sinks and spends less power. The flow ignores the setting on a platform whose library has no such cells. OpenROAD-flow-scripts reference

  • export DONT_USE_CELLS = TAPCELL_X1 FILLCELL_X1 AOI211_X1 OAI211_X1
    Keeps optimization from choosing those cells anywhere in the flow.

    Hint: Ask why a cell that exists would be excluded from use.

    Cells are excluded when they are hard to route into, when they belong to another purpose (a tap or a filler), or when they behave badly. The list becomes set_dont_use inside the flow. OpenROAD-flow-scripts reference

  • export ENABLE_DPO = 0
    Turns off the detailed placement optimization pass, which is on by default.

    Hint: Another one where the default matters. It names an optimization after legalization.

    The pass is improve_placement: local swaps and shifts that shorten wires while keeping the placement legal. It is turned off when it costs more runtime than it is worth, or to keep a placement stable. OpenROAD-flow-scripts reference

  • export CELL_PAD_IN_SITES_DETAIL_PLACEMENT = 2
    Keeps two sites free beside each cell during legalization.

    Hint: Compare it with the global placement padding: same idea, later stage, usually smaller.

    Legalization is the stage that uses it. Global placement is padded more to spread cells early, while legalization is padded less because the space still has to exist in real rows. The padding is removed before filler insertion, so it costs no area in the end. OpenROAD-flow-scripts reference

  • export PLACE_PINS_ARGS = -min_distance 4 -min_distance_in_tracks
    Passes those extra arguments straight to the pin placer.

    Hint: The name says where the text goes, not what it means.

    A passthrough variable exists so a design can reach an option the flow does not otherwise expose, here the minimum spacing between pins in tracks. GLOBAL_PLACEMENT_ARGS and CTS_ARGS do the same for their own stages. OpenROAD-flow-scripts reference

  • export GLOBAL_PLACEMENT_ARGS = -routability_driven
    Adds arguments to the global placement call the flow already makes.

    Hint: Ask what this reaches that the flow's own density variables cannot.

    The flow builds its own global_placement call from the density and timing variables; this appends to it. It is how a design turns on an option such as routability-driven placement without editing the flow. OpenROAD-flow-scripts reference