Flipchip Appnote INV181-2
Flipchip Appnote INV181-2
© 2018 Cadence Design Systems, Inc. All rights reserved worldwide. Cadence and the
Cadence logo are registered trademarks of Cadence Design Systems, Inc. All others are the
property of their respective holders.
Contents
Purpose ............................................................................. 5
Audience ........................................................................... 5
Acronym List...................................................................... 5
1. Introduction to Flipchip Methodology ............................. 6
1.1 Implementation Methodologies ........................................................................... 6
1.1.1 Peripheral IO ................................................................................................... 6
1.1.2 Area IO ............................................................................................................ 7
1.1.3 Mix Peripheral IO and Area IO ........................................................................ 8
1.2 Flow Methodologies ............................................................................................... 8
1.2.1 Innovus driven floorplaning ............................................................................. 8
1.2.2 Package-driven floorplaning ............................................................................ 9
1.2.3 Co-Design driven floorplaning ......................................................................... 9
2. Innovus Tool Introduction ............................................ 11
3. Data preparation .......................................................... 12
3.1 LEF ...................................................................................................................... 12
3.1.1 RDL layer ...................................................................................................... 12
3.1.2 BUMP ............................................................................................................ 12
3.1.3 IO pad ........................................................................................................... 14
3.1.4 Hard macro ................................................................................................... 14
3.1.5 CLASS BUMP Attribute ................................................................................. 15
3.2 NETLIST .............................................................................................................. 21
3.2.1 Signal pads ................................................................................................... 21
3.2.2 Power and ground pads ................................................................................ 22
4. Flipchip Floorplaning ................................................... 24
4.1 Peripheral IO placement and die size setting ...................................................... 24
4.2 Bump creation and assignment ........................................................................... 30
4.2.1 Bump creation ............................................................................................... 30
4.2.2 Bump assignment ......................................................................................... 34
4.2.3 Port numbering approach in assignment ....................................................... 40
4.3 Bump Assignment Optimization ........................................................................... 43
4.3.1 Automatic bump assignment optimization ..................................................... 43
4.3.2 Manual bump assignment optimization ......................................................... 45
4.4.3 Use Bump Assignment Constraint ................................................................ 46
Purpose
This document is targeted to users who want to create an initial flipchip floorplan using
Innovus (Innovus™ Implementation System). It will describe the different
methodologies and Cadence Design Systems, Inc. recommendations for a successful
chip implementation.
Audience
The document is intended for users with and without experience in Innovus™
Implementation System Flipchip. It will describe in detail the flow involved in the
implementation of a peripheral IO flipchip.
Acronym List
Acronym Full version
SiP System in Package
Innovus Innovus™ Implementation System
RDL Redistribution Layer (metal routing)
IOP IO Planner based on Innovus technology
Pkg abbreviation for package
PCB Printed Circuit Board
DEF design exchange format
LEF library exchange format
OA Open Access database
PIO Peripheral IO
AIO Area IO
HM Hard Macros
fcroute Flip Chip Route
EPS Encounter Power System
CPF Common Power Format
GUI Graphical User Interface
ECO Engineering Change Order
APD Allegro Package Designer
P2P Point to point
PG Power and ground
SI Signal Integrity
TSV Through silicon via
1.1.1 Peripheral IO
IO PADs are placed on the periphery of the die. If the design is severely pad limited it
could have multiple IO rings around the core area. The pin of the pad is routed to the
bumps using the RDL layer. These bumps are located in the core area of the chip. This is
essentially what a peripheral design looks like.
It is not recommended to implement the flipchip features as a post process after design
closure. During full chip implementation, the designer could choose not to use the RDL
layer for signal or power routing and reserve this layer for the flipchip router. In this case
the bump assignment and routing can be performed in parallel to the implementation
flow or as a post step after final timing signoff. This methodology restricts the movement
of the IO pads as they are fixed after implementing the design closure flow. In addition,
the package tool (SiP) can limit the bump location. In this case is common to face routing
congestion and hotspots.
1.1.2 Area IO
In this type of design, the IO PADs are placed in the core area. The user will define IO
pad row clusters in the core where these IO pads will be placed and routed from. With
this implementation, the routing is much less constrained and rarely do routing
congestion issues arise. The bumps can be defined and placed close to the IO pads
shortening the net length.
The disadvantage of this methodology is that the IO pad placement affects the standard
cell placement and therefore the full timing closure flow. The power routing is also more
demanding in this implementation as dedicated power stripes must be routed to feed the
power requirement for the IOs.
In general, this implementation style is more complex but offers much less net delay from
IO pad to the bump. In addition, the SI effect is greatly reduced as the net length is much
shorter.
The design uses the above two methodologies during implementation. There could be
some signals with tight constraints in net delay, which can be candidates for the area IO
methodology. The other signals can be implemented in the periphery. These designs
share the advantages and disadvantages of the methodologies already described.
The digital implementation engineer has an initial and rough floorplan to start with, for
example:
• The size of the chip might be given as a constraint from marketing or from the
customer.
• The location and ordering of some or all the I/O’s may already be known. This
information may come from the PCB or package designer, or there may be some
inherent placement requirements imposed by an analog block in the core.
All this information can be fed into Innovus during the implementation. In this case,
Innovus can drive the flipchip implementation by placing these PADs and then creating
and assigning the bumps. After this implementation, the design needs to go to SiP
Layout (Cadence’s package implementation tool) to verify that the bump placement can
be routed to the package balls. This is becoming very critical as users are trying to
reduce the size of the package which is limiting the routing resources.
In this case the bump creation and assignment are driven by the package tool and by the
constraints from the PCB. This information is fed into Innovus to drive the IO pad
placement. In this flow, the I/O pad and bump planning needs to be done before much of
the digital implementation steps, as the bump assignment is driven by package
requirements. Once the placement of these IOs is fixed the digital implementation in
Innovus can start. There will be no need to come back to SiP to check the bump
assignment as these should not have been modified during the design closure steps.
The downside of this approach is that the package engineer does not have knowledge of
the limitations and constraints coming from the logic in the design. It is probable that
analog blocks have specific placement constraints, which drive the pad placement and
therefore the bump assignment.
This is the best method to achieve a quick compromise between the digital
implementation and the package/PCB board design.
The advantage is that one engineer can move between the digital implementation and
the package implementation by using SiP Layout and Innovus. This methodology allows
the engineer to see IO pads and bumps by die abstract file in Sip Layout System and by
IO file in Innovus which can help to achieve a quicker floorplaning closure.
In the above flow chart graphic, the starting point in the flow is Innovus. However, the
methodology is flexible enough for the engineer to choose whatever tool, Innovus or SiP
Layout as the starting point. Once the compromise between the two design domains is
achieved in terms of routing feasibility, designers in two domains can work on their own
design issue separately and in parallel
Innovus was initially created as a physical tool and as such the minimum data required to
start implementing a design in Innovus are
However, if the user would like to have a more meaningful and realistic floorplaning
result it is advisable to add timing and power information into the database. In this case
there are several files required:
Innovus provides a full solution for users who want to implement a flipchip design using
all the implementation methodologies described previously, peripheral IO, area IO or a
mixed methodology.
It offers a full bump and IO pad optimization based of global routing results. The routing
can be implemented in Manhattan or 45 degree fashion. Innovus also offers the
possibility for the user to use specific routing constraints like differential routing, shielding,
splitting, etc.
3. Data preparation
3.1 LEF
Innovus relies on the LEF files to identify the bumps cells and flipchip pads. The cells
involved in a flipchip design must have the corresponding keywords.
The definition of RDL layer for flipchip flow is similar as other layers’ in LEF. One
example is as below,
LAYER metalRDL
TYPE ROUTING ;
DIRECTION VERTICAL ;
PITCH 0.800 ;
OFFSET 0.100 ;
HEIGHT 3.7350 ;
THICKNESS 0.9000 ;
MINSTEP 0.400 ;
FILLACTIVESPACING 0.600 ;
WIDTH 0.400 ;
MAXWIDTH 12.0 ;
SPACINGTABLE
PARALLELRUNLENGTH 0.00 1.50 4.50
WIDTH 0.00 0.40 0.40 0.40
WIDTH 1.50 0.40 0.50 0.50
WIDTH 4.50 0.40 0.50 1.50 ;
AREA 0.565 ;
MINENCLOSEDAREA 0.565 ;
…
END metalRDL
3.1.2 BUMP
The macro type of BUMP cells need to be CLASS COVER BUMP. This is an example of
a bump cell,
MACRO BUMPCELL
CLASS COVER BUMP ;
ORIGIN 0 0 ;
SIZE 60.0 BY 60.0 ;
SYMMETRY X Y ;
PIN PAD
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER M9 ;
POLYGON 17.25 0.0 42.75 0.0 60.0 17.25 60.0 42.75 42.75 60.0
17.25 60.0 0.0 42.75 0.0 17.25 ;
END
END PAD
OBS
LAYER via89 ;
POLYGON 17.25 0.0 42.75 0.0 60.0 17.25 60.0 42.75 42.75 60.0 17.25
60.0 0.0 42.75 0.0 17.25 ;
END
END BUMPCELL
Note,
• Polygon shapes are supported from LEF 5.6.
• Special shapes are supported by being replaced with an octagonal shape.
3.1.3 IO pad
The macro type of IO pads need to be CLASS PAD AREAIO. This is an example,
MACRO iopad
CLASS PAD AREAIO ;
ORIGIN 0.000 0.000 ;
SIZE 35.000 BY 246.000 ;
SYMMETRY x y r90 ;
SITE pad ;
PIN PAD
PORT
CLASS BUMP ;
……………
If there are hard macros in the design which have pins to be connected to bumps directly
at the top design, these hard macros will keep their original CLASS BLOCK and the
PORTS definition will be enhanced to have a CLASS BUMP associated to them. This is
an example of how the LEF will look:
MACRO Dummy_HM
CLASS BLOCK ;
SIZE 2661.1200 BY 696.6000 ;
ORIGIN 0 0 ;
SYMMETRY X Y R90 ;
PIN A1
DIRECTION OUTPUT ;
USE SIGNAL ;
PORT
CLASS BUMP ;
LAYER top_layer ;
RECT 2469.1800 0.0000 2490.1800
83.0000 ;
END
PORT
….
END Dummy_HM
CLASS BUMP is one type of the port. It explicitly indicates that the port is a bump
connection point and it can help user to distinguish which ports in one pin are for flip chip
flow.
Only CLASS PAD AREAIO and CLASS BLOCK can have CLASS BUMP attribute.
• For CLASS PAD AREAIO, this attribute is optional. Following definitions are
correct for flip chip flow.
MACRO iopad MACRO iopad MACRO iopad
CLASS PAD CLASS PAD CLASS PAD
AREAIO ; AREAIO ; AREAIO ;
… … …
PIN PAD PIN PAD PIN PAD
PORT PORT PORT
CLASS #CLASS #CLASS
BUMP ; BUMP ; BUMP ;
… … …
END END END
MACRO iopad
CLASS BLOCK ;
… This pin is not for flipchip flow and
PIN PAD will be excluded for assignment and
PORT
#CLASS
flipchip routing.
BUMP ;
…
END
PORT
#CLASS
BUMP ;
…
END
PORT
#CLASS
BUMP ;
…
END
END PAD
For
… CLASS PAD AREAIO macro, all ports will be considered as one object for
assignment and flipchip routing.
✓ Only assign one bump to the pin.
✓ Flipchip router will pick one port for routing based on its intelligence.
MACRO iopad
CLASS PAD
AREAIO ;
…
PIN PAD
PORT
#CLASS
BUMP ;
… All 3 ports are for flipchip flow.
END Only assign one bump to pin PAD.
PORT
#CLASS
BUMP ;
…
END
PORT
#CLASS
BUMP ;
…
END
• All ports with
END CLASS
PAD BUMP attribute are equal in one pin.
It …
applies to both CLASS PAD AREAIO and CLASS BLOCK macros in terms
of assignment and routing.
Each port will be assigned to one bump.
Every port can be routed to one or multiple bump, which depends on the setup
of fcroute. User can control the paring of ports and bumps using port
numbering approach.
MACRO iopad
CLASS PAD AREAIO ;
…
PIN PAD
PORT
CLASS BUMP ;
…
END
PORT
All 3 ports are for flipchip flow. Each
CLASS BUMP ;
… port will be assigned to one bump.
END
PORT
CLASS BUMP ;
…
END
END PAD
…
• Other ports in the same pin without CLASS BUMP attribute will be excluded for
assignment and flipchip routing.
It applies to both CLASS PAD AREAIO and CLASS BLOCK macros in terms
of assignment and routing.
Here is an example to explain some ports have CLASS BUMP attribute and
some don’t.
MACRO iopad
CLASS PAD
AREAIO ;
…
PIN PAD This port will be excluded for assignment
PORT and routing.
# CLASS
BUMP ;
…
END
PORT
Both 2 ports are for flipchip flow.
CLASS
BUMP ; Each port will be assigned to one bump.
…
END
PORT
CLASS
BUMP ;
…
END
• PORT withEND PAD
CLASS BUMP attribute with multiple geometries or port shapes is
…
considered as one object for assignment and flipchip routing.
It applies to both CLASS PAD AREAIO and CLASS BLOCK macros in terms
of assignment and routing.
Flipchip router will pick one geometry for routing based on its intelligence since
there is no mechanism to link specific geometry in one port to specific bump.
In case of very close geometries, fcroute will merge some geometries then
choose better one for routing.
MACRO iopad
CLASS PAD AREAIO ;
…
PIN PAD
PORT
# CLASS
BUMP ;
…
END This port with 3 geometries is considered
PORT as one object and will be assigned to one
CLASS bump.
BUMP ;
RECT x x x x ;
RECT x x x x ;
RECT x x x x ;
END
PORT
CLASS
BUMP ;
…
END
END PAD
From PIN…level, assume all pins are
correctly defined as I/O port in netlist and need to be
connected to bumps.
• If none of pins have CLASS BUMP ports,
For CLASS BLOCK macro, these pins will be excluded for flipchip flow.
MACRO iopad
CLASS BLOCK ;
…
PIN PAD_1
PORT
#CLASS BUMP ;
…
END
END PAD_1
PIN PAD_2 All 3 pins have no CLASS BUMP ports
PORT and will be excluded for flip chip flow.
#CLASS BUMP ;
…
END
END PAD_2
PIN PAD_3
PORT
#CLASS BUMP ;
…
END
END PAD_3
…
For CLASS PAD AREAIO macro, each pin will be assigned to one bump.
MACRO iopad
CLASS PAD AREAIO ;
…
PIN PAD_1
PORT
#CLASS BUMP ;
…
END
END PAD_1
PIN PAD_2 All 3 pins have no CLASS BUMP ports.
PORT Each pin will be assigned to one bump.
#CLASS BUMP ;
…
END
END PAD_2
PIN PAD_3
PORT
#CLASS BUMP ;
…
END
END PAD_3
…
• All pins with CLASS BUMP ports are equal in one macro.
It applies to both CLASS PAD AREAIO and CLASS BLOCK macros in terms
of assignment and routing.
Each port with CLASS BUMP in one pin will be assigned to one bump.
Every port with CLASS BUMP in one pin can be routed to one or multiple
bump.
MACRO iopad
CLASS PAD AREAIO ;
…
PIN PAD_1 Assign PAD_1 to one bump.
PORT
CLASS BUMP ;
…
END
END PAD_1 PAD_2 has two ports but only one
PIN PAD_2 has CLASS BUMP attribute, which
PORT
CLASS BUMP ;
will be assigned to one bump.
…
END
PORT The port without CLASS BUMP in
#CLASS BUMP ;
…
PAD_2 will be excluded for flipchip
END flow.
END PAD_2
…
• Other pins in the same macro without CLASS BUMP ports will be excluded for
assignment and flipchip routing.
It applies to both CLASS PAD AREAIO and CLASS BLOCK macros in terms
of assignment and routing.
MACRO iopad
CLASS PAD AREAIO ;
…
PIN PAD_1 PAD_1 will be excluded for flipchip flow.
PORT
#CLASS BUMP ;
…
END
END PAD_1
PIN PAD_2
PORT
CLASS BUMP ;
… PAD_2 and PAD_3 will be assigned to
END bumps.
END PAD_2
PIN PAD_3
PORT
CLASS BUMP ;
…
END
END PAD_3
…
3.2 NETLIST
Bump is physical cell, which must not be defined in netlist. The relationship between
bump and pad is constructed during bump assignment which is based on the shortest
distance. Then use flipchip router to connect IO pad to its assigned bump. Defining
bumps in netlist and assigning nets to these bumps is not a compatible approach to
Innovus and cannot be handled by Innovus.
To be able to assign signal pads to bumps and connect them to their assigned bumps,
the netlist needs to have their connection. This is an example,
module top (
pin_1,
pin_2,
pin_3,
pin_4);
input pin_1;
output pin_2; IO ports in top module can be assigned to
inout pin_3; bumps.
inout pin_4;
endmodule
• IO port pin_4 doesn’t have IO pad to be connected. You can get following
WARNING message after assignment and flipchip router will not route net pin_4.
**WARN: (ENCSP-6014): I/O pin 'pin_4' does not connect to placed Area I/O
instance or hard macro.
To be able to assign PG pads to bumps and connect them to their assigned bumps, the
netlist could have their connection. This is an example,
module top (
pin_1,
pin_2,
pin_3,
pin_4);
input pin_1;
output pin_2; IO port in top module can be assigned to
inout pin_3;
inout pin_4;
bumps.
…
In the example above, you can find the pin VDD of power_pad or the pin VSS of
ground_pad doesn’t have any related IO port.
If the initial netlist does not have physical IO pads (e.g. power and ground IO pads), the
engineer has the option to add them (addIoInstance) during floorplaning.
After the PG connection created, user can assign PG pads to bumps and connect them
to their assigned bumps by flipchip router.
If the PG connection is not created, flipchip router won’t route these PG nets.
Note,
PG nets definition is various. Some users have these nets defined as logical nets
in netlist without declaration in *.globals file. In such a case, Innovus cannot
correctly recognize these nets as special nets and therefore some feature may
not work properly.
4. Flipchip Floorplaning
4.1 Peripheral IO placement and die size setting
After initiating design in Innovus, the GUI will initially show the floorplan with no
PADs, hard macros or standard cell placed in the die/core area.
Before setting the size of the chip, it is recommended to first place the peripheral IO pads
in the design because automatic pad placement will change the size of the chip. For this,
the user has three choices,
• Read an IO file (loadIoFile) provided by the floorplanner architect or package
engineer.
The IO file, provided by the architect, should be driven by the digital
implementation initial studies or prototyping. The package engineer can also
provide the IO placement and this information is driven by bump/ball routing
constraints. The ball position is likely to be driven also by PCB constraints.
Let us assume the common case for the backend engineer, which is that the digital
implementation is not constrained by the architect or by the package engineer. Then the
user can issue the command placePIO This will perform and initial random placement,
which can be refined later.
The picture below shows that the asymmetric rings and IO pads with different heights.
The tool supports the creation of IO Rows for placing the IO PADs. The user can define
IO rows for more customized IO pad placement. To enable this feature the user must
create the IO Rows before placing IO pads (placePIO) by calling the command
createIoRow. The command placePIO will honor IO rows to distribute IO pads into IO
rows. User could call the command, snapFPlanIO –toIoRow, to do automatically
snapping.
(a) (b)
The picture (a) shows the result of after placePIO in IO row flow, IO pads are not
snapped into IO row sites. After calling “snapFPlanIO –toIoRow”, IO pads are
automatically snapped as shown as picture (b).
Once the IO pads are placed, the user can now set the size of the chip. This can be set
by using the pull-down menu Floorplan -> Specify Floorplan.
In above form, the user can specify the die size, which can be driven by marketing or
customer requirement. The tool can also derive the dimension of the chip from the
desired final utilization. The designer can specify the distance between the Core and the
IO boundary. This gap, between the core and the inner IO pad ring (in the case of
multiple IO rings), can be used for routing the power rings around the core placement
area.
• Modify the IO PAD placement based on hard macro placement. The design can
have very specific requirements about analog blocks, i.e. PLL or ADC, placement
that eventually will drive some IO pad positions. These pads and hard macros
(HMs) will be selected and set as fixed after manual placement
(setInstancePlacementStatus –name <IO_name> -status fixed). The rest of
the pads are just placed and they are potential candidates for automatic
optimization based on the bump assignment.
Notes,
• It is very important that the new power and ground pads are assigned to the
correct power and ground nets. The user must create and apply the global net
connections to achieve this, otherwise flipchip router will not route the net from
these pads to the assigned bumps. The global net connections can be done
through the GUI Power->Connect Global Nets, through the command line
globalNetConnect or through reading a CPF file (load_power_intent -cpf)
At the end of these steps, all the hard macros of the design are placed and fixed. The IO
pads are mostly fixed but with a certain degree of freedom in their placement.
There are multiple ways to create bumps in the Cadence tools, the user can create a
single bump or bump array by using the command create_bump.
Usually, bumps are created in a regular pattern with fixed pitch. The create_bump
command can support the following bump patterns in the chip:
• -pattern_full_chip
• -pattern_side {side width}
• -pattern_array {row column}
• -pattern_ring width
• -pattern_center {row column}
Example of peripheral matrix plus core, matrix and stagger bump placement.
Note,
All these different bump patterns can coexist in the same floorplan.
For bump creation, the GUI form Tool -> Flip Chip Toolbox-> Bump Creation can
produce the same result with the command create_bump.
During bump array creation, the tool will issue a warning and will not create bumps
where there are overlaps with other bumps based on bump geometry or where bumps
are to be placed outside the die area. The bump arrays do not look into any type of
routing blockages or obstruction in hard macro LEFs. The command deleteBumps has
the options “–overlap_blockages” and “–overlap_macros” which can be used to
“clean up” the placement of the bumps before signal assignment.
Currently verifyGeometry will not highlight overlaps between bumps and routing
blockages. The bumps need to be assigned (committed) in order for verifyGeometry to
flag the short violation. It is a normal procedure to delete the unassigned bumps after a
flipchip design implementation.
A bump has four location types as specified below. create_bump provides you the
capability to specify which location type is used for bump creation:
• Bump cell center
• Bump cell lower left location
This location can be obtained from bump attribute editor or by using the following
command:
dbGet [dbGet top.bumps.name $Bump_name -p].pt
• Bump geometry (bounding box) center
This location can be obtained with the following command:
dbGet top.bumps.bump_shape_center
• Bump geometry (bounding box) lower left location
This location can be obtained with the following command:
dbGet top.bumps.bump_shape_bbox
From Release 15.2, bump placement supports undo. During bump placement trials, if
you click the Undo button (or use the undo command) after running create_bump, the
bump floorplan will return to the state it was in before create_bump. If you then click
the Redo button (or use the redo command), the bump floorplan will reapply the
changes made by create_bump.
Similarly, if you click Undo after running deleteBumps, the changes made
by deleteBumps are cancelled out and the following bump properties are recovered:
• Name
• Location
• Port number properties
• Fixed status
• Placement status
On clicking Redo, the bump floorplan will revert to the status before undo.
After creating bumps, the user can now assign signal and PG bumps.
For signal assignment, the designer can automatically assign the signal bumps to the
closest pad IO. This normally gives a suboptimal assignment for routing.
• Automatic signal assignment
The user can use the command assignBump for signal assignment, this is fully
automatic assignment and it will assign all available signals for flipchip to bumps
based on the shortest distance. The user also can go to Tools -> Flip Chip
Toolbox -> Bump Assignment -> Setting for Bump Assignment and click on
Assign. The GUI form looks as below,
The user also can type the command assignSigToBump to assign the bumps
manually.
For PG assignment, the tool accepts the possibility of associating PG pads to specific
bumps with signal assignment together. The user can choose to assign PG and signal
pads to bumps together or just separately do the assignment.
• Assign PG and signal pads to bump together
The assignment can be done automatically by using the command, assignBump
–pgnet {net_name1 net_name2…}, with this usage it will consider PG nets with
signal nets together and distribute appropriate bumps resource from global view
based on the shortest distance.
• Assign PG nets only
The tool also allows the user to automatically only assign PG nets to bumps by
the command, assignBump –pgonly –pgnet {net_name1 net_name2…}
If the designer wants to have more control of the assignment of the power and
ground nets, the tool offers a manual assignment by the command
assignPGBumps or by the GUI form. The user can access to it through GUI
form Tools -> Flip Chip Toolbox -> Bump Assignment -> Setting for PG
Bump Assignment.
The user can select the bumps and associate them to power or ground nets
using the above
Notes,
• Notice how the bumps change color once they are assigned. By default, blue for
an assigned signal bump, red for a power bump and yellow for ground bump.
• The designer can change the color of the assignment by supplying the net name
and a valid color, which can be obtained from the link
http://www.w3.org/TR/SVG/types.html#ColorKeywords.
This is useful when the user wants to track the assignment of very specific critical
nets. The command to read this text file is ciopLoadBumpColorMapFile . This is
an example of the file.
Clk green
Address* magenta
connections. Without these two options, this command will only display
one-to-one connection.
For signal assignment, usually one net is related to one bump and flipchip router can find
the connection based on nets; however, for PG assignment, many PG pads are
connected to the same net. Therefore, the user needs to explicitly specify the paring for
PG connection. It means for such vey customized pattern of multiple pads to multiple
pads, fcroute needs to exactly know which pin or ports need to be routed to which
bump.
Port numbering approach allows user explicitly to specify connection between pads to
bumps during the assignment stage.
The user can add “CLASS BUMP” attribute in LEF onto pins/ports to explicitly tell which
pin/port is for flipchip assignment and routing. This attribute has been introduced in the
section 3.1.5 CLASS BUMP Attribute.
PORTs are numbered uniquely per cell in Innovus database, so that they can be referred
during assignment and routing based on instance.
• Numbers are reference for ports
• Regardless of CLASS BUMP attribute, numbers will be created
• CLASS PAD AREAIO and CLASS BLOCK type of instances only
• The user can instantly see port number by checking Miscellaneous -> Port
Number as shown as following.
The picture below shows how the tool display port number based on LEF definition.
MACRO iopad
CLASS PAD AREAIO ;
…
PIN VDD
PORT
CLASS BUMP ;
LAYER METAL8 ;
RECT 5 15 15
35 ;
END
PORT
CLASS BUMP ;
LAYER
METAL8 ;
RECT 25 0 35 10 ;
END
PORT
CLASS BUMP ;
LAYER METAL7 ;
RECT 25 15 35 35 ;
END
END VDD
…
The user can use the command, addBumpConnectTargetConstraint to turn on port
numbering feature for automatic assignment, which can be used for both signal and PG
assignment. It will add port number property onto bumps and you can open Bump
Attribute Editor to see the added property values after assignment. The value takes the
following format,
Type string
Note that before the user can use port numbering related commands, they must turn the
GUI, otherwise ports are not numbered yet so the commands cannot run.
swapSignal deleteBumpConnectTargetConstraint
viewBumpConnection findPinPortNumber
Note,
• Set “setFlipChipMode -honer_bump_connect_target_constraint true” to turn
on port numbering feature for flipchip router(fcroute)
• The number of pin port can be obtained using the dbGet command.
dbget selected.instTerms.cellTerm.pins.?
pin: allShapes class layerShapeShapes objType shapeViaShapes
portNumber
dbget ${instCellpgTerm_gnd}. pins.portNumber
1 2 3 4 … 10 11
At this point in the flow, the power and ground bumps have been assigned. Possibly the
user has also assigned some critical signal bumps close to their IO pads. The rest of the
pads have been assigned to the bumps based on the shortest distance which in some
cases is not the optimal result for routing. At this stage Innovus can optimize the bump
assignment using the command placePIO –assignBump -noRandomPlacement. This
command will call global flipchip router for optimal results in routability.
The above command respects the fix attribute for the bump assignment. The command
to specify the fixed bumps is setBumpFixed. Note that this constraint will affect the
overall routability of the design.
As mentioned earlier, bump and IO pad placement optimization algorithms call the global
flipchip router to obtain an optimal placement. Having constraint information up front will
provide a more realistic scenario for the tool and therefore better results. The full list of
constraints affecting the bump and IO pad placement algorithm is:
• FIXNETPAD
The syntax is as below,
FIXNETPAD
net_name_list
END FIXNETPAD
• FIXPAD
The syntax is as below,
FIXPAD
pad_name_list
END FIXPAD
All the pads in the list are fixed
• FIXPADSIDE
The syntax is as below,
FIXPADSIDE {EAST WEST SOUTH NORTH}
pad_name_list
END FIXPADSIDE
The side of all the pads in the list is fixed as specified.
• FIXNETPADSIDE
The syntax is as below,
FIXNETPADSIDE {EAST WEST SOUTH NORTH}
net_name_list
END FIXNETPADSIDE
The side of all the pads associated with given nets is fixed as specified.
• GROUPNET
The syntax is as below,
GROUPNET
net_name_list
END GROUPNET
The tool will try to place the grouped pads associated with given nets together.
• GROUP
The syntax is as below,
GROUP
pad_name_list
END GROUP
The tool will try to place the grouped pads together.
• FIXBUMP
The syntax is as below,
FIXBUMP
net_name_list
END FIXBUMP
All the bumps associated with given nets are fixed.
• BUMPREGION
The syntax is as below,
BUMPREGION
AREA x1 y1 x2 y2
net_name_list
END AREA
END BUMPREGION
All the bumps associated with given nets are limited in the specified region.
• PAIR
The syntax is as below,
PAIR
net_name pad_name_list bump_name_list
END PAIR
It specifies the connection between bumps and pads based on the net.
If the designer needs to perform minor ECOs on the assigned bumps, the command
swapSignal can be used or go to Tools ->Flip Chip Toolbox -> Assignment Opt.
swapSignal
Swap Signal
Note,
• It supports multiple bumps to multiple bumps.
• Swap signals will not swap bump assignments if these bumps are routed. The
designer will need first to delete the wire with editDelete command.
User also can use constraint file for bump assignment to filter ports of pad pin. The bump
assignment constraint file is loaded using the assignBump -constraint_file option.
SHARE_FIND_PORT
PIN pin_name_list
MACRO macro_name_list
LAYERS top_layer[: bottom_layer]
GEOMETRY_SHORT_EDGE min_value [:max_value]
GEOMETRY_LONG_EDGE min_value [: max_value]
net_name_list
END SHARE_FIND _PORT
The SHARE_FIND_PORT constraint can help you find a specific port. However,
the property of CLASS BUMP port in the LEF file is higher priority than this
constraint, which means the SHARE_FIND_PORT constraint cannot filter the port
with CLASS BUMP in the LEF file.
SHARE_FIND_PORT
PIN VDD
MACRO VDD_PAD DDR_VDD_PAD
LAYERS metalALP
GEOMETRY_SHORT_EDGE 20:25
GEOMETRY_LONG_EDGE 15
@power
END SHARE_FIND _PORT
If this constraint is specified in the assignBump constraint file, only those pins
that meet the following requirements are available for bump
assignment. assignBump ignores all bumps that do not meet these
requirements:
To be connected to the power net in the design
The name in LEF is VDD
Belongs to the macros VDD_PAD or DDR_VDD_PAD
On the layer metalALP
Has short edge between 20 and 25 microns and long edge equals 15 microns
ASSIGN_ANALOG_PG_NETS
net_name_list
END ASSIGN_ANALOG_PG_NETS
net_name_list
✓ Specifies the list of nets that are defined as signal nets in LEF or netlist but
are actually analog PG nets.
✓ Supports wildcard matching.
Note:
✓ The nets specified with the ASSIGN_ANALOG_PG_NETS constraint are
still signal nets but are used for auto power/ground
assignment. assignBump treats these nets in the same way as other
normal power/ground nets.
a. These nets can be specified as arguments of the assignBump -pgnet
{net_list} or -exclude_pgnet {net_list} options.
b. These nets are considered when the assignBump -pginst
{instance_list} is used.
c. These nets are excluded from signal assignment of assignBump.
✓ assignBump does not modify the property of specified nets
in ASSIGN_ANALOG_PG_NETS. Therefore, after assignment, the bumps
that are assigned with the specified nets
in ASSIGN_ANALOG_PG_NETS must be signal bumps instead of
power/ground ones.
Excluding Instances
Use the following syntax to specify list of instances to be excluded from
assignment:
SHARE_IGNORE_INSTANCE
instance_name_list
END SHARE_IGNORE_INSTANCE
Excluding Macros
Use the following syntax to specify list of macros to be excluded from
assignment:
SHARE_IGNORE_MACRO
macro_name_list
END SHARE_IGNORE_MACRO
Here, macro_name_list specifies the list of macros that are to be excluded
during assignment. It supports wildcards.
Here instance_name:pin_name :
✓ Specifies which pin of the specified instance is to be excluded during
assignment.
✓ Supports multiple parameters.
✓ Supports wildcards.
✓ Does not allow any blank spaces before or after “:”
Here macro_name:pin_name :
✓ Specifies which pin of the specified macro is to be excluded during
assignment.
✓ Supports multiple parameters.
✓ Supports wildcards.
✓ Does not allow any blank spaces before or after “:”
Excluding Nets
ASSIGN_IGNORE_NET
net_name_list
END ASSIGN_IGNORE_NET
Here, net_name_list specifies the list of nets that are to be excluded during
assignment. It supports wildcards.
ASSIGN_PAD2BUMP_RATIO
TOLERANCE net_name integer
PGNET net_name ratio
PGMACRO macro:pin ratio
PGINST inst:pin ratio
END ASSIGN_PAD2BUMP_RATIO
For example, if there are 5 pads with VDD and the VDD pin of each pad has
only one port and the pad to bump ratio is 3:2. Then:
Number of groups = Round off {5÷ (3/2) + 0} = 4
Maximum number of ports in each group = Round off {3/2} = 2
This feature tries to provide the best assignment result in following conditions:
✓ The number of groups remains unchanged.
✓ In each group, the number of ports must be no more than the maximum
number of ports.
o Specifies the tolerance value for specific nets. It only supports positive
integers. With this option, the number of pad/port groups will be
counted by the tolerance value.
o The default value is zero.
o It works only for PGNET net_name ratio
o net_name supports wildcard matching.
Example1:
If the ratio for both VDD and VDD0 is 2:1 and the ratio for VSS is 3:2, the
syntax is as below:
PGNET VDD 2:1 #The ratio for VDD is 2:1
PGNET VDDO 2:1 #The ratio for VDDO is 2:1
PGNET VSS 3:2 #The ratio for VSS is 3:2
PGNET VSS 3:2 #As this is the second and last ratio for VSS,
assignBump
#issues a WARNING message and use it as the ratio
of
#net VSS.
PGNET VSSO 1:2 #As the ratio for VSSO is less than 1, assignBump
issues
#an ERROR message and ignores it.
Example 2
PGNET * 2:1 #The ratio for all PG nets specified in the assignBump
command is 2:1
Example 3
In the ratio.const constraint file, following is specified:
PGNET VDD 4:2
PGNET VSS 4:2
Example 1
PGMACRO DDR1:VDD 1:2 #The ratio for VDD pin in DDR1 is 1:2
PGMACRO DDR2:VDD 1:2 #The ratio for VDD pin in DDR2 is 1:2
PGMACRO DDR2:VDD 1:3 #As this is the second ratio and last
ratio for
#VDD pin in DDR2, assignBump
issues a WARNING
#message and uses it as the ratio of
VDD pin in DDR2.
PGMACRO DDR3:VSS 2:1 #As the ratio is more than 1,
#assignBump issues an ERROR
message and ignores it.
Example 2
PGMACRO * 1:2 #The ratio for all pg pins in all macros of the
#intances specified in the assignBump
command
#1:2.
PGMACRO DDR1:* 1:2 #The ratio for all pg pins in DDR1 is 1:2.
PGMACRO *:VDD 1:2 #The ratio for VDD pin in all macros of the
#instances specified in the assignBump
command
#is 1:2.
Example 1
PGINST inst1:VDD 1:2 #The ratio for VDD pin in inst1 is 1:2
PGINST inst2:VDD 1:2 #The ratio for VDD pin in inst2 is 1:2
PGINST inst2:VDD 1:3 #As this is the second and last ratio for VDD
pin
#in inst2, assignBump issues a WARNING
message
#and uses it as the ratio of VDD pin in inst2.
PGINST inst3:VSS 2:1 #As the ratio is more than 1, assignBump
issues
#an ERROR message and ignores it.
Example 2
PGINST * 1:2 #The ratio for all pg pins of all instances
If there is some conflict over ratio, the priority order is PGINST > PGMACRO >
PGNET as shown in the following example.
ASSIGN_PAD2BUMP_RATIO
PGNET VDD 2:1 #The ratio for VDD is 2:1.
PGMACRO DDR:VDD 1:2 #If the VDD pin in DDR is connected to VDD,
#the ratio for VDD pin in DDR is 1:2 as the priority
#of PGMACRO is higher than PGNET.
PGINST inst:VDD 1:3 #The MACRO cell of inst is DDR. As the priority of
PGINST
#is higher than PGMACRO, the ratio for VDD pin in inst
#is 1:3
PGNET VSS 3:1
PGINST inst1:VSS 1:3 #If the VSS pin in inst1 is connected to VSS, the ratio
#for VSS pin in inst1 is 1:3 as the priority of
#PGINST is higher than PGNET.
END ASSIGN_PAD2BUMP_RATIO
This function requires a close collaboration with the package engineer as the bumps
created in the above flow need to be routed to the package balls. The package routing
can be very demanding and resource hungry. It is very likely that there will be some
constraints (in terms of bump placement and assignment) coming from the APD/SiP tool.
This bump placement and assignments can be fed into Innovus by reading an IO file
provided by the package tool. Innovus and SiP provides features, which help this
communication between the tools.
After reading the new bump assignment from the APD tool, the following scenarios/flows
are supported by Innovus:
• If there are bump assignments which are still allowed to be optimized, then the
above described flow can be used. As it was described earlier on, the command
placePIO –assignBump –noRandomPlacement will optimize the bump
assignment. The user should instruct the tool which assignments are fixed by
using the constraint file together with the command setFlipChipMode.
• All the bumps in the design are fixed and assigned by the package engineer. No
new assignments are allowed. In this case the only available methodology for the
engineer is to optimize the IO pad placement. Remember that some of these pads
may only be placed (and not fixed). To optimize these pads, the user will need to
run the following command, placePIO –optIOs –noRandomPlacement.
• Some bumps can be optimized together with some of the IO pads. For this
scenario, Innovus can optimize the placement of IOs and the assignment of the
bumps at the same time. The command placePIO –assignBump –optIOs
–noRandomPlacement can be used to achieve this.
For this case, again, the user needs to supply the fixed bumps by using the
command setFlipChipMode. The IO pads which are not allowed to move should
be set as fixed.
As a golden rule, the sooner the flipchip floorplaning is tackled the easier it is for the
engineer to find a viable solution. Once the design enters into the digital implementation
there is a small chance that the IO pads can be moved.
This flow chart graphic will describe the flow for optimizing the IO pads and/or bump
assignments.
At this point after any modification in the bump assignment the design needs to be
checked in APD for routability. After step C the design is ready for power planning and
RDL routing.
5. Power Planning
The general power planning step does not differ from a non-flipchip design. However,
there are flow recommendations worth mentioning.
It is advisable NOT to use the RDL layer before pad to bump routing, as flipchip router is
very sensitive to routing obstructions. The power routing, i.e. stripe generation, with the
RDL layer can be done after IO pads to bumps routing.
The command addStripe provides 2 options for easier flipchip design support. These
options are:
• -over_bumps
This option will create a power stripe over PG bumps.
The stripe generation will STOP at the end of a valid PG bump.
The picture below shows power stripes in metal 8 generated over bumps in
metal 9. The command will automatically drop the generated vias if bumps
don’t have OBS to prevent via under bump as defined in LEF.
• -between_bumps
This option will create a power stripe between PG bumps.
The stripes will NOT be created in areas where there are no PG bumps.
The picture below shows the result of running the command addStripe with
the –between_bumps option. Notice the missing stripes where there are no
PG bumps.
Single stripes of VSS and VDD are created between the bumps.
These options allow for the possibility of providing an area (rectangular or rectilinear) for
stripe routing. This is very flexible and improves the usability of the command when there
are multiple power domains in your design.
Notes:
• The command addStripe will create stripes over unassigned bumps. It is
recommended that after pad and bump optimization the user deletes all the spare
bumps. verifyGeometry will not highlight these shorts as violations as the bump is
not assigned.
• If the user is planning to create power/ground stripes in the same layer as the
RDL routing then it is recommended to do this after the signal routing by fcroute.
6. RDL Routing
6.1 Introduction
Flipchip router (fcroute) is mainly used for routing the nets between bumps and IO
PADs.
The command, fcroute –type signal, accepts two design styles – peripheral IO (PIO)
and area IO (AIO). But it’s not limited by design styles, which means the user can
use AIO mode for some specific purpose in PIO design.
Note, AIO or PIO mode will be used to describe which design style is specified for
fcroute in this document.
Usually flipchip router connects one bump to one pad. However, fcroute is able to
connect bump to multiples pad or multiple bumps to pad. The related commands are
shown as below.
• Multiple bumps to pad
setFlipChipMode -multipleConnection multiBumpsToPad helps user route
multiple bumps to one pad in parallel.
From version 18.1, Innovus enable serial pad routing (bump-pad-pad routing)
by setFlipChipMode -serial_pad_routing true. The routing results is shown
as below. Please note, only PIO mode support serial pad routing.
Also fcoute can support TSV routing, which can route TSV to bumps/stripes/instance
pins. The related commands are listed as below,
• Connect TSV to bumps, fcroute -type signal –connectTsvToBump
Since TSV has front side bump and back side bump, fcroute should route
them separately. Add “srouteExcludeBumpType bump_cell_name” in extra
configure file to tell fcroute to know exclude which bumps for routing.
✓ When connect TSV to back side bump, please use extra config file to
exclude the front bump
✓ when connect TSV front side bump, please exclude the back side bump
Flipchip route (fcroute) is an intelligent and predictable RDL router and it can help the
designer evaluate floorplan change based on the quick flipchip routing result. In the initial
floorplan stage, the user can use following general setting to get a quick routing result,
• Set routing layers
Use the command setFlipChipMode to set
setFlipChipMode –layerChangeBotLayer bot_layer_name\
-layerChangeTopLayer top_layer_name
Use the command fcroute to set
fcroute –layerChangeBotLayer bot_layer_name\
-layerChangeTopLayer top_layer_name
Step2: get routing setting for fcroute to make sure all the settings are
expected.
getFlipChipMode
Step1: get routing setting before routing to make sure all the settings are
expected.
getFlipChipMode
Step2: run fcroute with PIO mode with general settings as an example,
fcroute –type signal –designStyle pio -routeWidth value\
–layerChangeBotLayer bot_layer_name\
-layerChangeTopLayer top_layer_name
Note that the difference between the settings for setFlipChipMode and fcroute is as
below,
• All the settings set by the command setFlipChipMode can be saved/ restored by
saveDesign/restoreDesign. And they can work on fcroute if they’re not reset or
overwrite by the options of fcroute.
• All the setting set by the command fcroute cannot be saved after running fcroute.
And they only works when they’re used in fcroute.
Generally, fcroute can well handle typical pin shape shown as below,
• Only one geometry for fcroute
• Width/height of pin geometry won’t be different greatly from each other.
• At least one of width/height is larger than routing width.
Note, fcroute also can route some special pin shape such as one slim geometry and
multiple geometries. But the routing quality is not so well and we’re tuning the quality.
All above is for the basic function of fcroute and it’s greatly extended by constraints and
extra configure options for customized requirements.
• All constraints are specified in a text file and they can be given as an input to the
command fcroute –constraintFile or setFlipChipMode –constraintFile.
• All extra configure options are specified in a text file and they can be given as an
input to the command fcroute –extraConfig or setFlipChipMode –extraConfig.
Some useful constraints and extra configure options for fcroute will be described in
detailed in this module.
Note,
• For all length constraints, they take micron.
• For all resistance constraint, they take ohm.
• All values can take floating ones.
The user can specify general constraints affecting all the nets in the design. These
general constraints need to be declared at the top of the file. The accepted constraints
are as below,
• WIDTH <value>
It specifies the global width for all the nets.
The unit is micron.
Both AIO and PIO modes support this constraint.
Both Manhattan and 45 degree routing support this constraint.
If the user also specifies routing width in the command setFlipChipMode or
fcroute, fcroute will use the width specified in the command.
It can also be applied into the NETS constraint which is a local constraint and
the specified width value only works on the associated nets in NETS
constraint.
• WIDTHRANGE min_value:max_value
It only works for PIO modes.
It specifies a width range and allows fcroute to optimize wire width by
considering MAXRES constraints.
The unit is micron.
It can also be applied into the NETS constraint which is a local constraint and
the specified width range only works on the associated nets in NETS
constraint.
• MAXRES <value>
It specifies the maximum resistance allowed to all the specified nets.
The unit is ohm.
Only PIO mode supports this constraint.
Both Manhattan and 45 degree routing support this constraint.
The command fcroute can report the resistance with the setting
“srouteFCReportRes res_file_name” in the extra configure file.
It can also be applied into the NETS constraint which is a local constraint and
the specified resistance only works on the associated nets in NETS constraint.
• SPACING <value>
It specifies the distance in microns between the net routed by the flipchip
router and all other routes.
The unit is micron.
Both AIO and PIO modes support this constraint.
Both Manhattan and 45 degree routing support this constraint.
The router uses the spacing value to limit the effect of coupling capacitance on
the total capacitance of the net.
It can also be applied into the NETS constraint which is a local constraint and
the specified spacing only works on the associated nets in NETS
• PIOLAYERCHANGE PAD
It turns on layer change feature.
Only PIO mode supports this constraint.
Both Manhattan and 45 degree routing support this constraint.
Different setting for routing layers will have following behaviors, assume top
RDL is TOP_RDL and the second top RDL is 2nd_RDL.
✓ Use TOP_RDL as much as possible and 2nd_RDL is only used when
single layer cannot finish routing in case of cross-over.
–layerChangeBotLayer TOP_RDL -layerChangeTopLayer TOP_RDL
✓ Freely change layers, so that the tool will use layer resources by its
intelligence.
–layerChangeBotLayer 2nd_RDL -layerChangeTopLayer TOP_RDL
• FINDPINLAYERS <layer_name>
It specifies the layer of the pin geometry for connection.
Both AIO and PIO modes support this constraint.
Both Manhattan and 45 degree routing support this constraint.
SPLIT constraint is to split wires when routing width is larger than MAXWIDTH defined in
LEF or the specified value by the user.
SPLIT constraint works for AIO and PIO modes. Also it supports both Manhattan and 45
degree routing.
SPLITSTYLE RIVER|MESH
SPLITWIDTH <value>
SPLITGAP <value>
SPLITKEEPTOTALWIDTH TRUE/FALSE
• SPLITSTYLE RIVER/MESH
It specifies the interleaving style used for the split wires.
The default value is RIVER.
RIVER: The split wires do not have an interleaving pattern.
MESH: The split wires interleave with one another, as shown in the following
illustration:
• SPLITWIDTH <value>
It specifies the width of the split wire segment. If routing width is larger than
this value, fcroute will auto split them.
The unit is micron.
Default value: MAXWIDTH defined in LEF
• SPLITGAP <value>
It specifies the gap between split wire segments.
The unit is micron.
If you specify this constraint, ensure that the distance between the split wire
segments must be greater than the specified gap value.
If you do not specify this constraint, the distance between split wire segments
is the default minimum spacing value that does not cause DRC violations.
• SPLITKEEPTOTALWIDTH TRUE/FALSE
It’s used to control different formula to compute the width of splitting wires.
FALSE
✓ This is the default value.
✓ The splitting wire width is calculated using the follow formula
Total_wire_width = split_wire_width x n + split_gap x (n - 1)
✓ For example, routing width=13, MAXWIDTH in LEF=10, split_gap=1.5.
Therefore, split_wire_wdith=(13-1.5)/2=5.75
TRUE
✓ The splitting wire width is calculated using the follow formula
Total_wire_width = split_wire_width X n
✓ For example, routing width=13, MAXWIDTH in LEF=10, split_gap=1.5.
Therefore, split_wire_wdith=13/2=6.5
✓ The difference from FALSE is to take the split gap out of the wire width
calculation so that splitting wire width can be controlled by the user.
• It can also be applied into the NETS constraint which is a local constraint and
SPLIT feature only works on the associated nets in NETS constraint.
SPLITSTYLE MESH
The user can use NETS constraint to set some specific constraint for nets. It can work for
AIO and PIO modes. Also it supports both Manhattan and 45 degree routing.
NETS
WIDTH <value>
ROUTELAYERS <bottom_layer:top_layer>
SPACING <value>
<net_name_list>
END NETS
• “WIDTH <value>” and “SPACING <value>” are the same as the one in 6.2.1
Global Constraints
• ROUTELAYERS <bottom_layer:top_layer>
It specifies a layer range for routing.
The name of layer could be specified the layer number or the layer name in
LEF.
• <net_name_list>
It specifies the names of nets.
It supports general matching methods as below,
✓ It supports “~”, which negates the specified net.
✓ It supports wildcard matching(*)
✓ It supports “@SIGNAL, @POWER, @GROUND”,
@SIGNAL means all signal nets;
@POWER means all power nets;
@GROUND means all ground nets.
Differential routing is aimed at providing similar net delays and it applies to pairs of nets.
It only works for AIO mode and also it supports both Manhattan and 45 degree routing.
(a) (b)
(c)
The same constraints have been used to create the above three routing results, the
differences were on the nets selected for routing. In these routing examples,
• Picture (a) has balanced routing matching the length and topology of both nets.
• Picture (b) cannot match the length but keeps the topological matching.
• Picture (c) cannot match the topological so fcroute matches the length and the
width of both nets.
DIFFPAIR
[THRESHOLD <value>]
<Net1>
<Net2>
END DIFFPAIR
• THERSHOLD <value>
It specifies the percentage threshold between normal and balance routing for
extra wire length.
For example, “THERSHOLD 0.2” means to specify the threshold as 20%.
For a group of nets (more than 2) the router tries to match routing length. It only works for
AIO mode. Also it supports both Manhattan and 45 degree routing.
In the picture below the user has selected 4 nets to MATCH the length of the routing.
Flipchip router supports the capability of shielding nets during routing. To enable the
feature the recommendation is to use the constraint file. Both AIO and PIO modes
support this feature. Also both Manhattan and 45 degree routing support it.
SHIELDING
SHIELDBUMP TRUE/FALSE
SHIELDWIDTH <value>
SHIELDGAP <value>
SHIELDSTYLE a|b|c
SHIELDNET <net_name>
<net_name_list>
END SHIELDING
• SHIELDBUMP TRUE/FALSE
TRUE
✓ Shield bump with the specified shield net.
✓ It only works in aio mode and Manhattan routing style.
FALSE
✓ Don’t shield bump.
✓ It’s the default value for SHIELDBUMP.
• SHIELDWIDTH <value>
It specifies the width of the Shield Net, measured in microns.
• SHIELDGAP <value>
It specifies the distance in microns between the shield (the special net) and the
shielded net (the signal net).
• SHIELDSTYLE a|b|c
It specifies where you want the shield to be placed, Above or Below or on the
Common layer.
✓ a = above the layer containing bumps
✓ b = below the layer containing bumps
✓ c = on the layer containing bumps ("common layer")
• SHIELDNET <net_name>
It specifies a special net (typically VSS) used to shield the net.
• <net_name_list>
It specifies the shielded nets.
In the picture below, the left net doesn’t have SHIELDBUMP and the right net can be
achieved by using “SHIELDBUMP TRUE”.
Note, the shielding created will be floating. The user will need to connect the shielding to
the correct power/ground supply by using the editPowerVia command.
When using the fcroute shielding option, the defOut marks the shielded nets as
`SHIELD', while displaying the SHAPE and ROUTED status of the metal shield wire.
Example
Consider the following example in which the fcroute command connects signal bumps
to I/O cells using 90 degree signal routing for AIO; The command adds a side shield
(VSS) on both sides of the signal route.
DEF Syntax
The defOut contains the SHIELD syntax as follows:
PAIR constraint is used to control the paring between bumps and pads, especially for
PG connection because it’s common case for PG bumps and pads to have multiple
bumps to multiple pads connection requirements and the user need to define the paring.
Both AIO and PIO modes support this constraint. Also both Manhattan and 45 degree
routing support it.
PAIR
• If the specified bump is not assigned or assigned to another net which is different
from the specified net, fcroute will ignore it.
• For those IO pads or bumps not in the list but needed to be connected to the
specified net, fcroute will ignore them and only route the specified ones by PAIR
constraint for the same net.
The designer may constrain the net resistance during routing. Both AIO and PIO modes
support this feature. Also both Manhattan and 45 degree routing support it.
NETS
MAXRES <value>
WIDTHRANGE min_value: max_value
<net_name_list >
END NETS
• MAXRES is the maximum resistance value allowed for the nets defined in the
constraint.
• WIDTHRANGE specifies a variable width. The router is allowed to use any width
value between these two limits to avoid violating the max resistance.
The resistance values achieved after routing will be written to this file. This file will report
the resistances in a table as follows:
#================================
#........Resistance Table........
# resSQ: 0.100 for METAL8
#================================
'int' 0.875
…
'port_pad_data_out[15]' Actual:3.159 Constraint:3.000
This information can be useful for debugging purposes. For accurate values of
resistance, it is recommended to run QRC (Cadence Signoff Extraction Tool). QRC can
be run from Innovus.
The options mentioned here are not completed but some options that usually asked by
customers. For special needs, please contact Cadence support.
• srouteFcReportRes file_name
It will write the resistance report into the specified file to help checking the
result with MAXRES constraint
• srouteRouteWidthForLowerLayer <value>
It specifies different value for lower routing layer.
The unit is DB unit.
✓ For example, if DB unit is 2000 and the width for lower layer is 8 micro,
then this value should be set as 2000*8=16000.
• srouteExcludeBumpType <bump_cell_name>
It specifies which bump cell will be excluded from fcroute.
It is recommended that these connections are done at the same time as the signal
routing. Flipchip router (fcroute) has an option called –connectPowerCellToBump.
This option will tell the router to connect the bumps to the IO pads at the same time that
the signal routing is being done. The designer can also use the command
“setFlipChipMode – connectPowerCellToBump true” to turn on this feature.
The command fcroute will automatically pair PG bumps with PG pads based on
routability with some intelligence if there are no specific pairing constraints by the user.
Also fcroute will choose the suitable pin for routing based on its intelligence if there is no
constraint by the user.
For more control of the connection between PG bumps and PG pads, the designer can
use the PAIR constraint in the constraint file or use port numbering feature.
The command “fcroute –type power” can directly connect PG bumps to rings or stripes.
The connection between the bump and the stripes is done using fcroute.
The user can create some extra power and ground bumps are created to reduce the IR
drop. This is one of the advantages of the flipchip design.
The picture below shows the difference between “fcroute –type signal –designStyle
pio –connectPowerCellToBump”, “fcroute –type power” and “addStripe”.
(a) (b)
(c) (d)
P2P router can be used for customized and special routing pattern generation.
• The usage is as below,
If not set net name, p2pRoute automatically picks up the net name based on the
objects selected in the GUI.
If not select “Use exact location”, p2pRoute performs an auto search to find an
acess point.
“Use exact location” specifies to use the exact location clicked by user.
“-offset x y” defines the maximum search offset from the original click location.
The comparison of auto selection and “use exact location”
“Guide points” allows the user to define a customized routing pattern and the user
can use this feature in following ways,
Click “Draw” button in the form “Point to Point” -> click guide points in GUI ->
press “Esc” to return the locations of guide points to the text line of “Guide
points”-> click two objects for the source and target.
Press “Shift” to turn on “Guide points”- > click guide points in GUI -> click two
objects for the source and target.
Directly input the locations of the guide points to the text line of “Guide points” ->
click two objects for the source and target.
• Edit Wire
When you click this widget, the cursor changes to a pencil when moved into
the design area. You can add power or signal wires. Click at a start point and
move the cursor. A second click makes a turn. To end the route, double-click
the left mouse button. Click the Select widget or press the “a” keyboard
shortcut to return to select mode.
Equivalent keyboard shortcut: Shift + A.
Press F3 keyboard shortcut to set up “Edit Wire”
✓ If the user wants to use 45 degree routing, select the button “Allow 45
degree”.
• Add Via
When you click this widget, the cursor changes to a set of concentric squares
when moved into the design area. Press the F3 key to open the Edit Via form.
Click the Select widget or press the “a” keyboard shortcut to return to select
mode.
Equivalent keyboard shortcut: o
• Move Wire
When you click this widget, the cursor changes to a cross when moved into
the design area. Use the mouse or the arrow keys to move the wires. You can
move horizontal wires vertically and vertical wires horizontally. Click the Select
widget or press the “a” keyboard shortcut to return to select mode.
Equivalent keyboard shortcut: m
• Cut Wire
When you click this widget, the cursor changes to scissors when moved into
the design display area. Move the cursor to draw a draw a line indicating
where to cut a wire. The cut must go all the way through the wire. You can cut
special wires horizontally and vertically. The results retain the same direction
as the original wire. You can also cut rectangles. Signal wires maintain a
one-half wire width extension after being cut. Power wires do not maintain an
extension. Click the Select widget or press the “a” keyboard shortcut to return
to select mode.
Equivalent keyboard shortcut: Shift + X
• Stretch Wire
Click this widget to snap selected wires to the next manufacturing grid in the
direction that you move the cursor. Click the Select widget or press the “a”
keyboard shortcut to return to select mode.
Equivalent keyboard shortcut: s
• Add Polygon
When you click this widget, the cursor changes to a pencil whenmoved into the
design area. Click in the main window at the start point of the polygon and
move the cursor. Click once for each turn. Backspace to cancel the last point
in the wire. Double-click to commit the wire. Click the Select widget or press
the “a” keyboard shortcut to return to select mode.
No equivalent keyboard shortcut.
7. Conclusions
The whole flipchip flow includes following parts,
• Data preparation
LEF definition
✓ RDL layer
Its definition is similar as other layers’ in LEF.
✓ BUMP
The macro type of BUMP cells need to be CLASS COVER BUMP.
✓ IO pad
The macro type of IO pads need to be CLASS PAD AREAIO.
✓ Hardmacro
It keeps its original CLASS BLOCK and the PORTS definition is enhanced
to have a CLASS BUMP associated to it.
✓ CLASS BUMP attribute
It’s one type of the port. It explicitly indicates that the port is a bump
connection point and it can help user to distinguish which ports in one pin
are for flip chip flow. Only CLASS PAD AREAIO and CLASS BLOCK can
have CLASS BUMP attribute.
Netlist
Bumps must not be defined in netlist while IO pads must be defined in netlist.
The relationship between bump and pad is constructed during bump
assignment. Then use flipchip router to connect IO pad to its assigned bump.
Defining bumps in netlist and assigning nets to these bumps is not a
compatible approach to Innovus and cannot be handled by Innovus.
• Flipchip floorplaning
IO pads placement
The user has three choices to place peripheral IO pads,
✓ Read an IO file (loadIoFile) provided by the floorplanner architect or
package engineer.
✓ Load floorplan file (loadFPlan) provided by the floorplanner architect
✓ Automatic peripheral IO pad placement (placePIO), which also support IO
row flow.
Bump creation
There are multiple ways to create bumps in the Cadence tools, the user can
create a single bump or bump array by using the command create_bump
Bump assignment
The user can use automatic assignment (assignBump) or manual
assignment (assignSigToBump for signal assignment, assignPGBumps for
✓ Manual optimization(swapSignal)
It helps the user to perform minor ECOs on the assigned bumps. It
supports multiple bumps to multiple bumps.
• Power planning
It is advisable NOT to use the RDL layer before pad to bump routing, as
flipchip router is very sensitive to routing obstructions. The power routing, i.e.
stripe generation, with the RDL layer can be done after IO pads to bumps
routing
The command addStripe provides 2 options for easier flipchip design support.
These options are:
✓ -over_bumps
This option will create a power stripe over PG bumps and the stripe
generation will STOP at the end of a valid PG bump.
✓ -between_bumps
This option will create a power stripe between PG bumps and the stripes
will NOT be created in areas where there are no PG bumps.
• RDL routing
Flipchip router (fcroute) is mainly used for routing the nets between bumps
and IO PADs. And fcroute supports both signal and power routing. Also it
accepts two design styles – peripheral IO (PIO) and area IO (AIO). But it’s not
limited by design styles, which means the user can use AIO mode for some
specific purpose in PIO design. So usually AIO/PIO mode is used to describe
which design style is used for fcroute. Besides, fcoute can support TSV
routing, which can route TSV to bumps/stripes/instance pins.
Flipchip router (fcroute) is an intelligent and predictable RDL router and it can
help the designer evaluate floorplan change based on the quick flip chip
routing result with some general setting such as routing layers and routing
width.
The tool also supports a manual router wire editing, which allows the user to
use 45 degree routing also move/cut/stretch wires.
Yes
IO row flow createIoRow
No
placePIO
placePIO
Bump assignment
(assignBump) IO file
No No
Signal bump assignment &
IO pad placement opt Signal bump assignment opt IO pad placement opt
placePIO –optIOs placePIO –assignment placePIO –optIOs –assignment
-noRandomPlacement -noRandomPlacement -noRandomPlacement
Power planning
addRing/addStripe/sroute