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.
All 11 cards in this section, with answers
-
export PLACE_DENSITY = 0.60Asks 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.20Raises 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 = 4Reserves 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 = metal2Puts 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_layersand-ver_layersarguments ofplace_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 = 0Turns 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 = 1Groups 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_X1Keeps 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_useinside the flow. OpenROAD-flow-scripts reference -
export ENABLE_DPO = 0Turns 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 = 2Keeps 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_tracksPasses 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_ARGSandCTS_ARGSdo the same for their own stages. OpenROAD-flow-scripts reference -
export GLOBAL_PLACEMENT_ARGS = -routability_drivenAdds 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_placementcall 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