Multiple IO Ring

download Multiple IO Ring

of 27

Transcript of Multiple IO Ring

  • Creating Multi I/O Ring Die

    Using IC Compiler

    Sufyan Khan, Synopsys Inc.

    John Ho, Synopsys Inc.

  • 2

    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

    The Problem: Pad Limited Design

    core

  • 3

    Fit concentric I/O rings around required core size

    Innermost ring is usually segmented

    The Solution: Multiple I/O Rings

  • 4

    Flow

    IC Compiler

    Design Planning Flow

    Read Netlist

    Virtual Flat Placement

    Multiple I/O Planning

    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

  • 5

    Set Pad Physical Constraints

    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

    Minimum input data: 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

  • 6

    Set Pad Physical Constraints

    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

    Example:

    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

    PAD_1

    PAD_2 PAD_3

    Note: Up to 6 levels of rings are

    supported

  • 7

    Change Pad Orientation

    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

    Use

    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.

  • 8

    N rotate 0

    Change Pad Orientation

    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

    W rotate 90

    S rotate 180

    E rotate 270

    FN mirror X

    FS mirror Y

    FW rotate 90 first and then mirror X

    FE rotate 90 first and then mirror Y

  • 9

    Change Pad Orientation

    set_pad_physical_constraints \

    -lib_cell \

    -pad_name F_CELL \

    -lib_cell_orientation {W S N S}

    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

    F

    F F

    F

    F

    F F

    F

    Example

    Initial Orientation After Rotation

  • 10

    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

  • 11

    Spacing Between IO Rings

    Example:

    set_inter_io_ring_spacing \

    -ring 1 \

    -left_ring_spacing 40 \

    -top_ring_spacing 30 \

    -right_ring_spacing 20 \

    -bottom_ring_spacing 10

    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

    30

    10

    40

    20

    20

  • 12

    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

  • 13

    Create Blockages

    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

    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

  • 14

    Create Blockages

    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

    Example:

    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

  • 15

    Create Floor Plan Boundary Control

    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

    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

  • 16

    Create Floor Plan Boundary Control

    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

    Example:

    create_floorplan -control_type boundary \

    -left_io2core -80 \

    -top_io2core -80 \

    -right_io2core -80 \

    -bottom_io2core -80

    -80

    -80

  • 17

    Manual Adjusted Placements

    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

    You can manually place IO Macros locations by using GUI in layout view

    IO Macro

  • 18

    Fix Placement and Insert IO Filler

    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

    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

  • 19

    Remove Blockages

    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

    You can remove the placement

    blockages

    Open spaces in the internal IO ring may be used for standard cell placement

  • 20

    Case Study

    VDDIO_2

    Multi-height

    I/Os

    IOs in

    Core Area

    Pad

    Filler

    I/O

    Macros

    Corner

    Cells

    VDDIO_1

    Multiple

    I/O Power

    Domains

  • 21

    Create Initial Floor Plan

    # 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

    Multi-height

    I/Os

    Power

    Break Cell

    Corner

    Cells

  • 22

    Create Placement Blockages

    # 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

    Placement

    Blockage

    Placement

    Blockage

    Overlapped

    with IO

    Pads

    Placement

    Blockage

  • 23

    Create Floor Plan Boundary Control

    # create floorplan with

    # boundary control

    create_floorplan \

    -control_type boundary \

    -top_io2core -310\

    -bottom_io2core -264 \

    -left_io2core -100 \

    -right_io2core -467

    Placement

    Blockage

    Core Area

    Placement

    Blockage

    Placement

    Blockage

    IO Pads are

    Relocated

  • 24

    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}

  • 25

    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"

  • 26

    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.

  • 27

    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