Floorplan
The cards come in more than one shape: a command to explain, steps to put in order, and a description whose command you name. 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 16 cards in this section, with answers
-
initialize_floorplan -utilization 45 -aspect_ratio 1.0 -core_space 2.0 -site FreePDK45_38x28_10R_NP_162NW_34OSizes die and core so the cells fill 45% of the core.
Hint: Utilization relates cell area to core area. Ask what the command can derive from it.
Rows are made as well. The core area is the design's cell area divided by the utilization; the aspect ratio turns that into width and height, and
-core_spaceadds the margin between core and die. The site sets the row height. Rows for the site are created, and any existing tracks are removed. OpenROAD reference -
initialize_floorplan -die_area {0 0 100 100} -core_area {5 5 95 95} -site FreePDK45_38x28_10R_NP_162NW_34OCreates a 100 micron die with its core inset by 5 microns.
Hint: Two rectangles are given. Ask which one the cells go in and what the difference is for.
The core is filled with rows. Giving the two areas explicitly is the alternative to giving a utilization; setting both leads to unexpected results. The margin between die and core holds the power ring and the boundary pins. Rows are built inside the core from the given site. OpenROAD reference
-
make_tracks metal1 -x_offset 0.095 -x_pitch 0.19 -y_offset 0.07 -y_pitch 0.14Creates the routing tracks on metal1 at the given offsets and pitches.
Hint: initialize_floorplan removes tracks. Ask what has to put them back.
Tracks are the legal wire centre lines that the router and the pin placer use.
initialize_floorplanremoves existing tracks, so they are made again per layer, usually from the technology's own values. OpenROAD reference -
place_pins -hor_layers metal3 -ver_layers metal2Places every unplaced I/O (Input/Output) pin on the die boundary.
Hint: Horizontal and vertical describe the direction of the tracks a pin shape sits on.
Each pin's shape goes on a track of the given layers: pins on horizontal tracks use
-hor_layers, pins on vertical tracks on-ver_layers. The placer chooses positions that shorten the nets to the cells inside, and it creates a metal shape that meets the minimum-area rule. OpenROAD reference -
place_pin -pin_name clk -layer metal3 -location {10.0 20.0} -pin_size {0.5 0.5}Places the one named pin at exactly that location.
Hint: Compare it with place_pins, which does every pin at once.
The location and size are fixed, not a suggestion. It is used for pins that must sit at an agreed place, for example to meet a package or a neighbouring block.
write_pin_placementwrites a file of these commands so a placement can be reproduced exactly. OpenROAD reference -
set_io_pin_constraint -direction input -region left:*Restricts the input pins to the left edge when the pins are next placed.
Hint: It says nothing about when pins move. Ask what it changes for a later command.
The constraint applies to the following
place_pinscall. A region is an edge and an interval, soleft:15-60would use only part of that edge.-groupkeeps a list of pins together and-mirrored_pinsplaces pairs symmetrically. OpenROAD reference -
rtl_macro_placer -halo_width 5.0Places all macros automatically from the netlist hierarchy.
Hint: The name says RTL (Register Transfer Level): the placer reads the netlist hierarchy.
-halo_widthkeeps a 5 micron band clear around each macro. The Hier-RTLMP algorithm clusters the netlist into a hierarchy of soft blocks, shapes them, and then places the macros. The halo is the keepout kept around each macro so standard cells and routing are not pinched against it. OpenROAD reference -
place_macro -macro_name u_sram -location {100.0 200.0} -orientation R0Places one macro at the given location and orientation, by hand.
Hint: This is the manual counterpart to the automatic macro placer.
The location is the macro's lower-left corner in microns and the orientation is a LEF (Library Exchange Format) orientation such as R0 or MX.
-exactand-allow_overlaprelax the checks the command otherwise applies. OpenROAD reference -
set_macro_halo -macro_name u_sram -halo 4.0Keeps a 4 micron band around u_sram clear of standard cells.
Hint: A halo is empty space, not a physical object.
Cells packed against a macro edge leave no room for the macro's pins to be reached, and for the repair steps that follow. The halo reserves that room.
set_macro_extensiondoes the same job for the macro placer's own spacing between macros. OpenROAD reference -
tapcell -tapcell_master TAPCELL_X1 -distance 14 -endcap_master TAPCELL_X1Inserts well taps every 14 microns, and endcaps at the row ends.
Hint: Well taps tie the wells to the supplies; ask what pattern they must follow.
-distanceis the tap pitch and-endcap_masterthe cell that ends a row. Foundry rules limit how far any transistor may be from a well tap, so taps are placed on a checkerboard at that pitch. Endcaps terminate the rows so the wells and implants end legally. Both go in before placement. OpenROAD reference -
cut_rows -endcap_master TAPCELL_X1 -halo_width_x 2 -halo_width_y 2Cuts the placement rows around macros, keeping a 2 micron halo.
Hint: A row that runs under a macro is not usable. Ask what to do about it.
Rows must not run through a macro, so they are cut around it, plus the halo given here, plus a halo so cells do not crowd the macro edge.
-row_min_widthand-row_min_heightdrop the fragments left behind that are too small to use. OpenROAD reference -
create_blockage -region {100 100 200 200} -softDiscourages placement in that region without forbidding it.
Hint: The -soft flag is the interesting part: ask what a soft rule allows.
-softis the difference: a hard blockage keeps every instance out, while a soft blockage steers the global placer away while allowing cells if the placement needs them, and-max_densityinstead caps how full the region may get.-instattaches the blockage to one instance. OpenROAD reference -
write_macro_placement macros.tclWrites the macros' positions as commands that place them again.
Hint: Ask how you would get exactly these macro positions back in a later run.
Automatic macro placement is not repeatable across tool versions, and a reviewed floorplan should not change under you. Writing the result as
place_macrocommands freezes it, and later runs source the file.write_pin_placementdoes the same for pins. OpenROAD reference -
place_tapcells -master TAPCELL_X1 -distance 25Inserts only the well taps, every 25 microns, and no endcaps.
Hint: Compare it with tapcell, which takes many more options.
tapcelldoes taps, endcaps, and corner cells together from one long list of masters. This narrower command does the tap checkerboard alone, which suits a flow that places its boundary cells withplace_endcaps. OpenROAD reference -
Put these commands in the order a flow calls them.
- initialize_floorplan
- pdngen
- global_placement
- clock_tree_synthesis
- detailed_route
Hint: Each one needs something the one before it created.
Rows and a core area come first, then the grid, which must exist before cells are placed over it. The clock tree needs the registers placed, and routing needs the tree. Running these out of order does not usually fail cleanly; it produces a worse result. OpenROAD reference
-
You have a netlist and a die size, and you need a core area with rows and tracks in it before anything can be placed.initialize_floorplan -utilization 45 -aspect_ratio 1.0
Hint: Three of these need the thing the fourth one creates.
The command creates the core, the rows, and the routing tracks, either from a target utilization as here or from an explicit die area, plus the site the rows are built from. Pins, taps, and placement all need those rows. A design read from a layout file already has them. OpenROAD reference