Chip-level Connections#
The chip-level connections module in OpenROAD (pad
) is based on the
open-source tool ICeWall. In this utility, either place an IO ring around the
boundary of the chip and connect with either wirebond pads or a bump array.
Commands#
Note
Parameters in square brackets
[-param param]
are optional.Parameters without square brackets
-param2 param2
are required.
Placing Terminals#
In the case where the bond pads are integrated into the padcell, the IO terminals need to be placed. To place a terminals on the padring
place_io_terminals
-allow_non_top_layer
inst_pins
Options#
Switch Name |
Description |
---|---|
|
Allow the terminal to be placed below the top layer. |
|
Instance pins to place the terminals on. |
Examples#
place_io_terminals u_*/PAD
place_io_terminals u_*/VDD
Defining a Bump Array#
To define a bump array.
make_io_bump_array
-bump master
-origin {x y}
-rows rows
-columns columns
-pitch {x y}
[-prefix prefix]
Options#
Switch Name |
Description |
---|---|
|
Name of the bump master. |
|
Origin of the array. |
|
Number of rows to create. |
|
Number of columns to create. |
|
Pitch of the array. |
|
Name prefix for the bump array. The default value is |
Example usage: |
make_io_bump_array -bump BUMP -origin "200 200" -rows 14 -columns 14 -pitch "200 200"
Removing Entire Bump Array#
To remove a bump array.
remove_io_bump_array -bump master
Options#
Switch Name |
Description |
---|---|
|
Name of the bump master. |
Example usage:
remove_io_bump_array -bump BUMP
Removing a Single Bump Instance#
To remove a single bump instance.
remove_io_bump instance_name
Options#
Switch Name |
Description |
---|---|
|
Name of the bump. |
Assigning a Net to a Bump#
To assign a net to a bump.
assign_io_bump
-net net
[-terminal iterm]
[-dont_route]
instance
Options#
Switch Name |
Description |
---|---|
|
Net to connect to. |
|
Instance terminal to route to. |
|
Flag to indicate that this bump should not be routed, only perform assignment. |
|
Name of the bump. |
Example usage:
assign_io_bump -net p_ddr_addr_9_o BUMP_6_0
assign_io_bump -net p_ddr_addr_8_o BUMP_6_2
assign_io_bump -net DVSS BUMP_6_4
assign_io_bump -net DVDD BUMP_7_3
assign_io_bump -net DVDD -terminal u_dvdd/DVDD BUMP_8_3
assign_io_bump -net p_ddr_addr_7_o BUMP_7_1
assign_io_bump -net p_ddr_addr_6_o BUMP_7_0
Define IO Rows#
Define an IO site for the pads to be placed into.
make_io_sites
-horizontal_site site
-vertical_site site
-corner_site site
-offset offset
[-rotation_horizontal rotation]
[-rotation_vertical rotation]
[-rotation_corner rotation]
[-ring_index index]
Options#
Switch Name |
Description |
---|---|
|
Name of the site for the horizontal pads (east and west). |
|
Name of the site for the vertical pads (north and south). |
|
Name of the site for the corner cells. |
|
Offset from the die edge to place the rows. |
|
Rotation to apply to the horizontal sites to ensure pads are placed correctly. The default value is |
|
Rotation to apply to the vertical sites to ensure pads are placed correctly. The default value is |
|
Rotation to apply to the corner sites to ensure pads are placed correctly. The default value is |
|
Used to specify the index of the ring in case of multiple rings. |
Example usage:
make_io_sites -horizontal_site IOSITE_H -vertical_site IOSITE_V -corner_site IOSITE_C -offset 35
make_io_sites -horizontal_site IOSITE_H -vertical_site IOSITE_V -corner_site IOSITE_C -offset 35 -rotation_horizontal R180
Remove IO Rows#
When the padring is complete, the following command can remove the IO rows to avoid causing confusion with the other tools.
remove_io_rows
Placing Corners#
To place the corner cells
place_corners
master
[-ring_index index]
Options#
Switch Name |
Description |
---|---|
|
Name of the master for the corners. |
|
Used to specify the index of the ring in case of multiple rings. |
Example usage:
place_corners sky130_fd_io__corner_bus_overlay
Placing Pads#
To place a pad into the pad ring.
place_pad
-row row_name
-location offset
-mirror
[-master master]
name
Options#
Switch Name |
Description |
---|---|
|
Name of the row to place the pad into, examples include: |
|
Offset from the bottom left chip edge to place the pad at. |
|
Specifies if the pad should be mirrored. |
|
Name of the instance master if the instance needs to be created. |
|
Name of the instance. |
Example usage:
place_pad -row IO_SOUTH -location 280.0 {u_clk.u_in}
place_pad -row IO_SOUTH -location 360.0 -mirror {u_reset.u_in}
place_pad -master sky130_fd_io__top_ground_hvc_wpad -row IO_SOUTH -location 439.5 {u_vzz_0}
place_pad -master sky130_fd_io__top_power_hvc_wpad -row IO_SOUTH -location 517.5 {u_v18_0}
Placing IO Filler Cells#
To place the IO filler cells.
place_io_fill
-row row_name
[-permit_overlaps masters]
masters
Options#
Switch Name |
Description |
---|---|
|
Name of the row to place the pad into, examples include: |
|
Names of the masters for the IO filler cells that allow for overlapping. |
|
Names of the masters for the IO filler cells. |
Example usage:
place_io_fill -row IO_NORTH s8iom0s8_com_bus_slice_10um s8iom0s8_com_bus_slice_5um s8iom0s8_com_bus_slice_1um
place_io_fill -row IO_SOUTH s8iom0s8_com_bus_slice_10um s8iom0s8_com_bus_slice_5um s8iom0s8_com_bus_slice_1um
place_io_fill -row IO_WEST s8iom0s8_com_bus_slice_10um s8iom0s8_com_bus_slice_5um s8iom0s8_com_bus_slice_1um
place_io_fill -row IO_EAST s8iom0s8_com_bus_slice_10um s8iom0s8_com_bus_slice_5um s8iom0s8_com_bus_slice_1um
Connecting Ring Signals#
Once the ring is complete, use the following command to connect the ring signals.
connect_by_abutment
Placing Wirebond Pads#
To place the wirebond pads over the IO cells.
place_bondpad
-bond master
[-offset {x y}]
[-rotation rotation]
io_instances
Options#
Switch Name |
Description |
---|---|
|
Name of the bondpad master. |
|
Offset to place the bondpad at with respect to the io instance. |
|
Rotation of the bondpad. |
|
Names of the instances to add bond pads to. |
Example usage:
place_bondpad -bond PAD IO_*
Creating False IO Sites#
If the library does not contain sites for the IO cells, the following command can be used to add them. This should not be used unless the sites are not in the library.
make_fake_io_site
-name name
-width width
-height height
Options#
Switch Name |
Description |
---|---|
|
Name of the site. |
|
Width of the site (in microns). |
|
Height of the site (in microns). |
Example usage:
make_fake_io_site -name IO_HSITE -width 1 -height 204
make_fake_io_site -name IO_VSITE -width 1 -height 200
make_fake_io_site -name IO_CSITE -width 200 -height 204
Redistribution Layer Routing#
To route the RDL for the bump arrays.
rdl_route
-layer layer
[-bump_via access_via]
[-pad_via access_via]
[-width width]
[-spacing spacing]
[-turn_penalty penalty]
[-allow45]
nets
Options#
Switch Name |
Description |
---|---|
|
Layer to route on. |
|
Via to use to to connect the bump to the routing layer. |
|
Via to use to to connect the pad cell to the routing layer. |
|
Width of the routing. Defaults to minimum width for each respective layer. |
|
Spacing of the routing. Defaults to minimum spacing for each respective layer. |
|
Scaling factor to apply to discurage turning to allow for straighter routes. The default value is |
|
Specifies that 45 degree routing is permitted. |
|
Nets to route. |
Useful Developer Commands#
If you are a developer, you might find these useful. More details can be found in the source file or the swig file.
Command Name |
Description |
---|---|
|
Find site given site name. |
|
Find master given master name. |
|
Find instance given instance name. |
|
Find net given net name. |
|
Assert argument that is required for |
|
Connect instance terminals. Required inputs are: |
|
These functions read from $ICeWall::library parameters to generate a standalone Tcl script. |
Example Scripts#
Example scripts for running ICeWall functions can be found in ./test
.
./test/assign_bumps.tcl
./test/bump_array_make.tcl
./test/bump_array_remove.tcl
./test/bump_array_remove_single.tcl
./test/connect_by_abutment.tcl
./test/make_io_sites.tcl
./test/place_bondpad.tcl
./test/place_bondpad_stagger.tcl
./test/place_pad.tcl
./test/rdl_route.tcl
./test/rdl_route_45.tcl
./test/rdl_route_assignments.tcl
Regression Tests#
There are a set of regression tests in ./test
. For more information, refer to this section.
Simply run the following script:
./test/regression
Limitations#
FAQs#
Check out GitHub discussion about this tool.
License#
BSD 3-Clause License. See LICENSE file.