You are on page 1of 27

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

You might also like