Creating Multi I/O Ring Die Using IC Compiler
Sufyan Khan, Synopsys Inc. John Ho, Synopsys Inc.
The Problem: Pad Limited Design
As feature sizes continue to shrink, die sizes are more often becoming pad limited
Single perimeter ring of required I/Os is larger than core required to implement functions of the chip
core
The Solution: Multiple I/O Rings
Fit concentric I/O rings around required core size
Innermost ring is usually segmented
Flow
IC Compiler Design Planning Flow
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl)
Read Netlist Multiple I/O Planning
Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
Virtual Flat Placement
Set Pad Physical Constraints
Minimum input data:
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
Total number of rings Ring number for each IO Side number for each IO
Use set_pad_physical_constraints command to define IO constraints Use -chip_level_ring option to specify the total ring number
Use -ring option to set ring number for each IO
5
Set Pad Physical Constraints
Example:
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
PAD_1
set_pad_physical_constraints \ -chip_level_ring {depth 2} set_pad_physical_constraints \ -pad_name PAD_1 -ring 1 -side 3 -order 5 set_pad_physical_constraints \ -pad_name PAD_2 -ring 1 -side 1 -order 1 set_pad_physical_constraints \ -pad_name PAD_3 -ring 2 -side 4 -order 17
Note: Up to 6 levels of rings are supported
6
PAD_2
PAD_3
Change Pad Orientation
Use
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
set_pad_physical_constraints
command and following options to change orientation for four sides
-lib_cell -pad_name string -lib_cell_orientation {L T R B}
The string for pad_name is a cell reference name if lib_cell is used The setting of {L T R B} is an additional rotation for left, top, right, and bottom sides of floorplan. It can be set as N, W, S, E, FN, FW, FS, or FE.
Change Pad Orientation
N
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
rotate 0 rotate 90 rotate 180 rotate 270
W S E
FN
FW FS FE
mirror X
rotate 90 first and then mirror X mirror Y rotate 90 first and then mirror Y
Change Pad Orientation
Example
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl)
set_pad_physical_constraints \ -lib_cell \ -pad_name F_CELL \ -lib_cell_orientation {W S N S}
F F F
Manual Adjusted Placements Fix IO Placements
Insert IO Filler Cells Remove Blockages
Initial Orientation
9
F After Rotation
Spacing Between IO Rings
You can specify the spacing between the rings using set_inter_io_ring_spacing command IC Compiler allows to set the inter ring spacing per side based -left_ring_spacing -top_ring_spacing -right_ring_spacing -bottom_ring_spacing
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
10
Spacing Between IO Rings
Example:
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements
set_inter_io_ring_spacing -ring 1 \ -left_ring_spacing 40 -top_ring_spacing 30 -right_ring_spacing 20 -bottom_ring_spacing 10
\ \ \ \
30
Fix IO Placements Insert IO Filler Cells Remove Blockages
20 40 20
10
11
Create Initial Floorplan
Use create_floorplan to create the initial floorplan and place the IO cells Example:
create_floorplan \ -core_utilization 0.7 \ -core_aspect_ratio 1.2
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
NOTE: Please migrate all scripts using initialize_floorplan to create_floorplan command. Synopsys plans to retire initialize_floorplan command
12
Create Blockages
User can use create_placement_blockage to reserve the space in I/O ring areas IO pads are still overlapped with blockages after blockages are created
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
13
Create Blockages
Example:
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
create_placement_blockage \ -coordinate {{x1 y1}{x2 y2}} \ -name placement_blockage_1 \ -type hard create_placement_blockage \ -coordinate {{x3 y3}{x4 y4}} \ -name placement_blockage_2 \ -type hard
14
Create Floor Plan Boundary Control
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages
Use command create_floorplan \ -control_type boundary to honors the placement blockages
You can also use following options to set the distance between the core and the pad cells -left_io2core distance -top_io2core distance -right_io2core distance -bottom_io2core distance
NOTE: (1) If a distance is a negative value, the boundary of core area will beyond pads (2) Option -min_pad_height is replaced by these -*_io2core options
Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
15
Create Floor Plan Boundary Control
Example:
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
create_floorplan -control_type boundary \ -left_io2core -80 \ -top_io2core -80 \ -right_io2core -80 \ -bottom_io2core -80
-80 -80
16
Manual Adjusted Placements
You can manually place IO Macros locations by using GUI in layout view
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
IO Macro
17
Fix Placement and Insert IO Filler
After IO cells location are refined and fixed, its time to insert filler cells Perform automatic filler cell insertion using insert_pad_filler ring option specifies which ring fillers will be placed
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
18
Remove Blockages
You can remove the placement blockages
Open spaces in the internal IO ring may be used for standard cell placement
Set Pad Physical Constraints
Create Initial Floorplan Create Blockages Create Floorplan (Boundary Ctrl) Manual Adjusted Placements Fix IO Placements Insert IO Filler Cells Remove Blockages
19
Case Study
Corner Cells Pad Filler IOs in Core Area
I/O Macros
Multi-height I/Os
Multiple I/O Power Domains
VDDIO_1
VDDIO_2
20
Create Initial Floor Plan
Corner Cells Power Break Cell
Multi-height I/Os
# Rings and spacing set_pad_physical_constraints \ -chip_level_ring {{depth 2}} set_inter_io_ring_spacing \ -ring 1 \ -left_ring_spacing 100 \ -top_ring_spacing 100 \ -bottom_ring_spacing 100 \ -right_ring_spacing 100 source io_constraints.tcl # Create Initial Floorplan create_floorplan
21
Create Placement Blockages
Placement Blockage Placement Blockage
Placement Blockage
Overlapped with IO Pads
# Add placement blockages create_placement_blockage \ -coordinate {{x1 y1}{x2 y2}} \ -name placement_blockage_1 \ -type hard create_placement_blockage \ -coordinate {{x3 y3}{x4 y4}} \ -name placement_blockage_2 \ -type hard
22
Create Floor Plan Boundary Control
Placement Blockage Placement Blockage Placement Blockage IO Pads are Relocated
# create floorplan with # boundary control create_floorplan \ -control_type boundary \ -top_io2core -310\ -bottom_io2core -264 \ -left_io2core -100 \ -right_io2core -467
Core Area
23
Manual Adjusted Placement
IO Macro
IO Macro
# Place IO macros set_attribute \ -quiet IOMACRO_INST1 \ origin { 638.850 2520.000} set_attribute \ -quiet IOMACRO_INST2 \ origin {4061.320 2520.000}
24
Fix I/O Placement and Insert I/O Filler Cells
Pad Fillers
# Add IO fillers insert_pad_filler \ -ring 1 -cell \ "FILLER55 FILLER40 FILLER35 \ FILLER20 FILLER15 FILLER10 \ FILLER5 FILLER1 FILLER01 insert_pad_filler \ -ring 2 -cell \ "FILLER55 FILLER40 FILLER35 \ FILLER20 FILLER15 FILLER10 \ FILLER5 FILLER1 FILLER01"
25
Limitations
When placing IOMACROs or multi-height IOs in the IO ring the adjacent side leaves some gaps to align with the height of the taller IOs
Use placement blockage flow for IOMACROs Manually adjust some IO placement to fill the gap
Create_floorplan does not support Rectilinear floorplans at this time for Multi-IO Rings.
26
Summary
IC Compilers multiple I/O ring flow helps designers solve pad limited design challenges
Minimize die sizes as required by core density versus being limited by a single pad ring
We demonstrated how to create a complex, multi-ring IO structure, including:
multi-height I/O cells I/O macros multiple I/O power domains
IC Compiler supports multiple I/O rings starting from the F-2011.09 release
27