Pads and bumps
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 12 cards in this section, with answers
-
make_io_sites -horizontal_site IOSITE_H -vertical_site IOSITE_V -corner_site IOSITE_C -offset 35Creates the pad rows around the die, set in 35 microns from the edge.
Hint: Pads need somewhere legal to sit, as standard cells need rows.
The east and west rows use the horizontal site, the north and south rows the vertical site, and the four corners their own site. The rotations turn each row's site the right way up;
-ring_indexhandles more than one ring. OpenROAD reference -
place_pads -row IO_SOUTH u_reset u_clk_inPlaces those pads into the south row, keeping the order given.
Hint: The pads are named in order. Ask what decides their exact positions.
The order is left to right for the north and south rows and bottom to top for east and west. Positions are chosen to line up with the bumps when bumps exist, and spread evenly otherwise;
-modechooses explicitly. OpenROAD reference -
place_corners CORNER_PADPlaces the corner cells that join the pad rows.
Hint: Two pad rows meet at each corner of the ring.
There is one at each of the four corners. A corner cell carries the ring's supplies and signals around the turn, so the pad ring stays continuous. Without them the rings on adjacent sides are not connected. OpenROAD reference
-
place_io_fill -row IO_SOUTH FILL5 FILL1Fills the gaps in the south pad row with the filler pads given.
Hint: The same idea as filler cells in the core, for a different row.
The fillers are listed widest first, so the row is filled greedily. A continuous row matters because the ring's supplies are carried from pad to pad by abutment. OpenROAD reference
-
connect_by_abutmentConnects the pad ring's signals where neighbouring pad cells touch.
Hint: Neighbouring pads touch. Ask what that contact is for.
Pad and filler cells carry the ring's supplies and control signals across their edges, so placing them against each other wires the ring. The command makes those abutting connections explicit in the netlist. OpenROAD reference
-
place_bondpad -bond BONDPAD u_pad_*Places bond pads on those I/O (Input/Output) cells for wire bonding.
Hint: This is for the older packaging style, where a wire is attached.
In wire bonding a wire runs from a pad on the die to the package, so each I/O (Input/Output) cell needs a bond pad on top of it. Flip-chip parts use a bump array instead. OpenROAD reference
-
make_io_bump_array -bump BUMP -origin {100 100} -rows 14 -columns 14 -pitch {200 200}Creates a 14 by 14 grid of flip-chip bumps on a 200 micron pitch.
Hint: Read the numbers: a grid, and the distance between its points.
A flip-chip part is turned over and its bumps meet the package directly, so the connections are spread over the whole die rather than around its edge. The pitch is much coarser than anything inside the die. OpenROAD reference
-
assign_io_bump -net VDD BUMP_0_0Assigns the VDD net to that bump, and routes the connection to it.
Hint: A bump is just metal until something says what it carries.
Each bump is given a net, and a signal bump is also given the I/O (Input/Output) cell it serves with
-terminal. Routing happens unless-dont_routeis given, which is used when the redistribution routing is done separately. OpenROAD reference -
rdl_route -layer RDL -width 10 -spacing 10 {VDD VSS}Routes those nets on the redistribution layer, from bumps to pads.
Hint: The bumps sit above the die, and the pads sit at its edge.
The redistribution layer is a thick metal layer above the die that moves a connection from where the circuit provides it to where the bump needs it. Its wires are wide and widely spaced, hence the values here. OpenROAD reference
-
remove_io_rowsRemoves the pad rows once the ring is placed.
Hint: It runs at the end. Ask what the rows would otherwise be mistaken for.
Later tools then ignore them. Pad rows are a placement aid for building the ring, and left behind they can be taken for standard-cell rows by tools that look at rows, so they are removed when the ring is complete. OpenROAD reference
-
place_pad -master PAD_GPIO -row IO_SOUTH -location 120.0 u_resetPlaces one pad at a given offset along the named row.
Hint: Compare it with place_pads, which takes a list and spreads them out.
The offset is measured along the row, so the pad lands where the package needs it. Manual placement is used for pads whose position is fixed by the package, with
place_padsfilling in the rest. OpenROAD reference -
place_io_terminals u_pad_*/PADCreates the block's terminals on those pad instance pins.
Hint: A pad cell is an instance; ask what the outside world connects to.
The terminal is the point where the design's port exists physically, on the pad's own pin rather than at the core boundary. Bumps and bond pads then attach to those terminals. OpenROAD reference