ICC Design Planning
ICC Design Planning
ICC Design Planning
Design Planning
User Guide
Version L-2016.03, March 2016
Copyright Notice and Proprietary Information
©2016 Synopsys, Inc. All rights reserved. This Synopsys software and all associated documentation are proprietary to
Synopsys, Inc. and may only be used pursuant to the terms and conditions of a written license agreement with
Synopsys, Inc. All other use, reproduction, modification, or distribution of the Synopsys software or the associated
documentation is strictly prohibited.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader's responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
http://www.synopsys.com/Company/Pages/Trademarks.aspx.
All other product or company names may be trademarks of their respective owners.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
www.synopsys.com
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
3.All advertising materials mentioning features or use of this software must display the following acknowledgement:
This product includes software developed by the University of California, Berkeley and its contributors.
4.Neither the name of the University nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This software is not subject to any license of the American Telephone and Telegraph Company or of the Regents of
the University of California.
Permission is granted to anyone to use this software for any purpose on any computer system, and to alter it and
redistribute it freely, subject to the following restrictions:
1.The authors are not responsible for the consequences of use of this software, no matter how awful, even if they arise
from flaws in it.
2.The origin of this software must not be misrepresented, either by explicit claim or by omission. Since few users ever
read sources, credits must appear in the documentation.
3.Altered versions must be plainly marked as such, and must not be misrepresented as being the original software.
Since few users ever read sources, credits must appear in the documentation.
4.This notice may not be removed or altered.
2. Creating a Floorplan
Supported Types of Floorplans. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
Channeled Floorplans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
Abutted Floorplans. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
Narrow-Channel Floorplans. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
v
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Contents vi
IC Compiler™ Design Planning User Guide Version L-2016.03
Chapter 1: Contents
Contents vii
1-vii
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Contents viii
IC Compiler™ Design Planning User Guide Version L-2016.03
Chapter 1: Contents
Contents ix
1-ix
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
7. Plan Groups
Plan Group Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-3
Create Plan Group Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4
Remove Plan Group Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-5
Plan Group Padding Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6
Remove Plan Group Padding Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-8
Add Block Shielding Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-9
Remove Block Shielding Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-11
Shape Plan Group Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-12
Controlling the Placement and Shaping of Plan Groups and Macros. . . . . . . . . . . . 7-16
Analyzing and Manipulating the Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-16
Opening the Hierarchy Browser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-17
Exploring the Hierarchical Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-18
Manipulating the Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-19
Merging the Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-19
Flattening the Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-21
Using Relative Placement Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-22
Plan Group Utilization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-23
Physical-Only Cells in Plan Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-25
Contents x
IC Compiler™ Design Planning User Guide Version L-2016.03
Chapter 1: Contents
Contents xi
1-xi
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Contents xii
IC Compiler™ Design Planning User Guide Version L-2016.03
Chapter 1: Contents
Contents xiii
1-xiii
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Contents xiv
IC Compiler™ Design Planning User Guide Version L-2016.03
Chapter 1: Contents
Contents xv
1-xv
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Contents xvi
IC Compiler™ Design Planning User Guide Version L-2016.03
Chapter 1: Contents
Contents xvii
1-xvii
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Index
Contents xviii
Preface
This preface includes the following sections:
• About This Guide
• Customer Support
xix
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Audience
This user guide is for design engineers who use the IC Compiler tool to implement designs.
To use the IC Compiler tool, you need to be skilled in physical design and design synthesis
and be familiar with the following:
• Physical design principles
• The Linux or UNIX operating system
• The tool command language (Tcl)
Related Publications
For additional information about IC Compiler, see the documentation on Synopsys SolvNet
at the following address:
https://solvnet.synopsys.com/DocsOnWeb
You might also want to see the documentation for the following related Synopsys products:
• Design Compiler®
• Milkyway Environment™
• IC Validator
• Hercules™
• PrimeRail
®
• PrimeTime PX
Preface
About This Guide xx
IC Compiler™ Design Planning User Guide Version L-2016.03
Release Notes
Information about new features, changes, enhancements, known limitations, and resolved
Synopsys Technical Action Requests (STARs) is available in the IC Compiler Release Notes
in SolvNet.
To see the IC Compiler Release Notes,
1. Go to the Download Center on SolvNet located at the following address:
https://solvnet.synopsys.com/DownloadCenter
2. Select IC Compiler, and then select a release in the list that appears.
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Preface 1: Preface
Chapter
About This Guide 1-xxi
xxi
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide Version L-2016.03
L-2016.03
Customer Support
Customer support is available through SolvNet online customer support and through
contacting the Synopsys Technical Support Center.
Accessing SolvNet
SolvNet includes a knowledge base of technical articles and answers to frequently asked
questions about Synopsys tools. SolvNet also gives you access to a wide range of Synopsys
online services including software downloads, documentation, and technical support.
To access SolvNet, go to the following address:
https://solvnet.synopsys.com
If prompted, enter your user name and password. If you do not have a Synopsys user name
and password, follow the instructions to register with SolvNet.
If you need help using SolvNet, click HELP in the top-right menu bar.
Preface
Customer Support xxii
1
Introduction to Design Planning 1
You can use design planning and chip-level analysis capabilities to perform a feasibility
analysis on designs of various sizes and complexities. The IC Compiler tool supports both
flat and hierarchical design planning to enable fast exploration of the design to reduce die
size and to implement a final, optimized, and detailed floorplan.
This topic includes the following sections:
• Design Planning Features
• Design Planning Overview
• Hierarchical Methodology for Design Planning
1-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Power network synthesis, applied during the feasibility phase of design planning, provides
automatic synthesis of local power structures within voltage areas. Power network analysis
performs voltage drop and electromigration analysis. Power network analysis can be
applied to partial, complete, or power structures created by power network synthesis. Both
power network synthesis and power network analysis can be used for single or multisupply
designs. You can also perform low-power planning for multithreshold-CMOS designs.
MinChip technology in the IC Compiler tool explores potential die configurations to
determine the smallest routable die size for your design while maintaining the relative
placement of hard macros and I/O cells. Optionally, the flow uses power network synthesis
for power routing that meets voltage drop requirements and routing estimation technology to
access routing feasibility.
After the initial design netlist is generated in Design Compiler topographical mode, you can
use the hierarchical methodology for design planning in the IC Compiler tool. Design
planning is performed during the first stage of the hierarchical flow to partition the design into
blocks, generate hierarchical physical design constraints, and allocate top-level timing
budgets to lower-level physical blocks.
Figure 1-1 shows the hierarchical flow steps for design planning.
See Also
• Design Partitioning
• Hierarchical Floorplanning
• Hierarchical Timing Closure
Design Partitioning
The first step in a hierarchical design project is to determine the physical partitioning. When
deciding on the physical partition of a large design, you should consider the following
factors:
• Size
Ensure the size of the blocks is appropriate for the virtual flat IC Compiler implementation
flow. It is easier to floorplan with blocks of similar size, so small blocks should be grouped
and large blocks divided when appropriate.
• Function
Partition your design using its functional units for verification and simulation purposes.
Consider top-level connectivity and minimal block pin counts to avoid congestion and
timing issues.
• Floorplan style
Different floorplan styles require different physical hierarchies to support them. An
abutted floorplan style has no top-level logic and a channeled floorplan has either a small
or large amount of top-level logic.
• Common hierarchy with Design Compiler topographical mode
To exchange SCANDEF information at the block level and the top level, the physical
hierarchy used in Design Compiler topographical mode must also be used in the IC
Compiler tool.
During the design planning stage, a physical partition is represented by a plan group. A plan
group is a physical constraint for placing the cells of the same group together physically.
Each plan group represents a module in the logic hierarchy that you want to implement as a
physical block and contains only cells that belong to that module. The IC Compiler tool
supports both rectangular and rectilinear plan groups. For more information, see “Plan
Group Overview” in Chapter 7.
Hierarchical Floorplanning
Hierarchical floorplanning includes the following steps:
• Padding the Plan Groups
• Shielding Plan Groups or Soft Macros
• Assigning Pins
• Creating Soft Macros From the Plan Groups
• Pushing Down Physical Objects
Assigning Pins
You can assign pins for soft macros in your design during floorplanning. Pins can be
constrained to fixed locations, or adjusted to align with the pin placement of pins in other
macros. You can create pin guides to restrict the possible placement locations of soft macro
pins. Feedthrough nets can be used to route signals through soft macros and reduce the
total path length. You can also block feedthrough creation to prevent a net from entering a
soft macro.
For more information, see “Setting Block-Level Pin Assignment Constraints” in Chapter 11.
The timing closure tasks in a hierarchical design include the following features:
• Early Chip-Level Timing Feasibility Check
• Timing and Signal Integrity Budgeting
• Clock Planning
Clock Planning
Clock planning is an optional step in the design planning flow. You can use clock planning
to estimate the clock tree insertion delay and skew in a hierarchical design. It also helps you
determine the optimal clock pin locations on blocks.
If you use clock planning, run it before pin assignment. Clock planning inserts anchor cells
to isolate the clock trees inside the plan group from the top-level clock tree. It then runs fast
clock tree synthesis for each plan group to estimate the clock skew and insertion delay. The
tool annotates clock tree synthesis results on floating pins that are defined on the anchor
cells. Clock planning synthesizes the top-level clock tree to the anchor cell floating pins.
For hierarchical timing closure, clock planning is also used to generate realistic clock latency
through budgeting to fix timing violations. Top-level timing violations result not only from
delays on combinational logic between registers but also from clock skew between
launching and capturing registers. In a hierarchical design, clock tree synthesis inside each
soft macro cannot consider clock skews with the top level and other soft macros. In the
top-level integration phase, clock skews among different soft macros can cause setup and
hold violations on interblock paths. It is very hard to fix these violations without changing the
soft macros. To estimate the chip-level clock skew issues for block-level implementation,
consider using clock planning.
For more information, see “Clock Plan Options Command” in Chapter 9.
2-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Channeled Floorplans
Channeled floorplans contain spacing between blocks for the placement of top-level macro
cells, as shown in the floorplan example in Figure 2-1.
Figure 2-1 Channeled Floorplan
Abutted Floorplans
In the abutted floorplan methodology, blocks are touching and the tool does not allocate
space for macro cell placement between blocks. Designs with abutted floorplans do not
require top-level optimization, as all logic is pushed down into the blocks. However, abutted
floorplans might require over-the-block routing to meet design requirements. This floorplan
style also requires more attention to feedthrough management. Routing congestion might
also become an issue for abutted floorplan designs. An example of an abutted floorplan is
shown in Figure 2-2.
Narrow-Channel Floorplans
The narrow-channel floorplan methodology provides a balance between the channeled
floorplan and abutted floorplan methodologies. You can abut certain blocks in the design
where top-level cells are not needed. In other areas, you can reserve a channel between
certain blocks for top-level clock routing or other special purpose cells. An example of a
narrow-channel floorplan is shown in Figure 2-3.
Figure 2-3 Narrow-Channel Floorplan
This command specifies the pad cell ordering, orientation, placement side, offset from die
edge, and pad-to-pad spacing for each I/O pad. After setting the constraints with the
set_pad_physical_constraints command, the create_floorplan command places the
I/O pad cells accordingly. The constraints are stored in the Milkyway database when you
save the design.
The create_floorplan command places constrained pads first. Any unconstrained pads
are placed next, using any available pad location. The tool does not place unconstrained
pads between consecutively ordered constrained pads.
The initialize_rectilinear_block command places pads based on constraints set by
using the set_pad_physical_constraints command, as well as pins based on
constraints set by using the set_pin_physical_constraints command. The tool first
checks that the constraints set by both commands are correct. If no constraint errors exist,
the tool places the pins and then places the pads.
Note:
Pins and pads cannot be placed on the same side of a block created by using the
initialize_rectilinear_block command.
The following example script portion describes two corner pad locations and several I/O pad
locations for the floorplan.
Example 2-1 Pad Constraints Script Example
create_cell {cornerll cornerlr cornerul cornerur} cornercell
create_cell {vss1left vss1right vss1top vss1bottom} vsscell
# additional create_cell commands not shown
write_pin_pad_physical_constraints
[-library lib_name]
[-cell cell_name]
[-constraint_type side_only | side_order | side_location]
[-pin_only | -pad_only]
[-objects object_list]
file_name
The constraints defined in the file can either remove the current constraints or append to
them, based on the behavior you choose. For example, if physical constraints for pin A are
specified and you do not define any constraints for pin A in the constraints file, the
read_pin_pad_physical_constraints command removes the existing physical
constraints on pin A by default. To maintain the existing constraints and append new
constraints contained in the constraints file, specify the -append option (or click the
“Append” check box in the GUI).
You can report only pin constraints, only pad constraints, only chip-level pad constraints, or
all constraints depending on the command options you specify.
You can remove only pin constraints, only pad constraints, only chip-level pad constraints,
or all constraints based on the command options you specify. You can also remove
constraints from a design other than the current design.
create_floorplan
[-bottom_io2core distance]
[-control_type aspect_ratio | width_and_height | boundary]
[-core_aspect_ratio ratio]
[-core_utilization ratio]
[-flip_first_row]
[-keep_io_place]
[-keep_macro_place]
[-keep_std_cell_place]
[-left_io2core distance]
[-min_pad_height]
[-no_double_back]
[-pad_limit]
[-right_io2core distance]
[-start_first_row]
[-top_io2core distance]
[-use_vertical_row]
The following examples are created by using different options with the create_floorplan
command. Figure 2-5 shows a floorplan created by using the create_floorplan command
with no options.
icc_shell> create_floorplan
Figure 2-6 shows a floorplan created by using the -control_type aspect_ratio option.
The following example shows the complete create_floorplan command. These two
options set the aspect ratio for the design. In this example, the aspect ratio is 2.0, which
creates a floorplan with a height equal to twice the width.
icc_shell> create_floorplan -control_type aspect_ratio \
-core_aspect_ratio 2.0
Figure 2-7 shows the first few rows of a floorplan created by using the create_floorplan
command with the -start_first_row option. The -start_first_row option begins row
pairing at the bottom of the core area.
icc_shell> create_floorplan -start_first_row
ROUTING CHANNEL
STANDARD CELL ROW
STANDARD CELL ROW
ROUTING CHANNEL
STANDARD CELL ROW
STANDARD CELL ROW
Figure 2-8 shows the first few rows of a floorplan created by using the create_floorplan
command with the -flip_first_row option. The -flip_first_row option flips the first
row at the bottom of the floorplan.
icc_shell> create_floorplan -flip_first_row
STANDARD CELL ROW
ROUTING CHANNEL
STANDARD CELL ROW
STANDARD CELL ROW
ROUTING CHANNEL
STANDARD CELL ROW
Figure 2-9 shows the first few rows of a floorplan created by using the create_floorplan
command with the -no_double_back option. The -no_double_back option prevents
flipping or pairing of standard cell rows.
icc_shell> create_floorplan -no_double_back
Figure 2-10 shows the first few rows of a floorplan created by using the create_floorplan
command with the -use_vertical_row option. The -use_vertical_row option creates
standard cell rows in a vertical orientation.
icc_shell> create_floorplan -use_vertical_row
WOR LLEC DRADNATS
STANDARD CELL ROW
WOR LLEC DRADNATS
STANDARD CELL ROW
WOR LLEC DRADNATS
STANDARD CELL ROW
Figure 2-11 shows a zoomed-in view of a floorplan created by using the create_floorplan
command with the -bottom_io2core and -left_io2core options. These options set the
distance between the core and the pad cells on the bottom and left sides of the die.
initialize_rectilinear_block
[-bottom_io2core distance]
[-control_type ratio | length]
[-core_side_dim { side_a side_b side_c
side_d [side_e side_f]}]
[-core_utilization ratio_val]
[-flip_first_row]
[-keep_io_place]
[-keep_macro_place]
[-keep_std_cell_place]
[-left_io2core distance]
[-no_double_back]
[-orientation N | W | S | E ]
[-right_io2core distance]
[-row_core_ratio ratio_val]
[-shape L | T | U | X]
[-start_first_row]
[-top_io2core distance]
[-use_current_boundary]
[-use_vertical_row]
You can vary the edge dimensions and rotation by specifying command options. The
initialize_rectilinear_block command shares several options with the
create_floorplan command; for more information, see “Creating a Rectangular
Floorplan” on page 2-9. For complex rectilinear floorplans, use the create_boundary
command with the initialize_rectilinear_block command, as described in “Creating
a Complex Rectilinear Floorplan” on page 2-19.
The initialize_rectilinear_block command honors constraints set by using the
set_pad_physical_constraints and set_pin_physical_constraints commands. Use
these two commands to restrict the location of pins and pads on the periphery of the
floorplan. Note that pins and pads cannot be placed on the same side of a block created by
using the initialize_rectilinear_block command. For more information about the
set_pad_physical_constraints command, see “Setting the I/O Pad Constraints” on
page 2-5. For more information about the set_pin_physical_constraints command,
see “Setting the Pin Constraints” on page 2-7.
Figure 2-12 shows a floorplan created by using the initialize_rectilinear_block
command with the -shape T option, which creates a T-shaped rectilinear block.
icc_shell> initialize_rectilinear_block -shape T
Figure 2-17 shows a floorplan created by using the create_boundary command and the
initialize_rectilinear_block -use_current_boundary command.
icc_shell> create_boundary -poly {{0 0} {0 3000} {1000 3000} \
{1000 2000} {2000 2000} {2000 3000} {3000 3000} {3000 0} \
{2000 0} {2000 1000} {1000 1000} {1000 0}}
icc_shell> initialize_rectilinear_block -use_current_boundary
adjust_fp_floorplan
[-bottom_io2core distance]
[-core_aspect_ratio ratio]
[-core_height height]
[-core_utilization utilization]
[-core_width width]
[-die_height height]
[-die_origin {x y}]
[-die_width width]
[-fc_in_core number | -fc_periphery number]
[-flip_first_row true | false]
[-left_io2core distance]
[-maintain_placement]
[-min_pad_height true | false]
[-no_double_back true | false]
[-number_rows rows]
[-remove_filler_io]
[-right_io2core distance]
[-row_core_ratio ratio]
[-sm_utilization utilization]
[-start_first_row true | false]
[-top_io2core distance]
[-use_vertical_row true | false]
Figure 2-18 shows a floorplan that was initialized and modified by using the following
commands.
icc_shell> create_floorplan -core_utilization 0.8 -left_io2core 30 \
-bottom_io2core 30 -right_io2core 30 -top_io2core 30
icc_shell> adjust_fp_floorplan -use_vertical_row true -left_io2core 100 \
-bottom_io2core 300 -right_io2core 100 -top_io2core 300 \
-core_aspect_ratio 3.0
In this example, the adjust_fp_floorplan command makes the following changes to the
layout:
• Changes the row orientation to vertical
• Expands the spacing between the core and I/O pads from 30 microns to 100 microns on
the left and right
• Expands the spacing between the core and I/O pads from 30 microns to 300 microns on
the top and bottom
• Changes the core aspect ratio to 3.0
This command removes all cell rows in the design or only the rows in the specified area. For
example, the following command removes the cell rows in the die area bounded by the
coordinates {0 0} and {1000 1000}.
icc_shell> cut_row -within {{0 0} {1000 1000}}
1
The command inserts cell rows based on the configuration options you provide and
implements the rows based on the current floorplan. If you specify a design area that already
contains rows, the add_row command does not create an overlap condition with the existing
rows.
To create cell rows in a rectangular region, use the -within option and specify the lower-left
and upper-right points of the rectangle. To create cell rows in a rectilinear region, use the
-within option and specify the points that define the boundary of the region. To align the
Figure 2-19 shows the section of floorplan modified by using the add_row command. Note
that the rows in the bottom half of the cutout are inserted by using the add_row
-no_double_back command, while the rows in the top half of the cutout were originally
inserted without using the -no_double_back option.
Figure 2-19 Floorplan After Reinserting Rows
Figure 2-20 shows a floorplan created with the create_track command. In this example,
the remove_track command removes all existing routing tracks, and then the
create_track command creates routing tracks on METAL3 in the preferred direction with
a pitch of 0.5. The report_track command reports the routing track direction, startpoint,
number of tracks, and pitch for each set of routing tracks in the design.
icc_shell> remove_track -all
1
icc_shell> create_track -layer METAL3 -space 0.5
1
icc_shell> report_track
****************************************
Report track
Design : TEST
Version: F-2011.09
Date : Mon Aug 1 14:50:01 2011
****************************************
Layer Direction Start Tracks Pitch Attr
------------------------------------------------------------------------
Attributes :
usr : User defined
def : DEF defined
METAL3 Y 0.250 4307 0.500 usr
1
The adjust_fp_io_placement command operates on one side of the chip at a time and
supports an undo function that reverts the design to its previous state. Figure 2-21 shows a
floorplan adjusted by using the adjust_fp_io_placement command. In this example, the
original pad spacing is 30 microns as specified by using the
set_pad_physical_constraints -min_left_iospace command. The
adjust_fp_io_placement -side l -spacing 1 command changes the spacing between
the I/O pads to 1 micron for pads on the left side of the chip.
write_floorplan
[-all]
[-cell design_name]
[-create_bound]
[-no_bound]
[-no_create_boundary]
[-no_placement_blockage]
[-no_plan_group]
[-no_route_guide]
[-no_voltage_area]
[-objects object_collection]
[-pin_guide]
[-placement {placement_info_types} [-create_terminal]]
[-preroute]
[-user_shape]
[-net_shape]
[-row]
[-sm_all]
[-sm_bound]
[-sm_cell_row]
[-sm_placement {placement_info_types}]
[-sm_placement_blockage]
[-sm_plan_group]
[-sm_preroute]
[-sm_route_guide]
[-sm_track]
[-sm_voltage_area]
[-track]
file_name
The write_floorplan command creates a Tcl file that contains objects, placement, and
attribute information for I/Os, terminals, standard cells, hard macros, and routing tracks in
the floorplan. The Tcl file is used to rebuild the floorplan by using the read_floorplan
command. You can control the information written to the Tcl file by using command options.
The command does not write relative placement group and relative placement keepout
information.
The write_floorplan command does not write standard cell placement information in the
floorplan exploration flow if the database is created by the Design Compiler tool in
topographical mode. The write_floorplan command issues the following message to
alert you that standard cell placement information is not written to the floorplan Tcl script:
Warning: Standard cell placement output was suppressed in write_floorplan
because this is a DCG database (APL-083)
The following example uses the write_floorplan command with no options to create die
area information.
icc_shell> write_floorplan floorplan_1.tcl
1
The write_def command writes the floorplan information, including the design netlist,
layout, and constraints, to a DEF file. The following example uses the write_def command
to write the floorplan to a DEF file.
icc_shell> write_def -version 5.6 -vias -all_vias -pins -nets \
-diode_pins -specialnets -notch_gap -pg_metal_fill -scanchain \
-no_legalize -output "chip.def"
information that can be used to create a floorplan that supports this flow. The following
sections describe the commands and options necessary to write the floorplan file by using
the write_def and write_floorplan commands.
read_def
[-check_only]
[-enforce_scaling]
[-no_incremental]
[-verbose]
[-turn_via_to_inst]
[-inexactly_matched_via_to_inst]
[-lef lef_file_names]
[-snet_no_shape_as_user_enter]
[-snet_no_shape_as_detail_route]
[-preserve_wire_ends]
def_file_names
By default, the read_def command is additive; it adds the physical data in the DEF file to
the existing physical data in the design. To replace rather than add to existing data, use the
-no_incremental option on the command line (or deselect Incremental in the dialog box in
the GUI).
To analyze the input DEF files before annotating the objects on the design, enable
check-only mode by using the -check_only option. The check-only mode provides
diagnostic information about the correctness and integrity of the DEF file. The check-only
mode does not annotate any DEF information into the Milkyway database.
icc_shell> read_def -check_only design_name.def
Specify the design from which to copy the physical data by using the -from option (or by
specifying the design name in the “From cell” box in the GUI). The following example copies
the floorplan from the design named design1.
icc_shell> copy_floorplan -from design1
By default, the copy_floorplan command overwrites the existing physical data in the
design. To avoid this, use the -incremental option (or choose “Incremental
(non-overwriting) in the GUI).
Note:
You must ensure netlist consistency between the designs. The command does not
perform netlist consistency checks during the copy process.
The copy_floorplan -incremental command copies the rows from the source cell to
the destination cell, even if there are existing rows in the destination cell.
For detailed information about the copy_floorplan command, see the man page.
3-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Design Data
estimate_fp_area
Routable?
Floorplan
Y N
Reduce Increase
size size
Trial Route
Place design
Optimize Design
Route power
MinChip
Global route
Design Closure
N
Reason to stop?
Route
Y
Done
Tapeout
The estimate_fp_area command performs the following steps in the MinChip technology
flow:
1. Estimates the core size and shape for a given core and cell utilization.
During the search for a minimal die size, filler pads and filler cells are automatically
deleted to minimize the pad-limited characteristics of the design. When the size of the die
changes, any previous placement blockages, preroutes, and routing guides are also
automatically deleted.
To ensure that the results are consistent between each design iteration, the following
settings are held constant:
❍ The original side and placement order of the I/O pads on the input design cell
❍ The relative placement of the hard macros
❍ The shape (aspect ratio) of the core area
2. Places all the design cells.
For a given core size, the command performs virtual flat placement in incremental mode
to place all the design cells.
3. Performs global routing on the design.
After cell placement, the command routes the design as follows:
❍ Performs a fast, virtual route. The command estimates the wire length and calculates
the routing resources.
❍ Performs prototype global routing until the specified global route cell overflow
percentage is reached.
❍ Performs prototype global routing to report that the design is unroutable when local
hot spots cause a very long runtime.
4. Analyzes the routing.
After the design is routed, the tool performs routing analysis. The tool reports the number
and percentage of nets routed, and the overall global route cell overflow percentage
when a design is unroutable.
The estimate_fp_area command stops processing the design when any of the following
occur:
• The routing target is met.
• The utilization bounds are exceeded.
• Overlaps of hard macros would be formed.
Use a script to run the prerouter to create power and ground connections to the power and
ground pins of standard cells in your design. Run the prerouter after you run power network
synthesis. This is important if you use power network synthesis to form a mesh on the
uppermost layers. The prerouter creates stacked vias to connect the METAL1 layer
preroutes to the upper layer mesh. To run the preroute script using the estimate_fp_area
command, specify the script name with the -run_preroute_script option. Running the
estimate_fp_area command with the -run_preroute_script option accounts for
METAL1 routing resources and stacked vias during die size reduction.
If your design contains hard macros with power and ground rings, MinChip technology can
compress the space between adjacent hard macros by merging the power and ground rings
of the adjacent hard macros.
The estimate_fp_area command honors both soft and hard blockages when you specify
the -keep_blockages option. Blockages can be assigned to an edge or macro based on the
relationship between the blockage and the edge or macro. You should delete all
nonessential blockages before running the estimate_fp_area command. Use macro
padding to create space if necessary.
A blockage that extends over an entire edge of the core area is called an edge blockage. In
some cases, edge blockages are used to reserve space for power rings and prevent cell
placement near the core boundary. For example, consider a design that requires a core ring
on the METAL1 and METAL2 layers as part of the power mesh. An edge blockage prevents
standard cell placement near the core boundary and allows the estimate_fp_area
command to create the power rings after cell placement. In the MinChip technology flow, the
relative placement of edge blockages is maintained in relation to the core area.
For most designs, the minimum allowable macro spacing can be achieved by using the
set_keepout_margin command and the set_fp_placement_strategy -sliver_size
strategy setting. Placement blockages are not required to maintain separation between
macros in the MinChip technology flow. Note that the estimate_fp_area command honors
both soft and hard placement blockages if you specify the estimate_fp_area
-keep_blockages command.
If you specify a sliver_size parameter value, and the distance between two objects, such
as macros, core edges, or blockages, is less than or equal to the sliver_size value before
running the estimate_fp_area command, this distance is maintained by the
estimate_fp_area command.
If there are no overlaps between the macro padding, and the distance between the macros
is less than or equal to the sliver_size value, the estimate_fp_area command does not
reduce the space between the hard macros.
If there are overlaps between the macro padding, and the distance between the macros is
less than or equal to the sliver_size value, the estimate_fp_area command does not
reduce the space between the hard macros, and the macro padding remains overlapped
with the other padding.
If there is no set_fp_placement_strategy -sliver_size strategy setting or keepout
margin specified for a fixed macro, and one placement blockage exists over a set of multiple
hard macros, the estimate_fp_area command abuts the macros. When you run the
estimate_fp_area command, the tool does not reduce the size of the placement blockage.
Instead, it blocks some of the core area, preventing the placement of the standard cells. If
there is a hard macro keepout, macros can be packed until the keepout region abuts.
See Also
• “Sliver Size” on page 6-20
• “Blockages, Margins, and Shielding” on page 6-40
The image on the left is the original CEL view with multiple I/O rings. The pads between the
I/O rings are aligned. When you run the estimate_fp_area command with the default
options, the command scales the I/O rings proportionally. As a result, the alignment between
the I/O pads and the I/O rings is lost, as shown in the center image. When you run the
estimate_fp_area command and select the Maintain I/O pad alignment option, the
command reduces the die area by eliminating unnecessary space in the I/O ring and by
maintaining the I/O alignment between the I/O rings, as shown in the image on the right.
For more information about the command options, see the estimate_fp_area man page.
To use the GUI layout window to run the MinChip technology flow, choose Floorplan >
MinChip. This opens the dialog box shown in Figure 3-3.
Select Variable aspect ratio, Fixed aspect ratio, Fixed width, or Fixed height to control the
dimensions and aspect ratio during successive design iterations. You can specify minimum
and maximum values for the width and height. By default, the estimate_fp_area command
allows the aspect ratio to vary.
Select Keep blockages to retain all placement blockages in the floorplan. Select Replace IO
to delete all I/O cells and replace them based on physical constraints. Select Core sizing
only to change only the core size and retain the current I/O pad placement. Select Maintain
I/O pad alignment to retain the alignment between I/O pads in different rings. I/O pads in
inner and outer pad rings can change position and become misaligned by default. Select
Estimate Optimization to automatically reserve die area for optimization purposes for
designs that are not optimized. Select Increase area to reserve a specific amount of area in
square microns for optimization or other purposes. Select Fix edges and enter one or more
integers in the box to maintain the length of one or more edges of the die boundary. The
integers correspond to edges of the die boundary; the lower left-most edge is edge number
1 and the edges numbers increase as you proceed clockwise around the die boundary.
Enter a floating-point value between 0.0 and 0.25 in the Acceptable overflow box to specify
an overflow ratio of global routing cells for the entire design. Enter the target IR drop in mV
for your design in the Max allowable IR drop value box to override the default of 10 percent
of the VDD voltage value. If you enter an IR drop value, you must also specify the power and
ground net names.
Select the Automatically create script to mimic power network and Power and ground net
pairs as {pwr gnd} options, and enter the net name pairs surrounded by braces ({}) to direct
the estimate_fp_area command to create scripts to build the power and ground network.
The command writes the scripts to the pna_output directory. Select Custom PNS script, and
enter the path name to the script, to run the estimate_fp_area command using your
custom power network synthesis script. Select Preroute script and enter the path name to
the script, to run the estimate_fp_area command using your custom power network
preroute script.
In the Save as box, enter the name of the design to be created by MinChip technology to
specify a nondefault name for the new design.
Based on the power budget requirements, each voltage area in the core area can have
different power structures, as shown in Figure 3-5. Therefore, you should use a power
network synthesis script because the default run might not generate different power
structures for different voltage areas.
Figure 3-5 Multivoltage Design Power Structures
4-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Read netlist
read_verilog
Create floorplan
create_floorplan
For information about creating the floorplan, see “Initializing the Floorplan” on page 2-9. The
remaining steps are described in the following sections.
The tool reads the Verilog netlist and assigns a black box type to each black box module.
Table 4-1 describes the different types of black box modules read by the read_verilog
command.
Table 4-1 Black Box Types
Data flow DF A data flow module contains module BB_DATAFLOW (IN, OUT);
assign statements for some input [7:0] IN;
module ports; other ports output [7:0] OUT;
are not connected. assign OUT=1'b0;
endmodule
Missing Missing A missing module is not Module is not in the Verilog netlist
defined in the Verilog netlist;
you must use the
-dirty_netlist option with
the read_verilog
command to import this type
of module.
When the read_verilog command detects a logical black box module, it sets the
is_logical_black_box attribute to true and the black_box_type attribute to DF, Empty,
Feedthru, Missing, or Tie-Off. You can query these attributes with the get_cells
command to identify the logical black boxes in your design. For example, to retrieve all black
box modules of type Missing, use the following command:
icc_shell> get_cells -hierarchical \
-filter "is_logical_black_box==true && black_box_type==Missing"
By default, a maximum of 100 black boxes can be imported at one time. If you try to import
more than the maximum number of black boxes, the import is canceled. The limit of 100
black boxes prevents you from accidentally selecting all black boxes in a script when you
might have forgotten to specify one or more reference libraries. To import more than 100
black boxes, increase the number of importable black boxes by specifying the -max_count
option or by entering the value in the Maximum number of black boxes to import text box in
the GUI.
The import_fp_black_boxes command sets the size for each black box. By default, the
tool creates a bounding box of 300 microns on each side for the black box. You can change
the default black box size by using one of the following methods:
• Specify the side length
To create a square boundary with a side length other than 300 microns, use the
-side_length option.
To set the black box boundary by width and height in microns, use the -sm_size {width
height} option with the estimate_fp_black_boxes command. In the GUI, select “Soft
macro size” and enter the values in the Width and Height text boxes. By default, the
command uses a utilization value of 1.0 when you specify the -sm_size option. You can
change the utilization by using the -sm_util option with the estimate_fp_black_boxes
command.
To specify a rectilinear black box boundary, specify the coordinates in microns of the
polygon by using the -polygon option with the estimate_fp_black_boxes command. In
the GUI, select “Soft macro polygon” and enter the coordinates in the associated text box.
Specify the polygon in the following format for both the command line and the GUI:
{{x1 y1} {x2 y2} ...{xn yn} {x1 y1}}
To prevent further changes to the shape of the black box, use the -fixed_shape option
with the estimate_fp_black_boxes command, or choose “Mark as fixed shape after
estimation” in the GUI.
The tool computes the gate-equivalent area by multiplying the size of the gate-equivalent
cell by the number of cells in the black box and dividing by the utilization. You specify these
parameters as follows:
• Gate-equivalent size
The default gate-equivalent size is the standard gate area of a 2-input NAND gate. You
can change the gate-equivalent size by using the set_fp_base_gate command to
specify either a gate from the library or an area.
❍ To specify a gate from the library, use the -cell option. For example, to set the
gate-equivalent size to the area of the nd02 library cell, enter
icc_shell> set_fp_base_gate -cell nd02
❍ To specify an area, use the -area option. For example, to set the gate-equivalent
size to 24 square microns, enter
icc_shell> set_fp_base_gate -area 24
• Gate-equivalent count
The gate-equivalent count is the number of gate equivalents that is needed to occupy the
same area as the actual cells in the black box. You must specify this value by using the
-sm_gate_equiv option with the estimate_fp_black_boxes command.
• Utilization
The default utilization is 0.7. To change the utilization, use the -sm_util option with the
estimate_fp_black_boxes command.
To prevent changing of the black box shape after size estimation, use the -fixed_shape
option with the estimate_fp_black_boxes command, or choose “Mark as fixed shape after
estimation” in the GUI.
Note:
You must first save the top-level design, including the black boxes, before you can set
these attributes on black boxes.
A
HoldA
SetupA X
CLKtoX
CLK
BtoY Y
B
Figure 4-3 shows the flow used to create a quick timing model for a black box. You create
the quick timing model by specifying the model ports, the setup and hold constraints on the
inputs, the clock-to-output path delays, and the input-to-output path delays. You can also
specify the loads on input ports and the drive strength of output ports. After creating the
quick timing model, test it and refine it until the timing report meets your requirements. You
can continue to update the black box timing arcs by performing timing budgeting iteratively
until the full top-level timing analysis results are clean.
Is the timing No
report OK?
Yes
Continue
2. Specify the technology information, such as the name of the logic library, the maximum
transition time, the maximum capacitance, and the wire load information.
icc_shell> set_qtm_technology -library library_name
icc_shell> set_qtm_technology -max_transition trans_value
icc_shell> set_qtm_technology -max_capacitance cap_value
icc_shell> set_qtm_technology -wire_load_model wlm_name
6. (Optional) Generate a report that shows the defined parameters, the ports, and the
timing arcs in the quick timing model.
icc_shell> report_qtm_model
In the black box flow, TLUPlus model information is not propagated to the individual black
boxes. To use TLUPlus model information, you must manually reload the TLUPlus files by
using the set_tlu_plus_files command before working on a soft macro created from a
black box.
5-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Figure 5-1 shows a typical on-demand-loading flow, using the design planning virtual flat
commands. Figure 5-2 shows the on-demand-loading flow when black boxes are present in
the design. The black box on-demand-loading flow can be used to floorplan large designs in
a shorter runtime.
Derive PG connections
derive_pg_connection
Feedthrough optimization
optimize_fp_timing -feedthrough_buffering_only
Timing budgeting
allocate_fp_budgets
To create the on-demand netlist using the GUI layout window, first set the window task mode
to Design Planning if it is not already in that mode (File > Task > Design Planning). Choose
Partition > Create On Demand Netlist to open the dialog box shown in Figure 5-3.
In the On demand cell name box, enter the name of on-demand netlist for the command to
create. Select plan groups or soft macros in the target box, and specify one or more plan
groups or soft macros in the box. Alternatively, select All to specify all plan groups or hard
macros. Select the Ignore pins option and specify a collection of pins for which to ignore side
loads (clock pins are automatically ignored). This option removes flip-flops that are internal
to the plan group, even if they have a direct connection to the specified net at the top level
of the plan group. Select Input SDC file name to specify the name of the SDC constraints file
for entire design.
If your design is a multicorner-multimode design, select the MCMM setup file name option
to specify the name of the constraints file and select the MCMM map file name option to
specify the map file. Select the Block SDC map file name and Block MCMM map file options
to specify the name of the block-level map files. The map file contains a list of
multicorner-multimode mode name and variable pairs that are used to map the scenario
name to the SDC file. Note that you cannot select both the MCMM setup file name and Input
SDC file name options at the same time.
Select Pre plan group abstraction map file to specify the name of the map file that contains
a list of plan groups or soft macros and the name of the Tcl scripts to be run before creating
the on-demand netlist.
If your design has block-level UPF descriptions, enter the name of the map file that contains
a list of plan groups or soft macros and the name of the corresponding UPF file for each.
Select the Verify block UPF files option to first verify the map file and UPF files before
creating the on-demand netlist.
Select the Do only option and choose Netlist reduction, Save block netlist, or Save internal
constraints to run individual steps in the flow. Select Netlist reduction to create only the
reduced plan group netlists without creating the full plan group netlists. Select Save block
netlist to create the full plan group netlists, or select Save internal constraints to write the full
block-level plan group netlists with internal constraints.
By default, the netlist and constraint files generated by the on-demand netlist creation flow
are saved to the ODL_work directory. To save the files to another location, enter a different
directory path in the Work directory box. Select Run in parallel and enter the host options to
run the create_on_demand_netlist command on multiple machines in a distributed
computing network. To verify your host options before creating the on-demand netlist, select
Test host options to run a short test of the configuration you specified.
When creating an on-demand netlist, the tool
• Warns you that the tool is about to close all open designs as shown in Figure 5-4
Figure 5-4 Create On Demand Netlist Warning Message Box
• Converts the current Milkyway design to a new Milkyway design that contains a reduced
netlist
The tool replaces the full netlist of each plan group with the corresponding reduced plan
group netlist. The new Milkyway design contains the complete top level, reduced plan
groups netlists, and all of the macros.
• Saves all the floorplan information, such as the plan group shapes, locations, and
placement information, in the internal database
• Saves all the constraints residing in the core of the plan groups in the internal database
• Sets the is_on_demand_netlist attribute to true for the reduced plan groups
• Closes the design after creating the on-demand netlist
Before you can use this on-demand netlist for the rest of the floorplanning flow, you need
to open the CEL view by using the open_mw_cel your_ODN_CEL command.
When the current design is based on an on-demand netlist, the GUI displays “ODL” in the
status bar of the of the layout window. Figure 5-6 shows the lower-right corner of the layout
window that is displayed when you are viewing an on-demand netlist.
Figure 5-6 Status Bar Display for On-Demand Netlist
For example, the following command creates only the reduced plan group netlists.
icc_shell> create_on_demand_netlist -plan_groups [get_plan_groups] \
-on_demand_cell Design_ODN -netlist_reduction_only
Before committing the plan groups to soft macros, you must create the full plan group
netlists by using the -save_block_netlist_only option. You must also annotate the full
block-level plan group netlists with internal constraints using the
-save_internal_constraints_only option before budgeting the design.
For example, the following commands write the full plan group netlists and constraint file.
icc_shell> create_on_demand_netlist –plan_groups [get_plan_groups] \
-save_block_netlist_only
icc_shell> create_on_demand_netlist –plan_groups [get_plan_groups] \
-save_internal_constraints_only –full_sdc_file sdc_file.sdc
To use distributed processing, you must have at least one of these distributed processing
systems configured in your compute environment. The following example uses the
set_host_options command to enable four distributed processes using Oracle Grid
Engine and uses the create_on_demand_netlist command to create the on-demand
netlist.
Note:
Distributed processing requires one IC Compiler license for every four parallel tasks. For
example, to run eight parallel tasks, you must have two IC Compiler licenses. In the
previous GRD example, if only one IC Compiler license is available and there are more
than four plan groups, the tool begins processing four plan groups by using parallel
processing. When processing completes for one plan group, the tool submits the fifth
plan group to the GRD queue. The tool continues until all plan groups are processed.
You can also limit the number of submitted jobs by using the -num_processes option to
the set_host_options command; see the man page for more information about this
option.
You can test your distributed processing profile before you create the on-demand netlist by
using the create_on_demand_netlist -test_host_options command. The
create_on_demand_netlist -test_host_options command attempts to submit the
commands to the distributed processing network by using the distributed processing profile
specified by the -host_options option.
The following example uses the create_on_demand_netlist -test_host_options
command to test the my_host_options distributed processing profile. The final line in the
example, Information: host options test successful, indicates that the test
completed successfully.
icc_shell> create_on_demand_netlist -plan_groups [get_plan_groups] \
-on_demand_cell ODN -work_dir ODL_work -netlist_reduction_only \
-test_host_options -host_options my_host_options
ODL: Work directory is /u/user/ODL_work
Information: Master creating task.
Information: Launching parallel job.
Block: N/A Stage:Launch_Parallel_Job Status:
Succeeded : Fri Oct 8 14:28:39 2010
Information: host options test successful.
To run individual scripts in the on-demand-loading flow by using distributed computing, use
the run_distributed_tasks command. The command runs the Tcl scripts based on the
configuration options specified by the set_host_options command. The following example
starts a distributed computing task and specifies that script1.tcl must run to completion
before starting script2.tcl. script3.tcl can run in parallel with both script1.tcl or script2.tcl.
icc_shell> run_distributed_tasks -host_options lsf_options \
-task_scripts {{script1.tcl ; script2.tcl} || script3.tcl} \
-output_directory run1
In this example, the tool creates the ODN2 on-demand cell and converts the
plan_group_3 and plan_group_4 plan groups to reduced netlists.
In the following example of poor compression, only 138 edge-triggered flip-flops are
removed from the reduced plan group netlist, resulting in less than 0.01 percent
edge-triggered flip-flop compression.
Information on plan_group_1 design:
Total number of cells: 2455514
Number of leaf cells: 2395249
Number of combinational cells: 931814
Number of level-sensitive latches: 1758
Number of edge-triggered flip-flops: 1446577
Number of nets: 2787899
Information on plan_group_1 plan group abstraction:
Total number of cells: 1694915
Number of leaf cells: 1638370
Number of combinational cells: 175100
Number of level-sensitive latches: 1731
Number of edge-triggered flip-flops: 1446439
Number of nets: 178911
Information: Saving plan group abstraction to milkyway view
plan_group_1.CEL (ABS-103)
To exclude the side load flip-flop cells, specify the -ignore_pins option with a collection of
pins to be treated as high-fanout nets. The following example ignores the scan_enable and
reset pins on plan groups plan_group_1 and plan_group_2 and allows the tool to remove
internal flip-flops with connections to those ports.
icc_shell> create_on_demand_netlist -ignore_pins {
u1/plan_group_1/scan_enable \
u1/plan_group_1/reset \
u1/plan_group_2/scan_enable \
u1/plan_group_2/reset }
The following log file section, which was generated by the previous example, shows 95.1
percent edge-triggered flip-flop compression. In this example, the tool retained only 70348
The following example shows the contents of the alu_mcmm_setup.tcl file used for creating
block-level MCMM settings.
set scenario1 ../inputs/mode_norm.sdc
set scenario2 ../inputs/mode_slow.sdc
create_scenario mode_norm
set_operating_conditions -analysis_type on_chip_variation \
-max_library lib1 -min_library lib1 -max WCCOM -min WCCOM
set_tlu_plus_files -max_emulation_tluplus ../libs/f_MF.tluplus \
-max_tluplus ../libs/f.tluplus -tech2itf_map ../libs/star.map_8M
read_sdc $scenario1
create_scenario mode_slow
set_operating_conditions -analysis_type on_chip_variation \
-max_library lib1 -min_library lib1 -max WCCOM -min WCCOM
set_tlu_plus_files -max_emulation_tluplus ../libs/f_MF.tluplus \
-max_tluplus ../libs/f.tluplus -tech2itf_map ../libs/star.map_8M
read_sdc $scenario2
Use the -block_mcmm_map_file option as shown in the following example to create the
on-demand netlist for a multicorner-multimode design. The report_on_demand_netlist
command is used to check the amount of netlist compression gained by applying the
create_on_demand_netlist command.
icc_shell> create_on_demand_netlist -plan_groups [get_plan_groups] \
-block_mcmm_map_file block_mcmm_map.txt \
-on_demand_cell ODN
icc_shell> open_mw_cel ODN
icc_shell> report_on_demand_netlist
Note:
Do not load the full SDC constraints into the top-level design before creating the
on-demand netlist because loading the SDC constraints increases the memory required
to process your design. Use the -block_mcmm_map_file options of the
create_on_demand_netlist command instead.
5. If the design contains multiply instantiated modules, select the master instance.
icc_shell> select_mim_master_instance u0_0
You can also use the run_distributed_tasks command to create the soft macros by
using distributed processing. This step must be performed in separate Milkyway
libraries. When distributed processing completes, each soft macro CEL view must be
copied into the Milkyway library for the design to replace the corresponding black box
CEL view.
11. Create the on-demand netlist.
icc_shell> create_on_demand_netlist \
-soft_macros {u0_0 u0_2 u0_3} \
-on_demand_cell Design_ODN \
-pre_plan_group_abstraction_map_file preabstraction.map \
-block_sdc_map_file block_sdc_map.file \
-block_upf_map_file block_upf_map.file
The following steps illustrate a partial flow used to process a design in the
on-demand-loading flow for designs that contain a UPF power intent description.
1. Create the UPF file for the top-level design.
The top-level netlist should contain all level-shifter, always-on, and isolation cells.
Power-switch cells are inserted by the IC Compiler tool.
2. If your design requires power switches at the top level for a shut-down power domain,
create a top-level voltage area.
3. Create the plan groups and a voltage area for each plan group.
Each voltage area must have the same boundary as its associated plan group. The
name of the voltage area, defined by the -name option with the create_voltage_area
command, should be the same as the power domain name.
icc_shell> create_plan_groups {plan_group_1 plan_group_2} \
-coordinate {x1 y1 x2 y2}
icc_shell> create_voltage_area {plan_group_1} \
-name domain_name_1 -coordinate {x1 y1 x2 y2}
icc_shell> create_voltage_area {plan_group_2} \
-name domain_name_2 -coordinate {x3 y3 x4 y4}
4. Create a UPF mapping file that contains a list of block name and UPF file name pairs as
follows:
plan_group_1 block1_UPF_file_name.upf
plan_group_2 block2_UPF_file_name.upf
5. Create the on-demand netlist and specify the UPF mapping file name with the
-block_upf_map_file upf_map_file_name option. You can also specify the
-mcmm_map_file and -mcmm_setup_file options for a multicorner-multimode design,
or specify the -block_sdc_map_file block_sdc_map_file_name option for a design
with a single scenario.
icc_shell> create_on_demand_netlist \
-on_demand_cell odn_cell_name \
-plan_groups [get_plan_groups *] \
-block_upf_map_file upf_map_file_name \
-block_sdc_map_file block_sdc_map_file_name
6. Open the on-demand cell, load the top-level UPF file, and load the full-chip SDC file.
icc_shell> open_mw_cel odn_cell_name
icc_shell> load_upf top_only_UPF_file_name.upf
icc_shell> read_sdc sdc_file_name.sdc
7. Create power and ground nets for the top- and block-level designs.
icc_shell> derive_pg_connection -create_nets
8. Create the power switch array or ring in the top- and block-level designs.
# Map the power switches
icc_shell> map_power_switch switch_name -domain domain_name \
-lib_cells cell_list
9. If your design contains top-level power switches for a shut-down power domain, connect
them with the connect_power_switch command. Specify the top-level voltage area
name with the -voltage_area option.
icc_shell> connect_power_switch -voltage_area Top_level_VA ...
10.Connect the block-level power-switch cells and specify DEFAULT_VA as the voltage
area name with the -voltage_area option.
icc_shell> connect_power_switch -voltage_area DEFAULT_VA ...
Note the following restrictions when using UPF in the on-demand-loading flow:
• The .ddc, black box, and multiply instantiated module flows are not supported.
• Each plan group must have its own power domain and a corresponding voltage area.
Creating a plan group within the DEFAULT_VA is not supported because it does not
have its own power domain.
• You cannot create extra feedthrough ports during pin creation. Feedthrough ports must
exist in the original netlist.
• Isolation and level-shifter cells created with the set_isolation_control -location
parent command are supported in the scopeless type of UPF; however, -location
parent with “scope self” is not supported.
• You must use always-on buffers; the single-rail always-on methodology is not supported.
• Disjoint voltage areas are not supported.
• Designs that contain multiply instantiated modules are not supported.
• The -source, -sink, and -diff_supply_only options to the set_isolation
command are not supported in the on-demand-loading flow with UPF. You must prepare
the top-level and block-level UPF descriptions separately.
• Include any UPF commands required to resolve supply sets to supply nets in the
top-level-only UPF file.
6-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
For information about the command options, see the create_fp_placement man page.
To perform virtual flat placement using the GUI layout window, first set the window task
mode to Design Planning if it is not already in that mode (File > Task > Design Planning).
Then choose Placement > Place Macro and Standard Cells. This opens the dialog box
shown in Figure 6-1.
Figure 6-1 Place Macro and Standard Cells Dialog Box
You can set the effort level to Low (the default) or High. The Low effort mode produces good
placement results for hard macros and plan groups. Select the High effort mode for even
better quality of results at the cost of more runtime.
Select one or more of the “Congestion driven,” “Timing driven,” and “Hierarchical gravity”
options to specify the types of placement optimization to apply. Select “Exploration mode” to
perform very fast placement, without legalization, so that you can quickly explore various
placement alternatives. You can read more about these options in the following sections:
• “Congestion-Driven Placement” on page 6-6
• “Timing-Driven Placement” on page 6-6
• “Hierarchical Gravity” on page 6-6
• “Exploration Mode” on page 6-7
Click the Advanced Options button to open the dialog box shown in Figure 6-2.
Figure 6-2 Virtual Flat Placement Advanced Options Dialog Box
In the “Max fanout” box, enter the maximum fanout that you want to be considered during
placement optimization. The placer does not attempt to reduce the wire lengths of any net
that has a fanout greater than this number.
Select the “Incremental” option to perform incremental virtual flat placement on a design that
has already had virtual flat placement performed, and you want the placer to keep the
placement of existing cells where possible. You can choose the scope of the design on
which to perform incremental placement:
• All – The whole design
• Top level cells only – Top-level cells that do not belong to any plan group or voltage area
• Specified plan groups – Cells belonging to specified plan groups
• Specified voltage areas – Cells belonging to specified voltage areas
By default, placed cells are legalized by resolving overlaps and moving standard cells to
legal sites. To speed up the design planning flow, you can disable legalization of standard
cell placement and use the unlegalized design during exploration mode plan-group-aware
routing. To prevent legalizing, uncheck the “Legalize resulting placement” option. To disable
legalization before high-fanout synthesis and in-place optimization, set the
fpopt_no_legalize variable to true. You can legalize the placement separately by using
the legalize_placement command at a later time.
If you are performing virtual flat placement for a block and not for the whole chip, you can
optimize the I/O pin locations by selecting the “Optimize pins” option. In that case, the placer
locates the pins to minimize wire lengths, while observing any pin constraints that have been
set for the block. Performing placement and pin assignment simultaneously results in
smaller wire lengths for nets connected to the constrained pins. Figure 6-3 shows the overall
flow for using simultaneous placement and pin assignment at the block level.
Figure 6-3 Block-Level Simultaneous Placement and Pin Assignment Flow
create_fp_placement -optimize_pins
-no_hierarchy_gravity
Select the “Ignore scan chain connectivity” option to have the placer ignore scan chain
connections during placement.
Select the “Write placement blockages into file” option to have the placer write all the
internally computed placement blockages into a file called design_planning_blockages.tcl.
These blockages include macro padding and channels narrower that the sliver size.
In the “Number of CPUs” box, enter the number of CPUs to be used in parallel to work on
virtual flat placement.
Congestion-Driven Placement
The congestion-driven virtual flat placement flow is disabled by default. To enable it, use the
create_fp_placement -congestion_driven command or select the “Congestion driven”
option in the Place Macro and Standard Cells dialog box.
With congestion-driven placement, the placer makes a greater effort to reduce congestion
at the cost of runtime. It places cells close together to minimize wire length, but in congested
areas, it adds keepout padding around cells and moves the cells to make room for routing.
This can affect the amount of area occupied by macro arrays.
The keepout areas generated during congestion-driven placement are automatically
removed after placement is complete. If you plan to do incremental placement later, you can
save the generated keepouts by using the -write_placement_blockages option of the
create_fp_placement command or by selecting the “Write placement blockages into file”
option of the advanced options dialog box. Later, when you want to perform incremental
virtual flat placement, source the saved file, design_planning_blockages.tcl.
Timing-Driven Placement
The timing-driven virtual flat placement flow is disabled by default. To enable it, use the
create_fp_placement -timing_driven command or select the “Timing driven” option in
the Place Macro and Standard Cells dialog box.
With timing-driven placement, the placer makes a greater effort to improve timing by
keeping cells closer together along critical paths, including both standard cells and macro
cells. This takes more runtime because timing analysis must be performed along with
placement.
Hierarchical Gravity
The hierarchical gravity option is enabled by default. To disable it, use the
create_fp_placement -no_hierarchy_gravity command or uncheck the “Hierarchical
gravity” option in the Place Macro and Standard Cells dialog box.
The hierarchical gravity option tends to keep the cells belonging to each hierarchical design
logic block physically together. This type of grouping usually results in better placement
because designs tend to partition well along hierarchical boundaries. If there are no
user-created plan groups, the placement engine analyzes the logical hierarchy of the design
and uses blocks with reasonable sizes as the default plan groups.
You should disable hierarchical gravity if the design does not have hierarchy or if you know
that the existing logical hierarchy does not represent a good physical partitioning of the
design. Disabling hierarchical gravity saves runtime and allows the placement engine more
flexibility in placing the cells of a hierarchical block.
Figure 6-4 shows the effects of hierarchical gravity on virtual flat placement. The colored
regions represent the areas occupied by standard cells belonging to different hierarchical
blocks.
Figure 6-4 Placement With and Without Hierarchical Gravity
Exploration Mode
The exploration mode is disabled by default. To enable it, use the create_fp_placement
-exploration command or select the “Exploration mode” option in the Place Macro and
Standard Cells dialog box.
In the exploration mode, the placer performs virtual flat placement very fast so that you can
quickly explore different placement strategies. It uses the low-effort mode for speed and
places most cells coarsely, without considering timing or congestion, and does not legalize
the placement.
In a typical placement exploration flow, you perform an initial virtual flat placement in
exploration mode to determine the best plan group sizes, shapes, and locations. Using that
information, you create and shape the plan groups by using the create_plan_groups and
shape_fp_blocks commands. After that, you run virtual flat placement in exploration mode
again to get good-quality placement of hard macros, top-level cells, and interface cells.
During the initial flat placement stage before plan group creation, the exploration mode
groups together logic from the same hierarchy as in the standard design planning flow,
although overlaps can occur because the placement is not legalized. This placement
provides sufficient information to determine plan group sizes, shapes, and locations.
At the hierarchical placement stage, when plan groups are in the core, the exploration mode
performs good-quality placement of top-level interface cells and macro cells. It places hard
macros with no overlap, but standard cells might overlap. It applies more effort to the
placement of top-level cells, interface cells, and any hard macros inside the plan groups. At
the end of hierarchical placement in exploration mode, the placement of hard macros,
top-level cells, and interface cells has the same quality as regular hierarchical placement.
The placement results are sufficient for you to perform top-level routability analysis.
Note:
The fast exploration flow does not support multiply instantiated modules, black boxes, or
multicorner-multimode operation, and it cannot be used with the -effort high,
-timing_driven, -congestion_driven, -incremental, or -optimize_pins options.
To get the best results in the least amount of time, observe the following guidelines in the
exploration flow:
• High-fanout synthesis
To perform high-fanout synthesis after virtual flat placement, use the
optimize_fp_timing –hfs_only command. When you use this command in the
exploration flow (after create_fp_placement -exploration), the tool performs
high-fanout synthesis in incremental mode, which is more efficient for analyzing the
clumped placement of existing buffers, and does not legalize the newly added buffers.
• Routing
The route_zrt_global -exploration true command performs fast, low-effort
routing for design exploration.
• Optimization
The optimize_fp_timing -feedthrough_buffering_only command, followed by
virtual in-place optimization, performs optimization without running the complete in-place
optimization flow. The virtual_ipo and virtual_ipo -end commands perform
in-place virtual timing optimization for fast optimization during design exploration.
• Timing budgeting
The allocate_fp_budgets –exploration command performs fast timing budgeting
during design exploration.
The following script shows a typical command sequence in a timing-driven exploration flow.
read_verilog ...
derive_pg_connection ...
create_floorplan
# Plan-group-aware routing
mark_clock_tree
set_route_zrt_common_options -plan_group_aware ...
# Timing budgeting
allocate_fp_budgets -exploration
pin assignment separately. The quality is measured by a smaller wire length of nets
connected to the constrained pins.
Figure 6-3 shows the design flow for the simultaneous placement and pin assignment for
block-level designs.
• Use the default dialog box settings and command settings if you are not sure about what
settings to use. Use lower-effort settings initially and higher-effort settings for detailed
floorplanning.
• Consider using high-effort settings for small- or medium-sized designs, even at early
stages of physical prototyping, for higher quality of results at the cost of slightly longer
runtimes.
• Increase the pin-count-based macro padding to at least 1.0 track per pin
(set_keepout_margin -tracks_per_macro_pin 1.0) to prevent congestion when
using the macros on edge feature (set_fp_placement_strategy -macros_on_edge).
database; you must set placement strategy options during each session. This is the
command syntax:
set_fp_placement_strategy
[-adjust_shapes on | off]
[-allow_misaligning_flips on | off]
[-auto_grouping none | user_only | low | medium | high ]
[-auto_grouping_max_columns integer]
[-auto_grouping_max_height height]
[-auto_grouping_max_rows rows]
[-auto_grouping_max_width width]
[-block_constraint_file file_name]
[-congestion_effort low | medium | high]
[-default]
[-fix_macros none | soft_macros_only | all]
[-flip_chip off | on | honor_reserved]
[-force_auto_detect_hierarchy on | off]
[-hierarchy_gravity_blocks list_of_block_names]
[-hierarchy_gravity_multi_level on | off]
[-honor_mv_cells on | off]
[-IO_net_weight weight]
[-macro_orientation automatic | all | orientation]
[-macro_setup_only on | off]
[-macros_avoid_hard_macro_blockage_vicinity on | off]
[-macros_min_distance_applies_to macro_cells]
[-macros_on_edge on | off | auto]
[-min_distance_between_macros distance]
[-min_distance_to_auto_array distance]
[-minimize_auto_grouping_channels on | off]
[-pin_routing_aware on | off]
[-plan_group_interface_net_weight weight]
[-sliver_size distance]
[-snap_macros_to_user_grid on | off]
[-spread_spare_cells on | off]
[-virtual_IPO on | off]
After you set these options, the settings apply to future virtual flat placement performed by
using the create_fp_placement command or by choosing Placement > Place Macro and
Standard Cells in the GUI. To view the current settings for these options, use the
report_fp_placement_strategy command as shown in the following example,
icc_shell> report_fp_placement_strategy
...
*** Macro related parameters ***
set_fp_placement_strategy -macro_orientation automatic | all | N
current setting: automatic
default setting: automatic
...
The virtual flat placement strategy options are divided into the following categories:
• Macro-Related Options
• Congestion-Related Options
• Net Weighting Options
• Miscellaneous Options
Macro-Related Options
These are the strategy options that control hard macro placement:
set_fp_placement_strategy
[-allow_misaligning_flips true | false]
[-auto_grouping none | user_only | low | medium | high]
[-auto_grouping_max_columns columns]
[-auto_grouping_max_height distance]
[-auto_grouping_max_rows rows]
[-auto_grouping_max_width width]
[-fix_macros none | soft_macros_only | all]
[-macro_orientation automatic | all | orientation]
[-macro_setup_only on | off]
[-macros_avoid_hard_macro_blockage_vicinity true | false]
[-macros_min_distance_applies_to collection]
[-macros_on_edge on | off | auto]
[-min_distance_between_macros distance]
[-min_distance_to_auto_array distance]
[-minimize_auto_grouping_channels true | false]
[-pin_routing_aware on | off]
[-sliver_size distance]
[-snap_macros_to_user_grid on | off]
• low (the default behavior) – Small macros of the same reference cell are arrayed, but
larger macros are not arrayed. User-defined arrays are honored.
• medium – Small- and medium-sized macros of the same reference cell are arrayed, but
larger macros are not arrayed. User-defined arrays are honored.
• high – Small macros and some larger macros are arrayed. User-defined arrays are
honored.
Figure 6-5 shows examples of macro array grouping results for the none, low (default), and
high settings for the -auto_grouping option.
provide further control over the size of automatically generated macro arrays. Specify a
value of 0 for any of these options to disable them.
To reduce the number of channels between macros in the array, specify the
-minimize_auto_grouping_channels true option. Figure 6-6 shows the macro array
grouping results for this option set to false and true. Note that the macros in Figure 6-6
have pins only on one side and are placed nearly back-to-back.
Figure 6-6 Macro Array Channels
-minimize_auto_grouping_channels -minimize_auto_grouping_channels
false true
You can create additional spacing around the macro arrays with the
-min_distance_to_auto_array spacing option. Figure 6-7 shows the macro array
grouping results for a -min_distance_to_auto_array spacing of 0 and 20 microns
respectively.
To prevent the tool from flipping macros and causing a misalignment of the macros, specify
the -allow_misaligning_flips false option. Misalignments can be caused by keepout
margins that are not equal for each side of the macro.
This option setting affects macros during virtual flat placement only. The is_fixed attribute
status of each macro is not affected. Optimization commands used later in the flow might still
move macros that are fixed during virtual flat placement.
Macro Orientation
The -macro_orientation option can be used to restrict the allowed orientation of macros
during virtual flat placement. It can be set as follows:
• automatic (the default behavior) – The tool determines a good orientation to use for
each reference library cell based on the pin locations and uses that same orientation for
all instances of that macro.
• all – The tool can use any orientation for each macro instance.
This option setting affects macros during virtual flat placement only.
Macros are then placed with a minimum of 8.0 microns of spacing between them, as
measured from the macro padding, if any, to ensure that at least 8.0 microns of space is
available for standard cell placement.
Figure 6-9 shows the resulting macro placements with the distance between macros set to
0 microns and 20 microns.
By default, the minimum spacing applies to all macros. To apply a minimum spacing only to
certain macros, use the -macros_min_distance_applies_to option and supply a
collection of macros, as in the following example:
icc_shell> set lev3RAM [get_cells {*/*/*RAM*}]
{I_ORCA_TOP/I_CONT_MEM/I_CONT_RAM_2_3 I_ORCA_TOP/I_CONT_MEM/...
... }
icc_shell> set_fp_placement_strategy -min_distance_between_macros 8.0 \
-macros_min_distance_applies_to $lev3RAM
Then all of the macros belonging to the collection are placed with a minimum spacing of at
least 8.0 microns between them. The minimum spacing between one of these macros and
a macro not belonging to the collection is one-half of the specified value, or 4.0 microns in
this example.
If the collection is empty or if the -macros_min_distance_applies_to option is not used,
the minimum spacing value applies to all macros.
Macros on Edge
Use the -macros_on_edge option to specify whether to place macros along boundary edges
or to allow them to be placed anywhere. This option can be set to off, on, or auto. The off
setting allows macros to be placed anywhere. The on setting forces placement of macros
along the boundary edges of the chip or plan group whenever possible. The auto setting
(which is the default behavior) tends to perform placement along the chip or plan group
boundary edges, but allows some macros to be placed away from edges.
Figure 6-10 shows examples of placement using -macros_on_edge off and
-macros_on_edge auto.
Placing macros along boundary edges reduces the occurrence of fragment spaces and
leaves a larger open space in the middle for placement and routing.
If hard macros occupy a large percentage of the chip area, consider using the on setting.
Placing hard macros along the edges generally reduces congestion and improves
routability.
For a hierarchical design, set this option to off until you have shaped and placed the plan
groups inside the core area of the chip.
Macros-on-edge placement behavior depends on the hierarchical gravity placement feature.
When hierarchical gravity placement is enabled, the macros are placed on the edges of the
hierarchical boundaries of their respective plan groups. Otherwise, they are placed along
the edges of the chip. Hierarchical gravity is enabled by default, but it can be turned off by
using the -no_hierarchy_gravity option of the create_fp_placement command or
unchecking the “Hierarchical gravity” option in the Place Macro and Standard Cells dialog
box.
With this option turned on, the placer considers pin information and creates macro-only
blockages along the edges of each plan group and soft macro so that macro cells do not
block the edges of the plan groups or soft macros. This reserves enough space along the
edges of the plan group or soft macro for pin assignment to place pins and for the router to
route nets to the pins.
Sliver Size
The -sliver_size option specifies the minimum channel size that is allowed to be
populated by standard cells. A sliver is a channel that is considered too small to allow
placement of any standard cells.
For example, suppose that you set the sliver size to 10 as follows:
icc_shell> set_fp_placement_strategy -sliver_size 10.0
In that case, the placer does not place any standard cells in a channel narrower than 10.0
microns wide, even if there is room for them. The default sliver size is 0.0, which means the
placer can place standard cells in any channel that has room.
You can use the -sliver_size option to prevent congestion in narrow channels that
currently contain standard cells. If there are several channels containing standard cells that
have a lot of congestion, set the sliver size to the largest width of those channels. The next
time you use the create_fp_placement command, the channels are cleared.
Figure 6-11 shows the placement of standard cells before and after setting the sliver size.
After placement with the sliver size set, the channels narrower than the specified sliver size
are left unfilled.
Default behavior without sliver size setting After placement with sliver size
The keepout margin of a hard macro is not included in the sliver size. Hard macro slivers are
measured from the edge of the keepout margin, not from the edge of the macro.
Congestion-Related Options
These are the strategy options that control congestion-driven placement:
set_fp_placement_strategy
[-adjust_shapes on | off]
[-congestion_effort low | medium | high]
The -adjust_shapes option determines whether the placer adjusts plan group shapes to
reduce congestion during congestion-driven placement. By default, this option is off and no
plan group shaping is performed during congestion-driven placement.
The -congestion_effort option controls the amount of effort applied to preventing
congestion during congestion-driven placement. It can be set to low, medium, or high. The
default behavior is low, in which the placer analyzes congestion by using the placement
congestion map. When this option is set to medium, the placer uses the routing congestion
map generated by the Zroute global router working at the minimum effort level. The high
setting is like the medium setting, except that the Zroute global router works at the default
effort level (medium) instead of the minimum level.
The -IO_net_weight option specifies a weight applied to minimizing the lengths of I/O nets.
The default weight is 1.0, which gives I/O nets the same weight as all other nets. Specify a
lower weight, between 0.0 and 1.0, to give less weight to I/O nets; or specify a higher weight,
between 1.0 and 10.0, to give more weight to I/O nets. Set the weight higher to minimize I/
O net lengths, possibly at the expense of having longer nets elsewhere. Set the weight to
0.0 if I/O block placement has not been finalized and you want the placer help determine the
best I/O block locations.
Figure 6-12 shows flylines between I/O blocks and the rest of the chip after placement using
an I/O net weight of 1.0 (default) and an I/O net weight of 4.0. The I/O net lengths are shorter
when the higher weight is used.
Placement using default I/O net weight = 1.0 Placement using higher I/O net weight = 4.0
Miscellaneous Options
These are miscellaneous strategy options that control virtual flat placement:
set_fp_placement_strategy
[-default]
[-block_constraint_file file_name]
[-flip_chip off | on | honor_reserved]
[-force_auto_detect_hierarchy on | off]
[-hierarchy_gravity_blocks list_of_names]
[-hierarchy_gravity_multi_level on | off]
[-honor_mv_cells on | off]
[-spread_spare_cells on | off]
[-virtual_IPO on | off]
The block constraint file is a text file that lists the blocks, their respective regions where they
are to be placed, and an optional ordering number, in the following form:
fplModuleDestRegion block_name1 region_abbrev [order_number]
fplModuleDestRegion block_name2 region_abbrev [order_number]
fplModuleDestRegion block_name3 region_abbrev [order_number]
...
In this example, the blocks PG_1 through PG_4 are placed along the south edge of the chip
in numerical order.
This feature is based on the logical hierarchy only. Other placement constraints, such as
power domains or relative placement groups, do not affect the results.
Figure 6-13 shows an example of the logical hierarchy of a design in which there is an
existing plan group consisting of modules top/A11 and top/A12. When the auto-detect
hierarchy option is set to on, an additional logical hierarchy node outside of the existing plan
group is extracted. This logical hierarchy node consists of modules top/A13, top/A13/B12,
and top/A13/B13. The create_fp_placement command places the cell instances inside
these modules together.
TOP
Hierarchical Gravity
The -hierarchy_gravity_blocks option of the set_fp_placement_strategy command
specifies a list of blocks for hierarchical gravity placement. If you specify this option, the
create_fp_placement command does not perform automatic hierarchy detection. Instead,
it applies hierarchical gravity only to the blocks specified by using this option and any plan
groups already created in the design. This option can also be used on a netlist where the
logical hierarchy is flattened.
The -hierarchy_gravity_multi_level option, when set to on, specifies that the
create_fp_placement command considers multiple levels of logical hierarchy during
macro placement. The tool determines which hierarchy levels to consider based on macro
connectivity and places the macros from this hierarchy in close proximity. This option and
the -hierarchy_gravity_blocks option are mutually exclusive. By default, this option is
off.
The IC Compiler GUI makes it easy to set these constraints. To use the GUI, first make sure
that the command menus are in design planning mode (File > Task > Design Planning).
Then choose Placement > Macro Constraints, which opens the Macro Constraints dialog
box as shown in Figure 6-14.
Figure 6-14 Macro Constraints Dialog Box
The dialog box has three tabs, labeled Arrays, Options, and Relative. Click a tab to view a
list of macro constraints of that type that have been defined: array constraints, macro
placement options, or relative location constraints, respectively.
To create a new constraint, click the Add button. This opens another dialog box containing
the options for setting the constraints of the current tab setting.
To edit or delete an existing constraint, select that constraint in the Macro Constraints list
and then click the Edit or Delete button.
The Color button applies a specified color to the display of the macros belonging to the
currently selected constraint. This feature helps you identify the location of the macros in the
layout view. The Zoom Fit button zooms the layout view to show just those macros.
The Reload button creates user-defined array constraints from automatically created arrays.
You can then edit these constraints to modify the automatically placed arrays.
For online help on using the dialog box, click its Help button.
The following subsections describe how to set the hard macro constraints:
• Macro Array Constraints
• Macro Placement Options
• Relative Location Constraints
After you set the hard macro constraints, close the Macro Constraints dialog box. When you
perform virtual flat placement by using the create_fp_placement command or by choosing
Placement > Place Macro and Standard Cells, the placer places the macros according to
the constraints you have set.
If there are conflicting constraints on the macros, error messages are printed during
placement. However, the error messages do not print details about the conflicts.
Figure 6-15 shows some examples of one-dimensional and two-dimensional macro arrays.
C1 B11
B12
D1
B21 B22 B23
E1
Rectilinear B31 B32
array
3 x 1 array
Figure 6-16 shows different methods for aligning macros in an array: by macro edges, pin,
or offsets from core edges.
Figure 6-16 Alignment to Other Macros, Pins, and Edges
Align
pins
You can specify macro array constraints with the set_fp_macro_array command:
set_fp_macro_array
-name string
[-elements collection_of_macro_cells]
To report macro array constraints that have been set, use the report_fp_macro_array
command. For details, see the man pages for the set_fp_macro_array and
report_fp_macro_array commands.
To specify macro array constraints by using the GUI, first make sure that the command
menus are in design planning mode (File > Task > Design Planning). Then choose
Placement > Macro Constraints. In the Macro Constraints dialog box, click the Array tab if it
is not already selected. Then click the Add button. This opens the Macro Constraints - Add
Macro Array dialog box. See Figure 6-17.
Macro cell
selection buttons
Graphical preview of
array using current
constraint settings
The “Macro array name” box specifies a name for the macro array constraint. You can use
the default name or enter any name to identify this constraint.
Enter the dimensions of the array in the Rows and Cols boxes. A table displays an array of
cells having the specified dimensions. Enter the names of the macro cell instances into the
cells of the array. You can use the “Macro cells” selection buttons to select the macros
graphically from the layout view or select from a list of macro names.
Select the Rectilinear option if you want to allow rows or columns to have different numbers
of cells. In that case, you can leave some cells in the spreadsheet empty.
Select the Vertical option if you want a one-dimensional array to be placed as a vertical
column of cells rather than a row of cells.
The “Use keepout margin” option causes the macros to be placed as close together as
possible while observing the macro keepout margins. Alternatively, use the “Specified
offset” option to explicitly specify the minimum allowed spacing, in microns, between macro
edges in the x- and y-directions.
The “Align edges” option setting determines how to align the edges of macro cells of
different sizes in each row (or in each column if the Vertical option is selected). For a
one-dimensional array, the options are left, right, bottom, top, and center. For a
two-dimensional array, the options are left-bottom, left-top, left-center, and so on, so you can
specify the alignment in the x- and y-directions.
For an array containing exactly two macros, you can use the “Align two macro cells with
pins” option to align a specified pin of one macro to a specified pin of the other macro.
Click the Preview button to get a graphical preview of the array. The preview shows the
relative sizes, shapes, and alignments of macros in the array.
If you are satisfied with the preview, click the OK button to add the array constraint to the list
shown in the Macro Constraints dialog box. To edit this constraint, select it in the list in the
Macro Constraints dialog box and then click the Edit button.
To specify macro placement options by using the GUI, first make sure that the command
menus are in design planning mode (File > Task > Design Planning). Then choose
Placement > Macro Constraints. In the Macro Constraints dialog box, click the Options tab
if it is not already selected. Then click the Add button. This opens the Macro Constraints -
Add Macro Options dialog box. See Figure 6-18.
Graphical preview of
macro placement area
In the “Macro objects” box, enter the names of one or more macro cell instances or macro
arrays to which the constraints apply. You can use the buttons to select the macros
graphically from the layout view or select from a list of macro instances and macro array
names.
You can use the “Align pins” option to place a single macro cell so that a specified pin of the
macro is aligned to a specified port, as shown in Figure 6-19. To do so, enter a single macro
name in the “Macro objects” box, select the “Align pins” option, and enter the port name and
the macro pin name. You can use the buttons to select the port and pin graphically or select
from a list of port names and macro pin names.
Macro pin
DATA[0]
aligned
Core area
Use the “Legal orientations” options to restrict the allowed orientations of macro cells. If you
do not use this option, all orientations allowed in the physical library apply to the macro. This
option can be used for macro cells only, not macro arrays.
You can restrict placement of the macros or macro arrays to a specified region of the core
area such as the top half, the left half, or the bottom-right quadrant. To make such a
constraint, select the “Anchor bound” option and select the region to constrain by using the
“Value” list. Some of the possible choices are shown in Figure 6-20.
Figure 6-20 Anchor Bound Areas
top top-middle
For each anchor bound region setting, you can optionally specify an offset from the outside
edge or edges, further restricting placement of the macros or macro array. For example, if
you select “top” as the anchor bound, restricting placement to the top half of the core area,
you can also specify a “Y offset” or minimum distance away from the top core edge, as
shown in Figure 6-21.
Figure 6-21 Anchor Bound Offset From Outside Edge
Y offset
top
The “Anchor bound” is a soft bound, which means that the placer can move the macro cell
outside of the boundary area if there is not enough space available or if the cost is too high.
Whether or not you use the “Anchor bound” option, you can define side channels, which are
regions along the core edges where placement of macros is not allowed. To define side
channels, select the “Side channel” option and specify the channel sizes for the Left, Right,
Top, and Bottom edges of the core area, in microns. The macros are then placed at least the
specified distances away from the core edges. If a channel is not required on a side, leave
the channel at its default setting of zero. For example, if you set the Right channel to a
nonzero value, macros cannot be placed along the right edge within the specified distance.
If both anchor bound and side channel constraints are specified, both types of constraints
apply at the same time, as shown in the example in Figure 6-22.
Figure 6-22 Anchor Bound and Side Channel Constraints
Right-side channel
Click the Preview button to get a graphical preview of the anchor bound and side channel
constraints. In the example shown in Figure 6-23, the anchor bound constrains placement
to the blue area and the side channel constrains placement to the green area.
If you are satisfied with the preview, click the OK button to add the placement constraint to
the list shown in the Macro Constraints dialog box. To edit this constraint, select it in the list
in the Macro Constraints dialog box and then click the Edit button.
For detailed information about using these commands, see their man pages.
To specify relative location constraints by using the GUI, first make sure that the command
menus are in design planning mode (File > Task > Design Planning). Then choose
Placement > Macro Constraints. In the Macro Constraints dialog box, click the Relative tab
if it is not already selected. Then click the Add button. This opens the Macro Constraints –
Add Relative Location dialog box. See Figure 6-24.
Graphical preview of
anchor object, target
macro, and x- and
y-offset using current
constraint settings
The “Constraint name” box specifies a name for the relative location constraint. You can use
the default name or enter any name to identify this constraint.
Under “Anchor object,” in the Name box, enter the name of the anchor object, or leave this
box blank if the anchor object is the core area. The anchor object can be the core area, a
plan group, a fixed macro cell, or a macro cell that is effectively fixed in place by having its
own relative location constraint. Also, using the Corner list, specify the corner of the anchor
object from which to apply the x- and y-offsets.
Under “Target macro,” in the Name box, enter the name of the macro to which the constraint
applies. Also, using the Corner list, specify the corner of the target macro to be placed at the
x- and y-offsets from the anchor object. Select one Orientation option (N, W, S, E, FN, FW,
FS, or FE) to specify the orientation of the target macro to be placed.
In the “X offset” and “Y offset” boxes, enter the amount of offset from the anchor object
corner to the target macro corner, in microns. Each value can be positive, negative, or zero.
Click the Preview button to display a graphical preview of the anchor object, target object,
and x- and y-offsets between the active corners of these objects. The preview shows the
relative sizes, shapes, and alignments of the anchor and target objects.
If you are satisfied with the preview, click the OK button to add the relative location constraint
to the list shown in the Macro Constraints dialog box. To edit this constraint, select it in the
list in the Macro Constraints dialog box and then click the Edit button.
Block shielding is a strip of metal surrounding a macro that prevents crosstalk between wires
inside and outside the macro. To add shielding around macros or plan groups, use the
create_fp_block_shielding or choose Floorplan > Create Module Block Shielding.
Blockages and keepout margins are described in the following subsections. Shielding is
described in “Plan Group Overview” on page 7-3.
Placement Blockages
You might want to prevent the placement of hard macros in certain areas, for example, a
channel between two plan groups or next to a power pad. You can specify placement
blockages with the create_placement_blockage command:
create_placement_blockage
-bbox {llx1 lly1 urx1 ury1}
[-type {hard | soft | partial}]
[-blocked_percentage percentage]
[-no_register]
[-no_pin]
[-blocked_layers layers]
[-no_hard_macro]
[-name blockage_name]
To report placement blockages that have been set, use the following script excerpt:
foreach_in_collection item [get_placement_blockages -quiet] {
puts "Name: [get_attribute $item name]"
puts " Type: [get_attribute $item type]"
puts " bbox: [get_attribute $item bbox]\n"
}
The Name box specifies a name for the blockage. You can use the default name or enter
any name to identify the blockage.
In the Coordinates box, enter the coordinates of the lower-left corner and upper-right corner
of the rectangular blockage area. To select the blockage area graphically in the layout view,
use the rectangle button next to the box.
Keepout Margins
You can specify keepout margins or padding around some or all macros. During virtual flat
placement, all other cells, including standard cells and other macros, are placed outside the
specified margin. This can help prevent congestion and DRC errors.
This is the syntax of the set_keepout_margin command:
set_keepout_margin
[-type hard | soft]
[-outer {lx by rx ty}]
[-tracks_per_macro_pin value]
[-min_padding_per_macro value]
[-max_padding_per_macro value]
[-all_macros]
[-macro_masters]
[-macro_instances]
[-north]
[object_list]
To report keepout margins that have been set, use the report_keepout_margin
command. To remove keepout margins, use the remove_keepout_margin command. For
details on using these commands, see the man pages.
To specify keepout margins by using the GUI, choose Placement > Set Keepout Margin.
This opens the Set Keepout Margin dialog box. See Figure 6-26.
Figure 6-26 Set Keepout Margin Dialog Box
Under “Type,” select the keepout margin type, Soft or Hard. A soft keepout margin prevents
other cells from being placed within the margin, but the cells can be moved in during
optimization and legalization. A hard keepout margin never allows other cells within the
margin.
Under “Cells,” specify the cells affected by the command. You can choose all macros,
specified reference cells (“Specified masters” option), or specified cell instances. The
buttons next to the text box let you choose the cells graphically in the layout view or choose
from a list of cells.
Under “Outer margin,” select “Use specified outer keepout coordinates” to explicitly specify
the margins on each side of the macro, in microns.
If you selected “All macros,” you can optionally select “Derive outer keepout coordinates” to
automatically calculate the margins of all macro cells. In that case, the margin is set
according to the number of pins on each side. An automatically calculated keepout is a hard
keepout constraint. By default, the margin for each side is set to the number of macro pins
multiplied by one-half the track width, which allows enough space for parallel connections to
the pins from both sides, as shown by the example in Figure 6-27.
Figure 6-27 Automatically Derived Keepout Margin
Keepout margin:
8 pins x 0.5 tracks/pin
= 4 tracks
8 pins
Hard macro
You can specify the number of tracks per pin used in the calculation. For a macro with a
large number of pins, use a value between 0.5 and 1.0 tracks per pin to reserve enough
room for routing the connections. You can also specify a minimum margin and a maximum
margin, in microns, to restrict the allowed range of calculated keepout margins. The default
maximum margin setting, -1, causes the maximum limit to be 40 times the metal1 pitch.
Select the “Set margin with respect to north orientation of the cell” to keep the specified
margin values with respect to the north orientation of the cell when the cell is rotated.
Click OK or Apply to create the keepout margins.
If you do not specify any keepouts, the placer automatically derives the keepouts using 0.5
tracks per pin by default.
You can control the display of keepout margins in the layout window by using the View
Settings panel (View > Toolbars > View Settings). Only explicit (not automatically
calculated) keepout margins can be displayed.
To remove explicit keepout margins, choose Placement > Report Keepout Margin.
Use the add_to_rp_group command to add leaf cells to a relative placement group. The
relative placement information is automatically saved in the Milkyway design database when
you save the design in Milkyway format using the save_mw_cel command. It contains the
height and width of the top-level relative placement groups and the x- and y-offsets of the
cell instances, placement keepouts, and hierarchical relative placement groups for each
top-level relative placement group. The x- and y-offsets are used to anchor the relative
placement cell instance with respect to the lower-left corner (the relative placement’s origin)
of its corresponding relative placement group.
During the design planning flow, you can perform the following relative placement functions:
• Apply compression by using the -compress option.
• Specify the anchor location by using the -x_offset and -y_offset options.
• Specify the utilization percentage by using the -utilization option.
• Ignore the relative placement group by using the -ignore option.
However, you should not use the following relative placement functions during virtual flat
placement:
• Specifying the group alignment pin by using the -pin_align_name option.
• Specifying the right alignment by using the -alignment bottom_right option.
• Allowing keepouts over tap cells by using the -allow_keepout_over_tapcell option.
• Legalizing individual objects in a relative placement group.
You can use the create_fp_placement command to place cell instances in each relative
placement group during initial virtual flat placement. By using the create_fp_placement
and create_placement commands to place the cells in each relative placement group in
the same way, the create_fp_placement command can provide you with better wire length
and congestion estimates for your floorplan.
To achieve a good correlation between the create_fp_placement and
create_placement commands when placing the relative placement cells, the following
conditions apply.
• If the cell instances in one relative placement group belong to different move bounds, the
create_fp_placement command ignores this relative placement group. This also
applies to plan groups automatically extracted by the create_fp_placement command
based on the logical hierarchy.
• No cell instances are placed over relative placement keepouts.
• If any cell instance in one relative placement group is fixed, this relative placement
grouping is ignored by the create_fp_placement command and the cells are treated as
nonrelative placement cells.
create_fp_placement
place_opt
Use the legalize_placement command to automatically legalize the standard cells. The
standard cells in relative placement groups might be moved outside of the corresponding
relative placement bounding box during legalization.
Figure 6-29 shows the flow for fixing the relative placement cells.
Figure 6-29 Fixing the Relative Placement Cells Flow
create_fp_placement -no_legalize
legalize_placement
place_opt
Use this flow to perform virtual flat placement if your design contains relative placement
groups that have mixed macros and standard cells.
1. Run virtual flat placement by using the create_fp_placement -no_legalize
command.
2. Set the is_fixed attribute to true for all macros.
commit_fp_plan_groups
uncommit_fp_soft_macros
Use the following flow for designs that contain hierarchical relative placement groups.
1. Place and legalize the design with hierarchical relative placement groups by using the
create_fp_placement -no_legalize and legalize_placement commands.
2. Convert plan groups into soft macros, also called child cells or physical blocks, by using
the commit_fp_plan_groups command.
The command extracts relative placement groups that belong to the plan group from the
top CEL view and pushes them down to soft macros. Each soft macro is a CEL view of
the block in the same Milkyway design library.
3. Fix the locations of the relative placement groups, which include macros, by using the
set_dont_touch_placement command.
Placement Evaluation
No straightforward criteria exist for evaluating the initial placement of hard macros.
Measuring the quality of results (QoR) is subjective and often depends on practical design
experience. You should observe some basic rules when measuring QoR, such as pushing
hard macros to the core boundary and aligning similar hard macros. However, the most
important issues are timing and routability.
QoR can be measured by the following criteria:
• Routability
You can measure the routability of your design by analyzing the routing congestion
produced by the global router. The data used to analyze congestion consists of a textual
report and visual heat maps that show where the routing congestion hotspots exist in the
design. Highly congested designs might not be routable. Hard macros tend to create
congestion around their edges and corners. You should analyze hard macro placements
for routability early in the design cycle.
• Timing
Timing calculations can use the placement information to better estimate interconnect
loading. The interconnect timing calculations should take into account detours in routes
caused by the presence of hard macros. Good placement minimizes timing violations.
• Wire length
Smaller values of total wire length are a good indicator of placement quality. The total
wire length is reported in the placement log file. You should monitor this number when
you assess multiple placement solutions.
Another aspect of wire length is localized to hard macros. By looking at the signal (flyline)
connections of a hard macro, you can quickly determine whether the hard macro is
placed in an optimal location. For example, a hard macro placed in the lower-left corner
of the core area that is extensively connected to logic in the upper-right corner of the die
indicates a poor location for the hard macro.
• Data flow
If you know the logic and intended operation of the design, you can assess the data flow
by using the hierarchical browser at any stage in the design flow to observe where logical
modules and hard macros are physically placed. Using this technique can help you make
sensible placement decisions.
• Standard cell placement areas
You can visually assess the placement of macros and standard cells. Small areas
surrounded by hard macros usually cause congestion hot spots. Unless the connections
to and from standard cells in these areas are completely localized, it is difficult to
complete the connections from within these areas to the objects outside these areas.
Generally, a contiguous standard cell placement area without bottlenecks is desirable.
After passing these QoR measurements, the placement result qualifies as a good starting
point for further manual tuning.
If your design does not have channels, you can use the -check_abutment option to check
for the abutment of each soft and hard macro with the surrounding macro cell instances. The
abutment check reports gaps detected between the macro cell instances.
Option Description
By default, the weight is 0.2 for each of the previous options. If you specify a cumulative
weight that is not equal to 1.0, the tool adjusts each weight proportionally such that the sum
of all weights is 1.0.
The following examples illustrate the results of the evaluate_macro_placement command
on two different placements. In Figure 6-31, the design on the left contains a typical
placement. The design on the right of the figure contains a swimming pool in upper right of
the layout. This swimming pool region is a standard cell placement area that is completely
surrounded by hard macros.
Figure 6-31 Example Macro Placements
The output of the evaluate_macro_placement command for the typical layout shows a
weighted cost of 6. The command output is as follows:
icc_shell> evaluate_macro_placement
Reading database ...
Checking for macro overlaps ... none
Swimming pools ... area: 1506
Net detours ... length: 158215
Wirelength (nets connected to macros) ... 362009
Thin channels ... 4
Misaligned channels ...1 pair
The output of the evaluate_macro_placement command for the layout that contains the
swimming pool shows a weighted cost of 11. The command output is as follows:
icc_shell> evaluate_macro_placement
Reading database ...
Checking for macro overlaps ... none
Swimming pools ... area: 130578
Net detours ... length: 265286
Wirelength (nets connected to macros) ... 325924
Thin channels ... 2
Misaligned channels ...1 pair
Floorplan Editing
You can use the IC Compiler tool to perform the following floorplan editing operations:
• Create and delete objects
• Move, rotate, align, distribute, and spread objects
• Fix and unfix objects for editing
• Undo and redo edit changes
• Resize, expand, reshape, and split objects
You can perform many types of editing in the GUI layout view. To display or remove the
toolbars containing the editing command buttons, use View > Toolbars > Edit and View >
Toolbars > Advanced Edit. The editing buttons and their functions are shown in Figure 6-32.
Figure 6-32 GUI Editing Tools
Fix Edit
Unfix Edit
Toggle Snapping
Create Edit Group
Open Properties Dialog Box
Move/Resize Objects
Copy Objects
Delete Objects
Create Route Shapes (Advanced Route Tool)
Split Shapes
Stretch Wires
Window Stretch
Push Objects
Spread Wires
Rotation/Orientation (90 clockwise)
Set Object Shape (Rectangle)
Reshape Objects
Align/Distribute Objects
Move Pins on Edge
Cut With Fixed Shape
Expansion (Expand All)
Offset for Expand or Cut With Fixed Channel
For example, to move a hard macro, use the selection tool (arrow button) to select the
macro. Click the move and resize tool button. The pointer changes to a four-way arrow
shape. Place the pointer on the macro, and drag it to the new location.
Instead of clicking the move/resize button, you can go to the command menu and choose
Edit > Move/Resize, or you can press the M key on the keyboard. The command menu
shows the button and keyboard shortcut associated with the command, as shown in
Figure 6-33.
For detailed information about using the GUI to perform editing tasks, see the “Editing a
Design” topic in IC Compiler online Help and the Using GUI Tools appendix in the IC
Compiler Implementation User Guide.
By default, the remove_placement command by itself moves all movable standard cells and
macro cells to outside of the chip and spreads them out, effectively taking you back to the
starting point of the placement task.
To move only the standard cells or only the macro cells, use the -object_type option. To
move the cells to the origin, chip center, or top and right sides of the chip, use the
-new_location option.
To delete other floorplan objects at the design planning stage such as placement blockages,
bounds, plan groups, voltage areas, plan group padding, and block shielding, choose
Floorplan > Delete Floorplan Objects in the GUI and select the type of objects you want to
delete. You can also use one or more of the following commands to remove floorplan
objects: remove_placement_blockage, remove_bounds, remove_plan_groups,
remove_route_guide, remove_voltage_area, remove_fp_plan_group_padding,
remove_fp_block_shielding, or remove_track.
The Align objects and Distribute objects buttons on the Edit toolbar are particularly helpful
for adjusting your hard macros.
When you move or change a core or die, you can use the move_objects -keep_placement
command to ensure that standard cells and hard macros remain within the boundary of the
parent object (for example, the core, the die, or a plan group).
You can use the -keep_pad_to_core_distance option to maintain the distance between
the core and the I/O pad cells. This option also maintains the distance between the core and
the die. This forces changes to the core and die to be made in tandem. If the I/O pad cells
are absent, the core-to-die distance is still maintained.
Note:
After moving or resizing objects, the resulting placement is not legalized. You must
explicitly legalize the placement by using the legalize_placement command.
Using the IC Compiler tool, you can define voltage areas at any level of a logic hierarchy. A
voltage area can be a single rectangular or rectilinear shape or can consist of multiple
disjoint rectilinear and rectangular shapes.
Power domains and voltage areas should maintain a one-to-one mapping relationship. A
power domain and its matching voltage area should have the same name and same set of
hierarchical cells. When a power domain is mapped with the voltage area, the associated
logic information is automatically derived from the power domain.
Voltage areas can be explicitly associated with existing power domains, or they can be
created without specifying any explicit association with power domains. They can also be
created when no power domains have been defined for the design.
A given voltage area can contain one or more physically nested voltage areas. A voltage
area must completely contain its nested voltage areas. These nested voltage areas
correspond to logically nested power domains. Voltage areas that would overlap physically
must be resolved into nonoverlapping, abutted rectangular or rectilinear subareas.
Intersecting voltage areas are not supported.
Planning the location and shape of voltage areas requires the following steps:
1. Create a voltage area of a specific geometry on the core area of the chip.
Choose Floorplan > Create Voltage Area.
The Create Voltage Area dialog box appears. See Figure 6-35.
❍ Horizontal guard band width and Vertical guard band width – You can use guard
bands to ensure that no shorts occur at the boundaries of the voltage areas. Guard
bands define hard keepout margins surrounding the voltage areas. No cells, including
level shifters and isolation cells, can be placed within the guard band margins.
For example, use guard bands when the rows are the same for all the voltage areas.
The guard bands guarantee that the cells in different voltage areas are separated so
that power planning does not introduce shorts.
You can specify a guard band width in the horizontal and vertical direction when
creating or updating voltage areas.
❍ Target utilization – Specifies the target utilization for the voltage area during shaping.
You must specify a utilization value between 0.1 and 1.0. The default utilization is the
same value used for the rest of the design. Larger utilization values result in smaller
voltage areas, with less extra space allowed for routing.
To change the target utilization, you must use the remove_voltage_area command
to remove all voltage areas or specified voltage areas from the design, and then
re-create the voltage area and the new target utilization value.
❍ Bounding Boxes – If you know an ideal location for a voltage area, you can direct it
by specifying explicit coordinates. The voltage area geometry can be a rectangle or a
rectilinear polygon.
To define a rectangular voltage area, select the rectangular-shaped button, and type
the x- and y-coordinates for the lower-left and upper-right corners of the rectangle in
the Coordinates box.
To define a rectilinear voltage area, select the rectilinear-shaped button, and type the
x- and y-coordinates for each corner of the polygon in the Coordinates box.
After the user-defined voltage areas are created, the tool automatically derives a
default voltage area for placement of cells not specifically assigned to any voltage
areas.
❍ Set as fixed – You can place newly created voltage areas inside the core in fixed
locations. The voltage areas with the is_fixed attribute set to true are ignored by
the shape_fp_blocks command and are not reshaped. By default, this option is off.
❍ Color cell instances – (Optional) Select a method for coloring cells in the voltage area.
To disable cell coloring, select None.
To cycle through the available colors, select Cycle. This is the default.
To apply a specific color, select Specified and select a color in the color list.
2. Click OK or Apply.
3. Use the create_fp_placement command to place the design, keeping voltage area
cells together. You can also choose Placement > Place Macro and Standard Cells.
4. Use the shape_fp_blocks command and options to automatically shape and place the
voltage area boundaries. You can also choose Placement > Place and Shape Plan
Groups. For more information, see “Shape Plan Group Command” on page 7-12.
For more information about voltage areas in multivoltage designs, see Defining and Using
Voltage Areas in the IC Compiler Implementation User Guide. For more information about
nested voltage areas in multivoltage designs, see Handling Nested Voltage Areas in the IC
Compiler Implementation User Guide.
TOP
Voltage area boundary
Plan group
core boundary
Plan
group
• The voltage area boundary is contained by the plan group core boundary, as shown in
Figure 6-37.
Figure 6-37 Voltage Area Boundary Contained by Plan Group Boundary
Voltage area
boundary
During commit hierarchy, the physical voltage area boundary is copied down into the soft
macro, and the child cell instances are assigned logically to their respective voltage
areas. The effects on associated power domains are not considered.
During uncommit hierarchy, the soft macro child cells are assigned logically to the
original top cell nondefault voltage area.
A design can have more than one multiply instantiated module group. If for example,
modules A1 and A2 have reference A, and modules B1 and B2 have reference B, two
multiply instantiated module groups are formed. Many designs use multiple instances of the
same logic block to create the required functionality. By using the same block for similar
operations, the design time is reduced.
This section includes the following topics:
• Identifying Multiply Instantiated Modules
• Identifying Multiply Instantiated Module Plan Groups
• Shaping Multiply Instantiated Module Plan Groups
• Placing and Analyzing Multiply Instantiated Module Plan Groups
• Flipping Multiply Instantiated Module Plan Groups
• QoR Analysis of Multiply Instantiated Module Plan Groups
For example:
icc_shell> uniquify_fp_mw_cel \
-store_mim_property [get_cells {instA instB instC}]
If you specify the -store_mim_property option, the tool sets the mim_master_name
attribute to the reference design name for the specified cell instances.
instantiated block abstraction modules and creates unique block abstraction leaf cells. To
create unique block abstractions, specify the -block_abstractions instances option. If
you specify both the -block_abstractions and -store_mim_property options, the
multiply instantiated module (MIM) property is set on the instances you specify. In this case,
the allocate_fp_budgets command recognizes the instances as multiply instantiated
modules, even though the references are unique. Information to control transparent
interface optimization might be lost after running the uniquify_fp_mw_cel command. To
restore the transparent interface optimization settings, use the
set_top_implementation_options command.
For example:
icc_shell> remove_mim_property [get_cells instA]
The report also provides information about the status of the copied placement data and
suggests a multiply instantiated module plan group flipping grid on which to place a multiply
instantiated module plan group. When the plan group is flipped, the standard cell placement
remains legal.
5 multiply instantiated
modules are the
same size (one family)
All corners of the multiply instantiated module plan groups are aligned on their row and
column placement boundaries and are placed in such a way that they can be legally flipped,
provided the rows are uniform.
Note:
The default plan group locations might not be aligned.
You can use the copy_mim command and options to perform various manipulations during
the virtual flat placement stage on the multiply instantiated modules to determine which of
the plan groups in each multiply instantiated module group is the master instance of that
multiply instantiated module group.
The placement of the master instance is copied to the other plan groups in the multiply
instantiated module group. The copied information, which is saved to the Milkyway
database, contains the original placement of all the cells in the copied plan multiply
instantiated module plan groups relative to the lower-left corner of the plan group and the
orientation of the plan group.
The copy_mim command uses the following syntax:
copy_mim
[-type placement | blockage | boundary]
[-restore_placement]
mim_plan_group
The mim_plan_group argument specifies a list containing one multiply instantiated module
plan group.
In Figure 6-39, the placement is different in every plan group before running the copy_mim
command. After running the copy_mim command, the tool copies the cell placement of the
1_ALU multiply instantiated module to the other multiply instantiated modules in the same
group.
icc_shell> copy_mim -type placement 1_ALU
As described in the following sections, you can create multiply instantiated modules with the
same cell placement, blockages, and shapes.
Figure 6-40 Modified Boundary Applied to Other Multiply Instantiated Modules in the Same
Group
Figure 6-41 shows a layout before and after running the flip_mim command.
Only mirroring and flipping about the x- or y-axis is allowed for multiply instantiated module
plan groups. The command reports an error if the plan group is not rectangular.
During flipping, the bounding box of the plan group does not move.
Placement blockages are not flipped. However, the copy_mim -type blockage command
recognizes the flipped orientation.
7-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
You can use the plan groups to analyze pin and feedthrough placement for the module, and
identify potential issues before you finalize the pin locations. Using this information, you can
modify route guides or constraints on the router to achieve better pin locations.
After creating the plan group and refining its shape, you can convert the plan group to a soft
macro cell by committing the plan group. During conversion, the tool creates pins on the soft
macro and moves the macro cells belonging to the plan group from the top-level into the soft
macro. After the conversion, the floorplan contains the remaining top-level macro cells,
macros, and a soft macro cell for each plan group. You can now refine independently the
placement and routing for each soft macro.
For information about the command options, see the create_plan_groups man page.
To create plan groups by using the GUI layout window, choose Floorplan > Create Plan
Group. This opens the dialog box shown in Figure 7-1.
Specify the level or levels of hierarchy that the plan groups contain by entering one or more
hierarchical cell names in the Hierarchical cell box. You can also click the browse button and
select one or more levels of hierarchy in the object browser. Separate multiple cell names
with spaces. Define the initial shape and size of the plan group by specifying the aspect
ratio, utilization, width and height, or coordinates which describe the plan group boundary.
The aspect ratio defines the height of the plan group divided by the width. You can draw a
rectangular shape for the plan group in the layout window by clicking the Region option,
clicking the Rectangle button, and drawing a rectangle in the layout. Click the Rectilinear
button and select points on the rectilinear boundary for the plan group to define a rectilinear
region. Select the Fixed location option to fix the coordinates of the plan group boundary.
Select one of the Color cell instances options to control the coloring of the standard cells in
the plan group. The Cycle option assigns a unique color to each individual plan group.
For information about the command options, see the remove_plan_groups man page.
To remove all plan groups by using the GUI layout window, choose Floorplan > Delete
Floorplan Objects > Delete All Plan Groups.
Select All to apply the padding to all plan groups in the design, or select Specified and enter
the names of the plan groups to apply the padding. You can apply internal padding, external
padding, or both internal and external padding. Select the Same on all sides option and
enter a padding value in microns to apply the same padding to all sides of the plan group.
Select the Non-uniform option and enter values for the left, right, top, and bottom edges to
create different padding values for different plan group edges. Select the External padding
option and select Same on all sides or Non-uniform to add external padding to the plan
group.
To add only external padding, enter the external padding values and specify a padding value
of 0 for internal padding. You can also create only external padding by specifying the
-external_widths option to the create_fp_plan_group_padding command and
excluding the -internal_widths option.
Figure 7-3 shows two adjacent plan groups of the same size with plan group padding. The
plan group on the left contains only external padding; the plan group on the right contains
both internal and external padding.
Figure 7-3 Two Plan Groups With Padding
For information about the command options, see the create_fp_block_shielding man
page.
To create block shielding by using the GUI layout window, first set the window task mode to
Design Planning if it is not already in that mode (File > Task > Design Planning). Then
choose Floorplan > Create Module Block Shielding. This opens the dialog box shown in
Figure 7-4.
Select the Current design option to create block shielding around the current design. Select
the All option to create block shielding around all plan groups and soft macros in the design.
To create block shielding for only specified plan groups, select the Plan group option and
enter the names of one or more plan groups. To create block shielding for only specified soft
macros, select the Soft macro option and enter the names of one or more soft macros.
Select the Inside, Outside, or Both option to create block shielding inside the plan group or
soft macro boundary, outside the boundary, or both inside and outside. If you select the Both
option, the tool creates the inner shielding by using the specified width and the outer
shielding by using the specified width. You can specify the width of the shield in metal
pitches or in microns by selecting the Pitch or Microns option and entering the width value
in the text box. Select the metal layers to use and select the sides on which to create the
block shielding.
By default, the block shielding is floating and not tied electrically to any other net. To connect
the block shielding to a net in the design, select the Tie to the net option and specify the net
name in the text box.
Figure 7-5 shows a plan group with block shielding both inside and outside the plan group
boundary.
Figure 7-5 Plan Group With Internal and External Block Shielding
For information about the command options, see the remove_fp_block_shielding man
page.
To remove all block shielding by using the GUI layout window, choose Floorplan > Delete
Floorplan Objects > Delete Module Block Shielding. Select the All option to remove all block
shielding throughout the design. To remove block shielding for only specified plan groups,
select the Plan group option and enter the names of one or more plan groups. To remove
block shielding for only specified soft macros, select the Soft macro option and enter the
names of one or more soft macros.
Select the Inside, Outside, or Both option to remove block shielding inside the plan group or
soft macro boundary, outside the boundary, or both inside and outside. Select the metal
shielding layers and sides on which to delete the block shielding.
For more information about the command options, see the shape_fp_blocks man page.
To create or modify the boundaries of the plan groups by using the GUI window, first set the
window task mode to Design Planning if it is not already in that mode (File > Task > Design
Planning). Then choose Placement > Place and Shape Plan Groups. This opens the dialog
box shown in Figure 7-6.
After you create plan groups with the create_plan_groups command, the tool places the
plan group shapes outside the placement area. The shape_fp_blocks command places
the plan group boundaries within the core area based on the options you specify. Figure 7-7
shows the design before and after running the shape_fp_blocks command.
Select the Prefer rectilinear shapes option to enable the shape_fp_blocks command to
create rectilinear-shaped plan groups and soft macros around fixed macros associated with
the plan group. However, in cases where you have one small block and one large block in
your design, the small block is placed near one of the corners of the large block and creates
a rectilinear L-shaped boundary. L-shaped plan groups can be created even if no fixed
objects are encountered on the floorplan. By default, the shape_fp_blocks command
creates only rectangular plan groups or soft macros boundaries, unless the boundaries
overlap fixed macros.
Select the Run incrementally option to adjust the floorplan to meet the new plan group or
voltage area target utilizations, or to reduce the placement congestion in channels between
blocks or inside the blocks themselves. Choose the Target utilization driven option to adjust
the floorplan to meet the target utilization based on the set_fp_shaping_strategy
-utilization_slack settings. The plan group shapes should be similar to the design
before running the command. Use target utilization-driven shaping to make minor changes
to the shapes of the plan groups.
Select the Congestion driven option to resize and reshape the channels between the plan
groups and soft macros to improve congestion. The tool attempts to change the floorplan as
little as possible to reduce congestion in the channels between blocks and inside the blocks
themselves so that the estimates based on the congestion map are satisfied. If you select
this option, the command first attempts to use the congestion map created by global routing.
If a congestion map is not available, the command tries to use a placement congestion map.
If neither of the two congestion maps is available, the tool generates an error message.
If the placer places standard cells into widened channels after running congestion-driven
shaping, you can use the set_fp_shaping_strategy -add_channel_blockages
command to insert placement blockages into narrow, congested channels. You can use
hard placement blockages or partial blockages with the congestion density reflecting the cell
area that was initially inside the channel. Note that you should use hard placement
blockages in the channels if there is enough space, because the placement legalizer does
not obey partial blockages.
Select the Create routing channels option to create routing channels between plan groups,
black boxes, and soft macros. The channel widths are based on pin counts with
nonperpendicular connections to objects on the associated object edge. If you want
channels between the top-level blocks in your design, but the design is not pad limited in
size, set the initial core utilization slightly lower than the initial block utilizations. Begin by
using a utilization of 0.65 for the core and a utilization of 0.7 for the blocks. By default, the
tool abuts plan groups and does not create routing channels.
Select the Refine placement afterwards option to run virtual flat placement after shaping the
plan groups, soft macros, and black boxes. By default, the shape_fp_blocks command
does not run virtual flat placement after shaping the blocks.
Select the Top-down block placement mode option to perform an initial virtual flat placement
and shape the plan groups, soft macros, and black boxes in the design at the same time.
The shape_fp_blocks -top_down command is equivalent to running the
create_fp_placement command followed by the shape_fp_blocks command.
Select the Place sub macros option to shape the plan groups, soft macros, and black boxes
in the design and move hard macros to remove overlap. By default, the shape_fp_blocks
command creates the plan group boundaries but does not move hard macros, even if the
plan groups and hard macros overlap.
Select the Narrower than (microns) option and enter a width in microns to specify the
smallest channel width that can be created by the shape_fp_blocks command. This option
prevents thin slivers that can occur when there are many blockages, blockages with small
channels between each other, or blockages with small channels between the edge of the
plan group and the design core. By default, the Block small placement area option is
selected and the tool chooses a value for the smallest channel width.
Select the Use placement constraint file option and enter the name of the file that contains
the relative placement constraints to specify the relative location of plan groups and soft
macros with respect to each other. The constraint file contains one constraint per line. The
first word in the line is always the name of the constraint. For example,
fplModuleDestRegion plan_group_name region
where region is one of N, S, E, W, NE, NW, SE, SW, or a coordinate specified as {x,y}.
For a description of the relative placement constraints, see “Using Relative Placement
Constraints” on page 7-22.
For more information, see the set_fp_shaping_strategy man page. After setting the
shaping strategy values, you can confirm the current settings with the
report_fp_shaping_strategy command.
Note that the settings are not saved in the Milkyway design library.
• Perform probing between the logical hierarchy tree and the physical layout. This allows
you to select cell instances, highlight and unhighlight cells, turn flylines on and off, and
display the connectivity of selected modules and plan groups.
The hierarchy browser window shows an instance tree on the left and an object table on the
right. The instance name of the top-level design appears at the top of the instance tree.
Figure 7-8 shows an example of a hierarchy browser.
Figure 7-8 Hierarchy Browser
The hierarchy browser indicates object types by displaying icons next to the cell names as
follows:
• Logical
❍ T – Top-level design
❍ BB – Black boxes
❍ H – Hierarchical module
❍ HM – Hard macro
❍ IO – I/O cell
❍ SC – Standard cell
❍ ILM – Interface logic model or block abstraction model
• Physical
❍ P – Plan group
❍ SM – Soft macro
To color-code the icons, right-click the hierarchy browser view and choose Set Colors on
Top Hierarchies.
• Display port and pin names or net names by selecting a port, pin, or net (rather than a
cell) in the text box above the object table list.
You can specify what types of information are displayed in the object table list.
Right-click inside the table and then choose Columns > More. You can then select the
details you want to display from the objects listed in the dialog box.
For more information about the hierarchy browser, see IC Compiler online Help.
For more information about the command options, see the merge_fp_hierarchy man
page.
To merge cells within the hierarchy by using the GUI window, first set the window task mode
to Design Planning if it is not already in that mode (File > Task > Design Planning). Then
choose Partition > Merge Hierarchy. This opens the dialog box shown in Figure 7-9.
Enter the name of the new container in the New cell name box. The tool creates the new cell
name and moves the selected cells beneath the new cell. Enter the reference name of the
new cell design created by merging the existing cells in the New design name box. Enter the
name of the cells to be merged in the Cells box.
You can update the Synopsys Design Constraints (SDC) file for your design to reflect the
new hierarchy created by the merge_fp_hierarchy command. Select Update SDC and
enter the name of the SDC file in the Input SDC file box and enter the name of the new SDC
file for the new hierarchy in the Output SDC file box. Select Load back updated SDC file to
reload the new SDC file for the updated design.
Select the Create wrapper option to create a wrapper on any existing leaf cell or hierarchical
logic modules. A wrapper is used to selectively expose internal connections and dangling
pins onto a wrapper interface so that any future changes made to these internal objects do
not affect the wrapper interface. The new wrapper module retains the pin names from the
logic modules. Note that if the new pin name on the wrapper is different from the one
connected inside the original cell pins, a file describing the mapping of the pin names is
automatically generated. You can also use this option to create a wrapper module for a
merged plan group before committing it to a soft macro. Note that pin assignment and
feedthrough generation occur only at the wrapper module. The original module under the
wrapper is not affected by any feedthrough insertion changes.
If there are changes in the netlist of the original logic modules, but the module interface is
still the same, you can insert the new netlist into the wrapper module, create a CEL view for
the new block and then link it to the top-level design. You do not have to run pin assignment
or generate feedthroughs again for the new netlist.
If you select the Create wrapper option, the Port merging option merges the ports that are
connected by the same interface net in the wrapper. Deselect the Port merging option to
prevent this behavior.
3. Click OK or Apply.
The following examples use the design example in Figure 7-10. In the figure, region A is
occupied by standard cells, macro cells, placement blockages, and keepout margins.
Region B contains plan groups that contain only standard cells.
A B
To display the utilization value for individual plan groups and soft macros in the design,
specify their names on the command line. The get_utilization command and the
ToolTip window report the same utilization value for the plan group.
icc_shell> get_utilization [get_plan_groups *]
plan group <I_ORCA_TOP/I_BLENDER_1> utilization: 0.889244
plan group <I_ORCA_TOP/I_BLENDER_2> utilization: 0.887113
plan group <I_ORCA_TOP/I_BLENDER_3> utilization: 0.893797
plan group <I_ORCA_TOP/I_BLENDER_4> utilization: 0.893594
plan group <I_ORCA_TOP/I_BLENDER_5> utilization: 0.893594
plan group <I_ORCA_TOP/I_BLENDER_6> utilization: 0.893594
plan group <I_ORCA_TOP/I_BLENDER_7> utilization: 0.888865
average utilization of plan groups: 0.891400
overall utilization of plan groups: 0.891392
0.891392
To report the utilization for the top-level design, use the get_utilization command with
no arguments. The get_utilization command with no options excludes plan groups from
the utilization calculation; the command calculates the utilization for region A and excludes
region B in Figure 7-10:
icc_shell> get_utilization
Top level utilization: 0.588681
0.588681
Use the -flat option to ignore plan group boundaries and include the plan group area in the
utilization calculation; the command includes both regions A and B in Figure 7-10 in the
utilization calculation.
icc_shell> get_utilization -flat
Top level utilization: 0.701213
0.701213
Use the -row_based option to exclude gaps between rows in the utilization calculation. If
gaps exist between standard cell rows in your design, the get_utilization -row_based
command reports a higher utilization than the get_utilization command.
The remaining options to the get_utilization command specify which objects are part of
the occupied area and which are part of the available area. For example, the
-consider_blockages hard option excludes hard blockages from being considered as
part of the available area and causes a higher utilization value to be reported. You can also
control the consideration of hard and soft blockages, macros, and macro blockages. For
details, see the man page for the get_utilization command.
add_end_cap -at_plan_group_boundary Places end cap cells at both sides of the vertical
boundary of the plan group. The tool inserts end
cap cells within the plan group boundary at the
hierarchy level of the plan group.
Perform optimization
place_opt / clock_opt / route_opt
Top-Level Flow
Open Milkyway design
open_mw_cel
Reading the SCANDEF information enables scan chain elements to have size_only
attributes applied. This prevents the scan chain elements from being reoptimized during
in-place optimization. As a result, the consistency between the scan chain netlist and
SCANDEF is maintained through the design planning stage.
For more information about this command and options, see the man page.
You can turn off repartitioning and perform only plan group-aware scan chain reordering by
using the following setting before running the optimize_dft -plan_group command:
icc_shell> set_optimize_dft_options -repartitioning_method none
When using the uncommit_fp_soft_macros command, note that the SCANDEF might be
different from the original file. Nevertheless, this SCANDEF is functionally equivalent to the
original.
8-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
The following illustration shows a typical power network synthesis flow for single-voltage
designs.
Figure 8-1 Power Network Synthesis for Single-Voltage Designs
Analyze IR drop
Modify constraints
set_fp_block_ring_constraints
-add | -remove | -remove_all |
-save_file file_name | -load_file file_name
-block blocks
-nets nets
[-block_type master | instance | plan_group | voltage_area]
[-all_blocks]
[-horizontal_layer layer]
[-vertical_layer layer]
[-horizontal_width distance]
[-vertical_width distance]
[-horizontal_offset distance]
[-vertical_offset distance]
[-spacing distance]
The following example adds a ring constraint for the current design. The horizontal layer is
constrained to the METAL5 layer with a width of 3 microns and an offset of 0.600 microns.
The vertical layer is constrained to the METAL6 layer with a width of 3 microns and an offset
of 0.600 microns. The ring constraint is applied around all instances with the cell names
ALU, CPU, or RAM using the VDD and VSS nets.
icc_shell> set_fp_block_ring_constraints -add \
-horizontal_layer METAL5 -vertical_layer METAL6 -horizontal_width 3 \
-vertical_width 3 -horizontal_offset 0.600 -vertical_offset 0.600 \
-block_type master -nets {VDD VSS} -block { ALU CPU RAM }
The following example creates two virtual pads for the VDD net at coordinates 100,100 and
2000,2000.
icc_shell> create_fp_virtual_pad -nets VDD -point {100.000 100.000}
icc_shell> create_fp_virtual_pad -nets VDD -point {2000.000 2000.000}
You can save the current virtual pads to a file by using the -save option. The following
example saves the current virtual pads to the pads.rpt file and displays the content of the file.
icc_shell> create_fp_virtual_pad -save_file pads.rpt
Saving the virtual pad file pads.rpt successfully
To re-create the virtual pads, use the create_fp_virtual_pad command with the
-load_file option. To remove the virtual pads created by using the
create_fp_virtual_pad command, use the remove_fp_virtual_pad command. The
remove_fp_virtual_pad -all command removes all virtual pads; you can also use the
remove_fp_virtual_pad command with the -net and -point options to remove individual
virtual pads.
The following example synthesizes the power plan based on the constraints set previously
with the set_fp_rail_constraints command. The command synthesizes a power plan
using the VDD power net, the VSS ground net, and a supply voltage of 1.32V. The command
writes the voltage drop and electromigration results to the powerplan.dir directory.
icc_shell> synthesize_fp_rail -power_budget 800 -voltage_supply 1.32 \
-output_directory powerplan.dir -nets {VDD VSS} \
-synthesize_power_plan
The synthesize_fp_rail command generates the power plan based on the constraints
you provide. Rail analysis results for the design are saved to the ./pna_output directory; you
can use these results to examine the voltage drop, resistance, and electromigration and
perform other types of analysis on the power network. See “Analyzing the Power Network”
on page 8-69 for more information. If the target IR drop is greater than your specification,
change the power network constraints by using the set_fp_rail_constraints and
set_fp_block_ring_constraints commands. Figure 8-2 shows the power plan created
by running the synthesize_fp_rail command.
The following illustration shows a typical power network synthesis flow for a multivoltage
design.
Figure 8-3 Multivoltage Power Network Synthesis Flow
Analyze IR drop
Analyze results
N
Satisfactory results?
Power network synthesis constraints include settings for the power and ground net names,
supply voltage, power budget, target IR drop, and power-switch name. Use the
set_fp_rail_voltage_area_constraints command, or choose Preroute > Multi-Voltage
Power Network Constraints > Voltage Area Constraints in the GUI to select the voltage area
and set the constraints. The set_fp_rail_voltage_area_constraints command syntax
used to set power network synthesis constraints is as follows:
set_fp_rail_voltage_area_constraints
-voltage_area voltage_area
[-nets pg_nets]
-voltage_supply supply_voltage
[-power_budget power]
[-target_voltage_drop voltage]
[-power_switch power_switch_or_lib_cell]
Note:
To set the constraint for a power-down voltage area, you must specify the name of the
permanent power net followed by the name of the virtual power net. For example, use
the set_fp_rail_voltage_area_constraints -voltage_area VA1 -nets
VDD+VDD_Virtual command to assign a constraint on the VDD net for the power-down
voltage area named VA1. The command synthesizes both nets connected by
power-switch cells.
For a UPF design, the command inserts the power and ground net names automatically,
although you must provide supply voltage information. If you do not set the power
budget, power network synthesis assigns a power budget based on the ratio of the
instance area for this voltage area divided by the area of the entire design.
The following example sets a power network synthesis constraint on the VA1 voltage area
for the VDD and VSS power nets using a supply voltage of 1.5 V, a power budget of 200
mW, a target IR drop of 160 mV, and a power switch named SWITCH1.
icc_shell> set_fp_rail_voltage_area_constraints -voltage_area VA1 \
-power_budget 200 -power_switch SWITCH1 -voltage_supply 1.5 \
-target_voltage_drop 160 -nets {VDD VSS}
The following example specifies a power network layer constraint on the VA1 voltage area
for layer METAL6. The layer direction is vertical, the maximum number of power straps is
128, the minimum number is 4, the minimum width is 0.1 microns, and the spacing is
minimum.
icc_shell> set_fp_rail_voltage_area_constraints -voltage_area VA1 \
-layer METAL6 -direction vertical -max_strap 128 -min_strap 4 \
-min_width 0.1 -spacing minimum
command with the appropriate options or choose Preroute > Multi-Voltage Power Network
Constraints > Voltage Areas Constraints in the GUI and click the Ring and Straps
constraints button.
The set_fp_rail_voltage_area_constraints command syntax used to create power
rings around voltage areas is as follows:
set_fp_rail_voltage_area_constraints
[-ring_nets ring_nets | -skip_ring]
[-horizontal_ring_layer h_ring_layer]
[-vertical_ring_layer v_ring_layer]
[-ring_width pg_ring_width]
[-ring_max_width max_ring_width]
[-ring_min_width min_ring_width]
[-ring_spacing distance_between_rings]
[-ring_offset distance_to_boundary]
[-extend_strap voltage_area_ring | core_ring | boundary |
voltage_area_boundary | pad_ring]
[-num_extend_straps number_extended]
[-extend_strap_direction directions_to_extend]
Note:
You can define constraints for the core ring only for the default voltage area. To generate
the core ring, select the default voltage area in the Voltage Area selection box, choose
the “Generate core rings” check box in the GUI, and specify the ring power and ground
net names in the Power Ground nets text box. You can generate a permanent ring in the
default voltage area.
Figure 8-4 shows the voltage rings created by using the following
set_fp_rail_voltage_area_constraints command:
icc_shell> set_fp_rail_voltage_area_constraints \
-voltage_area DEFAULT_VA -ring_nets {VDD VSS VDD1 VDD2} \
-horizontal_ring_layer { M9 } -vertical_ring_layer { M8 }
VA1 VA2
The IC Compiler tool supports different techniques for extending power straps from the
voltage area. The -extend_strap voltage_area_ring option (“Voltage area ring” option
in the GUI) extends the straps to the power and ground ring for the voltage area. The
-extend_strap core_ring option (“Core ring” option in the GUI) extends the power and
ground straps to the power ring for the default voltage area. The -extend_strap boundary
option extends the straps to the top-level cell boundary. The -extend_strap pad_ring
option extends the straps to the top-level pad ring, and the -extend_strap
voltage_area_boundary option extends the straps to the boundary of the voltage area set
by using the create_voltage_area -coordinate command.
You can also control the direction used for extending the straps. Set the direction for power
rail extension by using the -extend_strap_direction option or by selecting the
appropriate check boxes in the “Direction for extending straps” section of the GUI. By
default, the command extends the power straps from all sides of the voltage area, unless
they are blocked by a constraint, a hard macro, or another voltage area.
The ground net is not extended out from each voltage area to the core ring because the
ground net is synthesized as a common net in the design. As a result, the ground net in each
voltage area is extended to the nearest ground straps outside the voltage area boundary.
• write_power_plan_regions - Writes out names and coordinates for all power plan
regions
• read_power_plan_regions - Reads in a power plan region names and coordinates file
written by the write_power_plan_regions command
• get_power_plan_regions - Retrieves a collection of existing power plan regions
For example, the following command creates a power plan region based on the core area
and excludes two macro cells. This technique is useful in designs where you do not want to
create a power and ground grid that overlaps certain macro cells. In this case, the power
plan region forms a new power and ground grid region, and the tool creates power and
ground on the region.
icc_shell> create_power_plan_regions region_1 \
-exclude_macros {macro1 macro2} -core -expand -35 \
-notch_threshold 50 -macro_offset 35
Use the -polygon option to create a new boundary for the power plan region by specifying
bounding points. Use the -expand option to enlarge the power plan region boundary by a
specified amount. You can also specify the -expand option with a negative distance to
shrink the power plan region. Figure 8-6 shows a power plan region before and after running
the update_power_plan_region command with the -expand option.
specify -remove_jog_method shrink to decrease the size of the region. The command
removes any jog edge in the region that is shorter than the threshold specified by the
-jog_threshold option. Figure 8-8 shows a power plan region before and after running the
update_power_plan_region command with the -remove_jog_method expand and
-jog_threshold 1000 options.
You can also specify a header without parameters by using the following syntax:
template : template_name {
For more information about using parameters in templates, see “Creating and Using
Parameters in a Template File” on page 8-35.
layer : layer_name
offset : offset
}
align_std_cell_rail : on | off
corner_bridge : on | off
honor_advanced_via_rule : on | off
}
In the template-based power planning flow, the details of the power and ground rings are
defined within a template file. The template file supports complex, design-independent
power structures that can be used across several designs. See “Creating the Power Ring
Template File” on page 8-19 for more information about the power ring template file.
You can define multiple ring strategies for a single design. For multivoltage designs, you
might require a different strategy for each voltage area.
The set_power_ring_strategy command defines the strategy for the power rings in your
design. The syntax of the set_power_ring_strategy command is as follows:
set_power_ring_strategy
strategy_name
-nets nets
[ -core
| -voltage_areas voltage_areas
| -polygon {polygon_area}
| -macros macro_names
| -power_plan_regions power_plan_region_name]
[-template template_spec]
[-extension {extension_spec}]
[-skip {skip_spec}]
Each power ring strategy is identified by a unique strategy name. You can create more than
one strategy by running the set_power_ring_strategy command multiple times. The
power ring periphery is defined by the -core, -voltage_area, -polygon, -macros, or
-power_plan_regions option.
The extension strategy defines which ring segments to extend, the direction they extend,
and the distance of the extension. This option is specified by the -extension option. The
extension specification for the power ring contains the nets:, direction:, and sides:
keywords. If you omit one or more net names from the specification, the command extends
all the nets defined by the -nets option. You can specify the extension direction by including
the direction: keyword and up to four directions by using the letters L,R,T and B for left,
right, top, and bottom respectively. Vertical power ring segments extend only in the top and
bottom directions. Horizontal power ring segments extend only in the left and right
directions.
You can prevent the tool from creating all segments of the power ring by specifying the
-skip option of the set_power_ring_strategy command. The option omits the specified
power ring segments for each power net in the ring. Specify the power ring nets, sides, and
layers by using the following syntax:
-skip {{nets: net_name} {sides: {side_1 side_2 ...}} \
{layers: layer_name}}
You can specify multiple sides within braces. The lowest leftmost side of the ring periphery
is side 1. Side numbers increase as you proceed clockwise around the ring.
To create a power ring for a power ring strategy, use the compile_power_plan -ring
-strategy strategy_name command.
spacing : minimum
offset : 1.0
}
}
Figure 8-9 shows the layout with power rings around three voltage areas.
Figure 8-9 Rings Around Voltage Areas
2. Set the power ring strategy. The region_1 power plan region is defined outside this
procedure.
icc_shell> set_power_ring_strategy strategy_1 -nets {VDD VSS} \
-power_plan_regions region_1 \
-template ring.tpl:ring_align_stdcell(2.0, minimum)
Figure 8-10 shows the layout with power rings aligned to standard cells.
Figure 8-10 Rings Aligned to Standard Cell Rails
Figure 8-11 shows the layout with a power ring with a shape specified by a complex polygon.
Figure 8-11 Rectilinear Power Ring
Figure 8-12 shows the layout with power rings around the macro cells.
Figure 8-12 Power Rings Around Macro Cells
Figure 8-13 shows a layout with standard corners and with additional via bridges at the
corners.
Figure 8-13 Layout Without and With Corner Bridging
Figure 8-14 shows the layout after you run the previous steps.
Figure 8-14 Partial Power Ring With Excluded Sides
To implement the cross-shaped power ring with wide and narrow ring segments,
1. Create the ring.tpl power ring template file and specify wider ring segments on sides 1,
4, 7, and 10.
template : wide_narrow_ring(narrow,wide) {
side : horizontal {
layer : METAL5
width : @narrow
spacing : minimum
offset : 0
}
side : vertical {
layer : METAL6
width : @narrow
spacing : minimum
offset : 0
}
side : {1 7} {
layer : METAL6
width : @wide
spacing : minimum
offset : 0
}
side : {4 10} {
layer : METAL5
width : @wide
spacing : minimum
offset : 0
}
}
You can also specify a header without parameters by using the following syntax:
template : template_name {
layer : layer_name {
direction : horizontal | vertical
number : strap_number
pitch : pitch_between_net_groups
offset : offset_to_boundary_or_coordinate
You can define multiple width or spacing values for nets defined in the layer section of the
strategy. If your strategy defines two or more nets with different widths and pitches, you must
define all widths and spacings by using braces, ({ }). For example, if your strategy contains
three nets VSS1, VSS2 and VSS3 with widths of 0.3, 0.35, and 0.5, and spacings of 0.2 and
0.25, you must include the following width and spacing definitions in your template file:
width : {0.3 0.35 0.5}
spacing : {0.2 0.25}
# Align the power and ground straps for the specified nets
# to the pins on the specified objects
align_straps_with_physical_cell : on | off {
# The master name of physical cell
cell: cell_name
# Define the stacked vias in the power grid. "all" creates vias at
# all strap intersections; "adjacent" creates vias only between
# adjacent layers without stacking vias; "specified" creates vias
# based on the connect_layers specification
stack_vias : all | adjacent | specified {
connect_layers : {lower_layer upper_layer}
}
}
Each advanced rule is associated only with its template. The following figures illustrate
different applications of the advanced rules.
Figure 8-16 shows the results after using the optimize_routing_tracks rule to control
strap width and spacing.
Figure 8-16 Layout Results Using optimize_routing_tracks
The insert_channel_straps advanced rule adds extra vertical straps in the channels
between hard macros. The tool identifies the channels between hard macros and skips
channels that contain synthesized straps or are too narrow for extra vertical straps. The tool
inserts extra vertical straps in the center of channels between hard macros. The
channel_threshold parameter defines the minimum threshold needed to insert straps.
You can select the layer and control the width and spacing of the strap. Figure 8-17 shows
an example where the tool inserts an extra strap.
In the template-based power planning flow, the details of the power and ground mesh are
defined within a template file. The template file supports complex, design-independent
power structures that can be used across several designs. See “Creating the Power Mesh
Template File” on page 8-32 for more information about the power mesh template file.
The power mesh strategy defines the routing area and a group of power and ground nets.
You can define multiple power mesh and ring strategies for a single design. For multivoltage
designs, you might require a different strategy for each voltage area.
The set_power_plan_strategy command defines the strategy for the power mesh in your
design. The syntax for the set_power_plan_strategy command is as follows:
set_power_plan_strategy
strategy_name
-nets nets
[-core |
-voltage_areas voltage_areas |
-polygon {polygon_area} |
-macros macro_names |
-power_plan_regions power_plan_region_name]
[-template template_spec]
[-extension {extension_spec}]
[-blockage {blockage_spec}]
Each power mesh strategy is identified by a unique strategy name. You can create multiple
strategies by running the set_power_plan_strategy command multiple times. The power
mesh area is defined by the -core, -voltage_area, -polygon, -macros, or
-power_plan_regions option.
The extension strategy defines which power mesh straps to extend, the direction they
extend, and the distance of the extension. This option is specified by the -extension
option. The extension specification for the power mesh contains the nets:, direction:,
and stop: keywords. If you do not specify one or more net names, the command extends
all the nets defined by the -nets option. You can specify the extension direction by including
the direction: keyword and up to four directions by using the letters L, R, T, and B for left,
right, top, and bottom respectively. By default, power and ground straps extend in all
directions.
The extension stop point for the power mesh is defined by the stop: keyword and one of the
following stop points: first_target, innermost_ring, outermost_ring,
design_boundary, or a user-specified distance. The first_target keyword specifies that
the power strap stops at the first wire segment of the same net; the innermost_ring
keyword specifies that the power strap stops at the innermost ring of the same net. The
outermost_ring keyword specifies that the strap stops at the outermost ring of the same
net, and the design_boundary keyword specifies that the strap extends to the boundary of
the current design. You can also specify a distance; the strap extends by the specified
distance from the boundary of the routing region. If you specify a negative distance, the tool
creates a gap between the strap end and the boundary. If you do not specify a stop point by
using the stop: keyword, the strap is not extended.
The following example defines a power mesh strategy named strategy1 that extends the
VDD1 and VDD2 nets in the left and bottom directions to the outermost ring, and extends
the VDD3 net in all directions.
icc_shell> set_power_plan_strategy strategy1 \
-nets {VDD1 VDD2 VDD3} -core -extension { \
{{nets: "VDD1 VDD2"} {direction: "LB"} {stop: outermost_ring}} \
{{nets: "VDD3"} {stop:design_boundary}}}
icc_shell> report_power_plan_strategy
******************************************
Report : Power Plan Strategy
Design : floorplan_init
Version: F-2011.09
Date : Mon Aug 8 14:11:34 2011
******************************************
Power Plan Strategy : strategy1
Net names : VDD
Template : default.tpl
Routing region : core area
Net Extension : -- Nets -- -- Direction -- -- Stop at --
VDD LB outermost_ring
Blockage : -- Nets -- -- Area -- -- Layer --
1
To compile the power mesh using the GUI layout window, choose Preroute > Compile
Power Plan. This opens the dialog box shown in Figure 8-20. You can also use this dialog
box in the GUI to add the power rings to your design. The dialog box lists the strategies
defined by using the set_power_plan_strategy command.
You can preview the power mesh in the GUI before committing it. Click the Strategies button
to open the Power Plan Strategies dialog box and click the Preview tab. To preview nets,
select the Layers to preview, select the Nets option in the Nets section, and select Straps or
Rings to preview them. To preview routing areas, select the Routing Areas option. An
example power mesh preview is shown in Figure 8-21.
A section of the power straps created by these steps is shown in Figure 8-22.
Figure 8-22 Simple Power Mesh
To define the strategy, begin by assigning a strategy name. Identify the routing area, net
names, extensions, and blockages required for the strategy. In this example, the top-level
power and ground net names are VDD and VSS, and the routing area is the core area. The
VDD net extends in all directions except the top; the VSS net extends in all directions. The
VDD net is blocked by the USB macro cell and the VA1 voltage area. The VSS net is
blocked only by the USB macro cell. The strategy definition is as follows:
icc_shell> set_power_plan_strategy top_strategy \
-nets {VDD VSS} -core -blockage { \
{{nets: "VDD"} {voltage_area: "VA1"}} \
{macro: USB}} \
-extension { \
{{nets: "VDD"} {direction: "LRB"} {stop: outer_ring}} \
{{nets: "VSS"} {direction: "LRTB"} {stop: outer_ring}}} \
-template mytemplate.tpl:upper_grid(50,50)
The VA1 power network contains one net, VDD1, and uses the VA1 routing area. The VDD1
net extends left, right, and top. The definition for the VA1 strategy is as follows:
The VA2 power network contains the single VDD2 power net, and uses the VA2 routing
area. The VDD2 net does not extend and is blocked by the VA3 voltage area. The definition
for the VA2 strategy is as follows:
icc_shell> set_power_plan_strategy s2_strategy \
-nets VDD2 -voltage_areas VA2 \
-blockage { \
{{nets: "VDD2"} {voltage_area: "VA3"}}} \
-template mytemplate.tpl:lower_grid(20,20)
Note that each strategy references a unique template block defined within the
mytemplate.tpl template file. Using the same template file, you can create a unique power
and ground strap configuration for each voltage area by referencing different template
blocks and specifying unique template parameters. The template file syntax is discussed in
the following section.
To implement this power plan, create two strategies: one for cells with a height of less than
150 um and one for cells with a height of more than 150 um. Use the following four steps to
create these straps:
1. Find all the macro cells with vertical pins, and divide them into two groups.
icc_shell> set vertical_pin_macros \
[filter_collection [all_macro_cells] "(orientation == S ) || \
(orientation == FS) || (orientation == N ) || \
(orientation == FN)"]
icc_shell> set cell100 [get_cells $vertical_pin_macros \
-filter height<150]
icc_shell> set cell200 [get_cells $vertical_pin_macros \
-filter height>150]
2. Create the 65nm.tpl template file with a parameter for the number of straps.
template : macro_strap(num_straps){
layer : M5 {
direction : horizontal
width : 3.0
spacing : minimum
number : @num_straps
pitch :
offset_start : boundary
offset :
align :
trim_strap : true
advanced_rule : off
}
}
The following steps create the power plan for this design:
1. Create the mytemplate.tpl template file.
template : va_strap {
layer : METAL6 {
direction : vertical
width : 10
spacing : minimum
number :
pitch : 82
offset_start : boundary
offset : 7
trim_strap : true
}
layer : METAL7 {
direction : horizontal
width : 10
spacing : minimum
number :
pitch : 92
offset_start : boundary
offset : 46
trim_strap : true
}
}
Note that the expression {stop: -half_space} defines a stopping point for the power
strap that is one half the minimum spacing distance within the voltage area. If you specify
{stop: half_space} without the minus sign, the command extends the strap to one
half the minimum spacing beyond the voltage area boundary. The minimum spacing is
defined in the technology file.
3. Compile the power plan.
icc_shell> compile_power_plan -strategy {s1 s2}
To implement this power plan, define the routing area as the macro cell boundary and create
a reduced power plan region for each of the macro cells based on the macro cell boundary.
You can extend the power straps in each direction and limit the extension to first_target.
The following steps create the template-based power plan for this design.
1. Create the mytemplate.tpl template file.
template : top_two {
layer : METAL7 {
direction : horizontal
width : 1.5
spacing : interleaving
number : 10
pitch :
offset_start : boundary
offset :
trim_strap : true
}
layer : METAL8 {
direction : vertical
width : 2.0
spacing : interleaving
number : 10
pitch :
offset_start : boundary
offset :
trim_strap : true
}
}
To implement this power plan, define the power plan strategy and compile the power plan
as follows:
icc_shell> set_power_plan_strategy s_top -core \
-nets {VDD VSS} -extension {stop: pad_ring}
icc_shell> compile_power_plan -strategy s_top
The -extension {stop: pad_ring} option extends the VDD and VSS power straps to the
pad ring and connects them. When you specify this option, power straps that extend to the
pad or core ring can use an adjacent layer for routing to avoid a power or ground strap that
is blocking the extension. This applies only when the straps extend outside the core to
connect to a core or pad ring.
During the design process, channel areas might form between adjacent macros; by default,
straps are not inserted into channels if the strap pitch does not place them there. You can
change this behavior by using advanced rule support.
To create straps in the channel area, set advanced_rule to on and set
insert_channel_straps to on in the advanced rules section. Define the layers, strap
width, spacing, and minimum channel threshold for the strap. The following template
skeleton enables channel straps that are routed using layer M5 with a strap width of 1.89
microns for channels that are 10 or more microns wide.
template : channel_strap {
layer : M5 {
direction : vertical
# additional directives not shown
}
layer : M6 {
direction : horizontal
# additional directives not shown
}
advanced_rule : on {
# additional rules not shown
insert_channel_straps : on {
layer : {M5}
width : 1.89
spacing : minimum
channel_threshold : 10
}
}
}
You can align power straps with power switches by setting the
align_straps_with_power_switch directive in the advanced_rule section to on. Specify
the power-switch name, layer, strap width, and direction for the power strap. The following
template skeleton aligns the power straps on layer ME6 with the power switches in the
vertical direction.
template : align_strap {
layer : ME7 {
direction : horizontal
width : 1.00000
spacing : minimum
number : 6
pitch :
offset_start : boundary
offset :
trim_strap : true
}
layer : ME6 {
direction : vertical
width : 2.00000
spacing : minimum
number : 12
pitch :
offset_start : boundary
offset :
trim_strap : true
}
advanced_rule : on {
align_straps_with_power_switch : on {
power_switch : HEAD16DM
layer : ME6 #strap layer
width : 2.0 #strap width
direction : vertical
}
}
}
To implement this power plan, create multiple power straps with unique individual spacing
and width values. Use a parameterized template and apply different values to the
parameters with the set_power_plan_strategy command.
2. Set the power plan strategy by using parameters to represent power strap widths.
icc_shell> set_power_plan_strategy s_top \
-nets {VDD VDD1 VDD2} -core \
-template mytemplate.tpl:nonuniform(1.0,2.0,3.0,0.5,1.5)
Power-switching
CMOS logic block using low control signal
threshold-voltage transistors
The switching strategy shown in Figure 8-32 is a coarse-grain strategy; this strategy applies
power switching to the entire block through a single control. Multiple transistors in parallel
drive a common supply net for the block. In a fine-grain strategy, each library cell has its own
power switch, allowing fine-grain control over which cells are powered down. The fine-grain
approach has better potential for power savings, but requires more area.
Figure 8-33 shows the layout view of the power-switch array used to shut down power to a
circuit block. The power-switch network controls the current flow from the permanent power
network to the virtual power network. Permanent power is a constant supply that originates
from the top-level circuit pads and virtual power is switched by the power switch.
Figure 8-33 Power Switch and Power Rails
minimizes resistance, which in turn affects IR drop. The benefits of an array-style placement
include
• Greater control over IR drop distribution
• Better optimization that allows for fewer gating cells than the ring-style method
In a ring-style approach, the tool places power-switch cells in a ring that surrounds the
shutdown voltage area. The benefits of a ring-style placement include:
• Easier power grid creation for the block
• Easier application to designs that contain hard macros, without the need for modification
inside the block. No extra cells or routing is required, with the exception of support for
retention, isolation, level shifting, and always-on logic.
• Easier connection of power and daisy chains by using abutment
A major limitation of the ring-style approach is that the IR drop impact might be unacceptable
toward the center of the voltage area as the distance increases from the power-switch cells.
The severity of the IR drop depends on the voltage area size, shape, and internal dynamic
power requirements of the block. For some designs, it might be impossible to implement a
ring-style approach without violating IR drop and inrush current requirements.
Use this command to specify the pattern direction, daisy-chain or high-fanout net connection
mode, the driver switch cell name, whether the pattern is flipped during placement and
whether the power switch cells are connected during placement. Specify a name for the
pattern with the -pattern pattern_name option and use the same pattern name when you
specify the create_power_switch_array -place_pattern command.
The command does not honor blockages or existing cells, but a warning message is issued
if the inserted cells create conflicts. The create_power_switch_ring command syntax is
as follows:
create_power_switch_ring
-switch_lib_cell lib_cell_or_power_switch
[-vertical_switch_lib_cell lib_cell_or_power_switch
[-filler_lib_cell collection_of_filler_lib_cell_names]
[-vertical_filler_lib_cell collection_of_filler_lib_cell_names]
[-outer_corner_lib_cell outer_corner_lib_cell_name]
[-inner_corner_lib_cell inner_corner_lib_cell_name]
[-area_object voltage_area_or_macro
| -polygon {list_of_points}]
[-design hierarchy_name]
[-prefix string]
[-switch_orientation N | W | S | E | FN | FE | FS | FW]
[-outer_corner_orientation N | W | S | E | FN | FE | FS | FW]
[-inner_corner_orientation N | W | S | E | FN | FE | FS | FW]
[-density switch_density | -switch_number number_of_switches]
[-offset offset_values]
[-start_point {point}]
[-end_point {point}]
[-check_overlap]
[-same_orientation]
[-respect avoid_object_types]
[-x_increment dx]
[-y_increment dy]
[-place_pattern pattern_syntax]
[-continue_pattern]
You can create a power-switch ring with each power-switch cell in the same orientation by
specifying the -same_orientation option. Use the -x_increment and -y_increment
options to control the spacing of the power switches in the ring. If the power-switch cell is a
standard cell, the command automatically snaps the cell to the nearest site row and ignores
the -switch_orientation option.
The following example creates a power-switch ring around the DOMAIN1 power domain.
The command uses the SWITCH_HEADER power-switch cell and creates a ring pattern
using the FILLER and HEADER library cells. Figure 8-34 shows the ring created by using
the command in the example.
icc_shell> create_power_switch_ring -area_object DOMAIN1 \
-switch_lib_cell SWITCH_HEADER \
-place_pattern { { FILLER HEADER FILLER } * }
When you specify more than one power-switch cell by using the map_power_switch
command, you can reference a particular cell by using the switch_name:lib_cell_name
syntax with the -switch_lib_cell option to the create_power_switch_ring command.
The following example maps two power-switch cells to the SW switch name and places the
cell_2 cell in the power-switch ring.
icc_shell> map_power_switch SW –domain VA –lib_cells {cell_1 cell_2}
icc_shell> create_power_switch_ring -area_object INST \
-switch_lib_cell SW:cell_2
You can specify unique power switch cells for placement on the vertical edges of the power
domain by using the -vertical_switch_lib_cell and -vertical_filler_lib_cell
options of the create_power_switch_ring command. Use the -inner_corner_lib_cell
and -outer_corner_lib_cell options to specify the inner and outer corner cells. For
example, the following command places the sw_h power switch cell and filler_h filler cell on
the horizontal edges of the power domain, and places the sw_v power switch cell and filler_v
filler cell on the vertical edges. You can specify multiple filler cells in decreasing priority
within the braces ({}); the highest priority filler cell that fits the space is inserted into the
power switch ring.
icc_shell> create_power_switch_ring -switch_lib_cell sw_h \
-vertical_switch_lib_cell sw_v -filler_lib_cell {filler_h} \
-vertical_filler_lib_cell {filler_v} \
-outer_corner_lib_cell corner_outer \
-inner_corner_lib_cell corner_inner \
-area_object PD1 \
-switch_number 77
You can specify a UPF strategy name together with the -switch_lib_cell and
-vertical_switch_lib_cell options. The following example uses the
map_power_switch command to create a mapping between the PD1 power domain and the
sw_h and sw_v power switch cells.
You can create the same power switch ring by using the following alternative syntax as
shown in the following example:
icc_shell> map_power_switch –domain PD1 –lib_cells {sw_h} PSW1
icc_shell> map_power_switch –domain PD1 –lib_cells {sw_v} PSW2
icc_shell> create_power_switch_ring -switch_lib_cell PSW1 \
-vertical_switch_lib_cell PSW2 \
-filler_lib_cell {filler_h} \
-vertical_filler_lib_cell {filler_v} \
-outer_corner_lib_cell corner_outer \
-inner_corner_lib_cell corner_inner \
-area_object PD1
-switch_number 77
To connect the sleep control pins on the power-switch cells in daisy-chain mode, use the
connect_power_switch -mode daisy command. In the following example, the
connect_power_switch command connects the sleep control pins by using a daisy chain.
icc_shell> connect_power_switch -source SLEEP -port_name sleep_port \
-mode daisy -direction horizontal -verbose -voltage_area { VA1 VA2 }
To control how the tool creates connections to power switch cells during fishbone mode
routing, use the mv_mtcmos_detour_obstruction application variable. Set this variable to
true to avoid creating route connections in the orthogonal direction over hard macros and
create trunk lines in the primary direction on either side of the hard macro. This reduces the
routing over the hard macro and creates better quality of results.
placement and power rail routing, you can verify that the size and quantity of the power nets
are adequate to power the design. The following sections describe the steps to perform
power network analysis on your design.
• Performing Power Network Analysis
• Creating Connectivity Views
• Performing Power Analysis With Switching Activity Information
For more information about the set_switching_activity command, see the man
page.
• Generate one or more switching activity interchange format (SAIF) files by using RTL or
gate-level simulation. Use the read_saif command to annotate the switching activity
information onto nets, pins, ports, and cells in the current gate-level design.
A SAIF file is typically generated within a simulation flow that contains a testbench. The
SAIF file contains the switching activity information organized in a hierarchical fashion,
where the hierarchy of the SAIF file reflects the hierarchy of the simulation testbench.
The following example uses the read_saif command in verbose mode to read the
data.saif file for the current design. The design appears as cpu/system_controller in the
SAIF file.
icc_shell> read_saif -input data.saif \
-instance_name cpu/system_controller
For more information about the read_saif command options, see the man page.
• Use default switching activity.
If no simulation data is available, the tool applies the built-in default toggle rate to analyze
the power consumption.
The switching activity of primary inputs and black box outputs cannot be propagated.
You can set the default toggle rate (0.1) and default static probability (0.5) for primary
inputs and black box outputs by using the power_default_toggle_rate and
power_default_static_probability variables. The default toggle rate value is the
value of the power_default_toggle_rate variable multiplied by the related clock
frequency. The clock can be specified by using the -clock option of the
set_switching_activity command. If no related clock is specified on the net, the
clock with the highest frequency is used. The default switching activity applied to these
objects is propagated throughout the design for power network analysis.
You can use the -analyze_power option concurrently with the -power_budget and the
-read_default_power_file options.
Note:
If you use the -analyze_power option concurrently with the
-read_default_power_file option, the power specified in the default power file has a
higher priority than that calculated by the -analyze_power option.
You can configure the histogram and voltage drop map display by selecting threshold
voltages and metal layers in the GUI. To select only certain metal layers for IR drop analysis,
select or deselect the check boxes in the layers box on the PNA Voltage Drop panel of the
GUI. To enter a maximum or minimum threshold value for display in the histogram and
voltage drop map, select the “Max threshold” or “Min threshold” check box and enter the
value in the text box. To limit the voltage drop bins that are displayed, select or deselect the
check boxes in the histogram box in the PNA Voltage Drop panel of the GUI. After you
change the selection for either threshold or metal layers, click the Apply button to display the
updated histogram and voltage drop map.
To use the mouse to examine the voltage drop at individual locations in the layout, click the
Query button and move the pointer onto the layout view. As you move the pointer over
different points in the layout, the layout window displays the voltage drop at that point in the
query panel in the lower-left area of the layout.
To change the net for analysis, click the Reload button and select a net name in the Net
drop-down box. Click OK to view the results in the GUI.
PAD_3 PAD_2
PAD_4 PAD_1
Use the load_fp_rail_map -nets net_name -type R command or choose Preroute >
Power Network Resistance Map in the GUI to load the map and histogram. The operation of
the GUI for changing the threshold values, histogram, metal layer selection, and query text
are similar to that for the voltage drop map; see “Displaying the Voltage Drop Map” on
page 8-73 for information about operating the GUI.
9-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
For more information about the command options, see the set_fp_clock_plan_options
man page.
To set clock plan options during floorplanning using the GUI window, first set the window
task mode to Design Planning if it is not already in that mode (File > Task > Design
Planning). Then choose Clock > Set Clock Plan Options. This opens the dialog box shown
in Figure 9-1.
Figure 9-1 Set Clock Plan Options Dialog Box
Enter the name of the clock nets on which to do clock planning in the Clock nets box. You
can type the names directly into the box, or click the browse button to the right of the box to
open a dialog box containing a list of clock nets. Enter the name of the clock buffer cell,
known as the anchor cell, to insert within the plan groups. All plan groups should use the
same buffer type. You cannot use an inverter as an anchor cell. The command inserts an
anchor cell in each plan group for each clock net that crosses the plan group boundary. The
anchor cells buffer the clock signal and isolate the top-level clock signal from the plan group
clock tree. The anchor cell is inserted inside the plan group at the center of the mass of
flip-flops that are connected to each clock net.
In the Route mode box, select Global route or Detailed route to route the top-level clock nets
after clock planning. The command creates clock pins and assigns a location where the
route crosses the plan group boundary. In the Output directory box, enter an alternate
directory name in which to write out all constraint files, log files, and generated reports from
clock planning. The default directory is cp_output. Select Keep block level tree to keep the
block-level tree after running the compile_fp_clock_plan command. By default, the
command removes the block-level clock tree after clock planning is complete.
Click the Set Clock Tree Options button to enter Interclock Delay Options, Clock Tree
References, Clock Tree Exceptions, Clock Tree Options, Optimize Pre-CTS Power Options,
and Clock Tree Optimization Options. You can also specify these options with the
set_inter_clock_delay_options, set_clock_tree_references,
set_clock_tree_exceptions, set_clock_tree_options,
set_optimize_pre_cts_power_options, and set_clock_tree_optimization_options
commands.
After setting the clock plan options, you can use the report_fp_clock_plan_options
command to report the settings. If no clock plan is set, the command reports the default
values. To reset the clock plan option settings, use the reset_fp_clock_plan_options
command.
For more information about the command options, see the compile_fp_clock_plan man
page.
To compile the clock plan during floorplanning by using the GUI window, first set the window
task mode to Design Planning if it is not already in that mode (File > Task > Design
Planning). Then choose Clock > Compile Clock Plan. This opens the dialog box shown in
Figure 9-2.
After you generate the clock tree with the compile_fp_clock_plan command, you can
generate detailed information for the clock trees in your design using the
report_clock_tree command. To generate the clock report using the GUI window, choose
Clock > Report Clock Tree. For more information about the clock tree report, see the IC
Compiler Implementation User Guide.
• Clock source latency is the time a clock signal takes to propagate from its ideal waveform
origin point to the clock definition point in the design.
Example:
icc_shell> set_clock_latency 2 -source -max -rise [get_clocks CLK]
Figure 9-3 shows a design example with clock network latency and clock source latency.
clk
Plan Group 2
clk
clk
Source Latency
Network Latency
Plan Group 1
• Clock signal for a register that captures a signal (use two underscores):
clockname__v__out
Note:
To minimize the number of virtual clocks, only the worst-case clock latency is created for
all input and output pins of plan groups initiated or captured by a virtual clock.
Figure 9-4 shows a virtual clock example.
• In plan group 1, the name of the input path is in1.
Top-level flip-flop A, which is clocked by clk1__v__in, has source latencies only.
in2 C
clk2
clk1__v__out Plan Group 2
clk
in1 out1
A B
clk1__v__in clk1
Source Latency
Network Latency
clk2__v__in Plan Group 1
Data Latency
isolates both plan-group-level clocks and voltage areas from the top-level clocks. Note that
feedthroughs created during clock planning might not honor the voltage area constraints for
all blocks in multivoltage domains.
To perform plan-group-aware clock tree synthesis during clock planning with fully abutted
floorplans, set the cp_full_abut_cts_region variable to true.
supply rails can cause electromigration problems. To help prevent such problems, use the
set_clock_cell_spacing command, which ensures a minimum distance between clock
cells.
After clock tree synthesis has been completed, you can check for excessive local power
usage with the report_tile_power command. In the command, you specify the name of
the power or ground net to be analyzed, the supply voltage, the maximum allowable current
in the rails connected to standard cells, and the layer name of the rail if it is not the first metal
layer. For example,
icc_shell> report_tile_power -net VSS -current_budget 0.08 \
-voltage_supply 0.90 -guard_band_ratio 0.95
This command requests a chip power analysis of the VSS (ground) net, with the supply
voltage at 0.90 volts and a maximum rail current of 0.08 mA. An optional guard band ratio
further restricts the allowable maximum current to 95 percent of the nominal limit.
To determine whether this power constraint is met, the tool divides the standard-cell area
into units called power tiles. Each power tile consists of a set of standard cells supplied by a
segment of a power rail, extending from one via to another via, or from a via to the end of
the row. It then calculates the power consumed by all cells in the tile and compares this
value with the specified maximum current, subject to adjustment for the number of vias
associated with the rail segment and the guard band setting.
For each tile that exceeds the maximum allowable power, the command reports the total
power used in the tile, the total power budget for the tile, and the lower-left and upper-right
coordinates of the tile rectangle. For example,
icc_shell> report_tile_power -net VSS -current_budget 0.08 \
-voltage_supply 0.90 -guard_band_ratio 0.95
...
Net : VSS
Supply Voltage : 0.900
Current Budget : 0.076
Standard Cell Rail Layer : METAL1
Power (mW) Power Budget (mW) Tile Bbox
-----------------------------------------------------------------
1.639e-01 1.368e-01 {{430.280 392.535} {482.300 399.915}}
1.639e-01 1.368e-01 {{639.370 392.535} {691.390 399.915}}
1.574e-01 1.368e-01 {{430.280 392.845} {482.300 400.225}}
1.710e-01 1.368e-01 {{639.370 392.845} {691.390 400.225}}
1.513e-01 1.368e-01 {{586.840 407.295} {639.370 414.675}}
1.575e-01 1.368e-01 {{586.840 407.605} {639.370 414.985}}
9.361e-02 6.840e-02 {{149.735 422.055} {731.350 429.435}}
9.342e-02 6.840e-02 {{150.790 422.365} {731.350 429.745}}
7.616e-02 6.840e-02 {{691.390 702.495} {731.350 709.875}}
7.254e-02 6.840e-02 {{691.390 702.805} {731.350 710.185}}
-----------------------------------------------------------------
Number of power tiles exceeding budget : 10
The two different power budget values shown in the table represent the budgets for
single-via and two-via power tiles.
For more information about the report_tile_power command and its options, see the man
page for the command.
Power Tiles
A power tile typically consists of two rows of standard cells supplied by a single power or
ground rail extending between two vias, as shown in Figure 9-5. In this example, the ground
current is shared between two via connections, one at each end of the power tile. The
presence of two vias, one at each end of the tile, increases the total current that the rail can
handle.
Figure 9-5 Power Tile With a Via at Each End
VSS
VSS
VSS
current current
VDD
Power tile height =
2 rows supplied by rail
A power tile can also consist of the standard cells extending from a via to the end of the row,
without a via at the other end of the tile, as shown in Figure 9-6. In that case, the rail must
be able to handle all of the current for the power tile where it connects to the single via.
Figure 9-6 Power Tile With a Single Via
PT = IB VR NV G
Where PT is the maximum allowable power of the tile, VR is the rail voltage, IB is the
budgeted maximum current for the rail, NV is the number of via connections to the power rail
in the tile (typically 2), and G is an optional guard band ratio specified in the
report_tile_power command. The default guard band ratio is 1.0.
For example, suppose that you specify the analysis for ground rails as follows:
icc_shell> report_tile_power -net VSS -current_budget 0.08 \
-voltage_supply 0.90 -guard_band_ratio 0.95
For a power tile with a via at each end, the maximum allowable power of the tile is:
PT = (0.08 mA) x (0.90 volts) x (2) x (0.95) = 0.1368 mW
For a power tile with a via at just one end, the maximum allowable power of the tile is:
PT = (0.08 mA) x (0.90 volts) x (1) x (0.95) = 0.0684 mW
When you execute the report_tile_power command, the tool divides the standard cell
rows into power tiles according to the type of power rail (VDD or VSS) and the locations of
vias on those rails. Then it calculates the total power of each tile by adding up the power
used by each standard cell within the tile. If a standard cell extends beyond the end of the
tile, only the power corresponding to the fraction of the cell’s area within the tile counts
toward the total power of the tile.
VDD
VSS
VSS
higher-level metal layer
VDD
current current current current
VSS
VDD
The optimization process starts with the most significant changes on multiple violation paths
that will quickly improve overall timing. Next, the scope is narrowed to focus on individual
paths. Netlist changes are committed only if the timing improves. The output is a legally
placed netlist that is plan group aware.
Three types of optimizations are performed: timing improvement, area recovery, and fixing
timing design rule violations. These optimizations preserve the netlist’s logical hierarchy,
and the physical locations of most cells change as little as possible.
10-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
For more information about the command options, see the optimize_fp_timing man
page.
To perform in-place timing optimization using the GUI layout window, first set the window
task mode to Design Planning if it is not already in that mode (File > Task > Design
Planning). Then choose Timing > In Place Optimization. This opens the dialog box shown in
Figure 10-1.
Figure 10-1 In Place Optimization Dialog Box
Select Add buffers for feedthrough nets only to skip timing optimization and only insert
buffers on feedthrough nets. Use this option only after performing pin placement with the
place_fp_pins command as described in “Performing Pin Assignment on Soft Macros and
Plan Groups” on page 11-7. You can use this option to minimize design changes at the late
stages of design planning. The tool selects medium-sized buffers and inserts them near
each pin (port) location. During the optimization phases, in-place optimization might resize
or move these buffers. The buffers are added in the same hierarchy as the plan groups.
Select Perform high fanout synthesis optimization to skip timing optimization and perform
only high-fanout synthesis (HFS) on the design. You can combine this option with the Don't
add any new cells at top level option when implementing fully abutted or narrow channel
designs. Use this option, or the -hfs_only option with the optimize_fp_timing command,
to perform normal high-fanout synthesis. For incremental high-fanout synthesis, specify the
set_ahfs_options -incremental true command before running the
optimize_fp_timing –hfs_only command. Note the following limitations for the regular
and incremental high-fanout synthesis flows:
• Regular high-fanout synthesis is commonly used for the default flow
• Incremental high-fanout synthesis is required for the exploration flow to reduce runtime
• Regular high-fanout synthesis in the exploration flow is not well suited for analyzing the
clumped placement of pre-existing buffers
• Incremental high-fanout synthesis does not analyze preexisting buffers and their
placement
• Incremental high-fanout synthesis is optional for the regular high-fanout synthesis flow
These guidelines are based on the following QoR metrics: worst negative slack (WNS), total
negative slack (TNS), design rule check (DRC), and runtime.
Select High in the Effort row under Optimize timing if you want to use additional CPU time to
improve the timing of the design. By default, the tool uses Medium effort.
Select Fix design rules violations to repair violations during timing optimization. Design rule
violations, such as maximum transition time, maximum capacitance, and maximum fanout,
are repaired by inserting buffers, resizing gates, and performing high-fanout net synthesis
for medium- and high-fanout nets. When you run in-place optimization before global routing,
the routing and interconnects are preliminary and only major design rule violations are fixed.
After you finish global routing, optimization takes longer to run, but the results are based on
more accurate layout information.
Select Enable area recovery to apply additional processing time to reduce the cell area
without causing timing violations. The tool optimizes the area by removing some cells and
decreasing the size of other cells on timing paths with positive slack. Area recovery can
create additional die area that can be used for optimization of critical paths. Note that this
option might increase the timing delay on some noncritical timings paths, if the path does not
violate timing. For example, if the path has positive slack, area recovery might reduce this
slack to zero. Area recovery does not cause nonviolating paths (paths with nonnegative
slack) to become violating paths. Designs with high utilization benefit from area recovery,
but at the cost of higher runtimes.
Select Keep global routes to prevent the tool from discarding global route information after
timing optimization. Select Don't add any new cells at top level to prevent the tool from
inserting new cells at the top level of the design; this option is useful on fully abutted and
narrow channel designs.
Select Report quality of results to display additional information regarding the worst negative
slack (WNS) and total negative slack (TNS) of the design, the utilization percentage of each
plan group and top level, the number of buffers added, and the number of cells sized for
each plan group and top level. An example quality of results report is as follows:
========== fpopt report ==========
-- timing --
WNS = 0.04 CLOCK = SYS_CLK PERIOD = 8.00
TNS = 0.00
-- utilization --
top utilization is 76.06
-- buffer added and sized --
total 0 plan groups
top level: added 0 new buffers sized 0 cells
1
Note:
To check if a design is in trace mode, use the get_fp_trace_mode command.
In trace mode, the tool considers only the top-level and interface paths, even though the
entire design is loaded.
When trace mode timing is used in a flat design with plan groups defined for soft macros,
trace mode selectively filters paths by tracing only the nets and cells of timing paths at the
top level which cross plan group boundaries. Accordingly, the report_clock_timing
command reports only the timing violations on those paths. By using trace mode timing
analysis, you can detect and fix these timing violations in the early phases of the design flow.
This enables faster timing analysis by focusing on interface nets.
During the trace mode in-place optimization stage, only the interface logic or interface logic
plus top-level logic is optimized. This results in good QoR and might improve runtime.
Figure 10-2 illustrates the top-level, internal, and interface paths for trace mode timing.
Figure 10-2 Top-Level, Interface, and Internal Paths for Trace Mode Timing
Top
Top-level paths
Interface paths
Internal paths
icc_shell> report_fp_trace_mode_options
Trace mode is set with following options:
interface : included
top : not included
verbose : off
1
along paths that violate timing. Before using the virtual_ipo command in the exploration
flow, you should first add buffers on feedthrough nets by specifying the
optimize_fp_timing –feedthrough_buffering_only command before you run the
virtual_ipo command.
To remove timing data after performing virtual in-place optimization, use the virtual_ipo
-end command, which removes all back-annotation data inserted during the previous virtual
in-place optimization run. This operation is required after you have performed timing closure
using virtual in-place optimization, before proceeding to physical optimization. The virtual
in-place optimization flow is shown in Figure 10-3.
Figure 10-3 Virtual In-Place Optimization Flow
virtual_ipo
Timing Analysis
report_timing
virtual_ipo -end
For more information about virtual in-place optimization, see “Virtual In-Place Optimization”
in Chapter 6.
11-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Pin constraints set with the set_fp_pin_constraints command are honored during pin
assignment on soft macros and plan groups. Pin assignment constraints are saved in the
Milkyway database.
The following command sets a pin placement constraint that allows the creation of
feedthrough ports on plan groups and soft macros. Bus bits are grouped together.
icc_shell> set_fp_pin_constraints -allow_feedthroughs on \
-keep_buses_together on
icc_shell> report_fp_pin_constraints
report_fp_pin_constraints
------------------------------------------
Pin assignment options for plan group "U1":
Min layer for PG pins is metal2
Max layer for PG pins is metal6
Number of wire tracks between pins: 1
Number of wire tracks between preroutes and pins: 3
Allow overlapping pins on different layers
Soft constraint for pin-pin spacing
Soft constraint for pin location
Soft constraint for pin layer
No pins at the corners for 5 wiretracks
Create feedthrough ports
Consider internal placement.
Don't create EEQ pins
Don't retain movable pins
Physical constraints are in effect.
Specify the name of the soft macro or plan group on the command line to report pin
constraints for a specific soft macro or plan group.
icc_shell> report_fp_pin_constraints BLOCK1
Specify the -block_level option to report pin constraints for only the top level of the current
design.
icc_shell> report_fp_pin_constraints -block_level
The following report shows that pins connected to nets datain_01, dataout_02, dataout_03,
data_internal1_06, data_internal2_04, and data_internal2_05 are excluded from placement
by the place_fp_pins command.
icc_shell> report_fp_pin_constraints
------------------------------------------
Pin assignment options for plan group "PG1":
Min layer for PG pins is metal2
Max layer for PG pins is metal8
... more messages ...
List of 6 nets excluded from pin placement:
datain_01 data_internal2_04
dataout_02 data_internal2_05
dataout_03 data_internal1_06
If a conflict arises between the individual pin constraints and the global pin constraints, the
individual pin constraints have higher priority. You can combine the -nets and -cell
options in the same command line. The constraints are stored in the Milkyway database. For
more information about the command options, see the set_pin_physical_constraints
man page.
The following example sets individual pin placement constraints on the datain_1 and
dataout_1 pins for the current design. The pins can be placed on layers metal3 and metal4.
The datain_1 pin is restricted to side 1, which is the bottommost left side of the module. The
dataout_1 pin is restricted to side 3.
icc_shell> set_pin_physical_constraints -pin_name { datain_1 } \
-layers { metal3 metal4 } -side 1
icc_shell> set_pin_physical_constraints -pin_name { dataout_1 } \
-layers { metal3 metal4 } -side 3
You can define constraints for specific plan group and soft macro pins in your design by
combining the -cell and -pin_name options of the set_pin_physical_constraints
command. The following example applies pin constraints to the datain_1 and dataout_1 pins
of the mod1 plan group. If you do not specify the -cell or -nets options, the constraints are
applied to the top-level pins.
icc_shell> set_pin_physical_constraints -pin_name { datain_1 } \
-cell mod1 -layers { metal3 metal4 } -side 1
icc_shell> set_pin_physical_constraints -pin_name { dataout_1 } \
-cell mod1 -layers { metal3 metal4 } -side 3
You can load a file containing set_pin_physical_constraints commands and apply the
constraints to a specific block by using the read_pin_pad_physical_constraints
command. The following example reads the pinconstraints.tcl file and applies the
constraints to the block1 plan group.
icc_shell> read_pin_pad_physical_constraints \
-cell block1 pinconstraints.tcl
If multiple I/O cell pins are assigned to the same pin connection, the tool creates electrically
equivalent terminals at the corresponding I/O cell pin locations. Except for bump cell pins,
an error occurs if the port to I/O cell pin connection is not one-to-one. Terminal placement
honors any specified physical pin constraints.
The pin assignment results are stored at the child level within the cell reference. If you open
a child cell after pin assignment and then close it without saving it, the pins are also
discarded.
By default, the place_fp_pins command performs global routing during pin placement.
You can run global routing and pin placement as separate steps by running the
route_zrt_global command, followed by the place_fp_pins -use_existing_routing
command. The -use_existing_routing option directs the command to perform pin
placement on plan groups by using the global routes from the previous run of
route_zrt_global.
Figure 11-1 shows the pin placement flow where you set global routing constraints and
perform global routing as separate steps.
Figure 11-1 Pin Placement Flow With Global Routing
Set pin assignment constraints
set_fp_pin_constraints
Set the Zroute common route option to perform plan-group-aware routing by using the
set_route_zrt_common_options command as follows.
icc_shell> set_route_zrt_common_options -plan_group_aware all_routing
If you specify the -plan_group_aware common route option, the Zroute global router
becomes plan-group-aware. The Zroute global router reads the plan group definitions and
honors the pin placement constraints placed on the plan groups. The all_routing keyword
routes all the nets in the design and preserves the hierarchy and pin constraints for the pin
placement flow.
If you specify the set_route_zrt_common_options -plan_group_aware off command,
the Zroute global router ignores the plan groups and routes the design as flat. The default is
off.
Figure 11-2 shows an example of plan-group-aware global routing and pin assignment. The
picture on the left shows pins placed at the boundaries where the routes intersect the plan
group boundaries, as shown by the areas that are circled. The picture on the right shows the
actual pins created at the boundaries of the soft macros, as shown by the areas that are
circled. These are the exact locations where the routing crosses those boundaries.
Another technique to increase the speed of the global router is to use fast exploration mode
by specifying the -exploration true option to the route_zrt_global command. The
global router runs in a lower-effort mode that requires less processing time. Use the
congestion map to identify routing congestion hotspots.
icc_shell> route_zrt_global -exploration true
place_fp_pins
[[-block_level] [-effort low | high] |
-use_existing_routing]
[-include_flip_chip_style_connections]
[-retain_bus_naming]
[-verbose]
[-create_voltage_area_feedthroughs]
[-minimum_feedthrough_length route_length]
[soft_macros_or_plan_groups]
You can include plan group, black box, and soft macro reference names on a single
command line and perform pin placement in a single iteration by using the place_fp_pins
command. After performing pin placement, you can change the pin constraints and perform
an iterative pin placement.
The following example places the pins for the pg1 and pg2 plan groups. The -effort high
option specifies that the place_fp_pins command performs global routing in exploration
mode before placing the pins. By default, flyline routing is used for pin placement.
icc_shell> place_fp_pins -effort high [get_cells {pg1 pg2}]
Figure 11-3 shows a layout before and after pin placement by using the place_fp_pins
command.
Figure 11-3 Pin Placement on Plan Groups
Before plan group pin placement After plan group pin placement
Block-level pin assignment considers the cell placement, internal connections, and pin
constraints inside the soft macro cell.
The commit_fp_plan_groups command reports the plan groups converted to soft macros
and the number of pins converted for each plan group. The command also checks the
Milkyway database for any nets with the “clock” net type and assigns the pin slots for the
clock nets first. If no clocks are detected by pin placement during commit hierarchy, a
warning message is issued saying that no clock nets were found.
The following example uses the align_fp_pins command to improve the alignment of the
mod2 soft macro pins with respect to the mod3 soft macro.
icc_shell> align_fp_pins -reference mod3 [get_pins "mod2/*"]
Figure 11-4 shows the mod2 and mod3 soft macros before and after pin alignment.
The command moves the pins to remove the overlap without creating a spacing violation.
Fixed pins are not moved by the remove_fp_pin_overlaps command.
The following command removes overlaps on pins for the mod2 module.
icc_shell> remove_fp_pin_overlaps -pins [get_pins "mod2/*"]
Figure 11-5 shows two pins before and after overlap removal by using the
remove_fp_pin_overlaps command.
Note:
Pin overlap removal might fail if insufficient routing tracks are available or the pin
placement is overconstrained. Look for error messages in the console window after
performing this operation.
Net_name2:
{obj_type obj_name properties} {obj_type obj_name properties}
{obj_type obj_name properties} {obj_type obj_name properties}
...
Signal*:
{obj_type obj_name properties} {obj_type obj_name properties}
{obj_type obj_name properties} {obj_type obj_name properties}
RegPort[*]:
{obj_type obj_name properties} {obj_type obj_name properties}
{obj_type obj_name properties} {obj_type obj_name properties}
In the preceding example, block_name is the name of a plan group, soft macro, or black box
in your design, and obj_type can be Block, Pin, or Port. The Feedthrough and
NoFeedthrough keywords allow or prevent feedthrough routing through specified plan
groups, soft macros, and black boxes in your design. obj_name is a plan group, soft macro
or black box name, a top-level port name, a port name, or a pin name for an I/O pad. You
can use an asterisk (*) as a wildcard character to create a feedthrough definition for more
than one net at a time. You can also specify multiple net names within braces ({Net_name3
Net_name4 Net_name5}) for the same feedthrough definition.
The optional properties data contains additional information for each feedthrough.
Table 11-1 lists the supported property keywords and datatypes.
Table 11-1 Supported Feedthrough Object Properties
Keyword Datatype
side integer
offset float
Note that the offset keyword cannot be used when you specify multiple nets by using
wildcards or multiple net names within braces. The following example defines the side,
offset and layers for the feedthrough in block2.
{Block block2 side 2 offset 100 layers {M3}}
The Feedthrough and NoFeedthrough keywords specify which plan groups, soft macros, or
black boxes the feedthrough net can pass. The feedthrough net can route through any of the
blocks specified by the Feedthrough keyword and cannot route through any of the blocks
specified by the NoFeedthrough keyword. To force a feedthrough on a block, specify the
Block keyword.
For example, the following feedthrough map file specifies that, for the DATA[0] signal,
feedthroughs can be created on blocks A and B and cannot be created on blocks C and D.
DATA[0]:
{Feedthrough A B}
(NoFeedthrough C D}
If the feedthrough map file contains a duplicate specification for a net, the tool uses the last
constraint in the file for that net. Note that nets that are not listed in the feedthrough map file
obey the current pin assignment constraints set by using the set_fp_pin_constraints
command. In addition, any feedthrough specification in the feedthrough map file takes
precedence over the set_fp_pin_constraints constraint settings.
You can provide only a partial specification for a feedthrough net. You are not required to
specify all connections along the route. Use the Block, Pin, or Port keywords to specify
only a portion of the feedthrough route. The tool creates feedthrough pins and completes the
route, even if the connections are not specified in the feedthrough map file.
Figure 11-6, Figure 11-7, and Figure 11-8 show example topologies and the control files
needed to produce the feedthrough topology. Note that Figure 11-7 illustrates a pairwise
constraint which specifies that the tool create a feedthrough on BlockB and a net connection
between blocks BlockA, BlockB, and BlockC. The tool connects the source to the target for
each pairwise constraint, regardless of any other feedthrough settings or constraints.
Figure 11-6 Feedthrough Topology Example 1
NetA
BlockA BlockC
BlockB
NetA:
{block BlockA} {block BlockB}
BlockA BlockC
BlockB
NetA:
{block BlockA} {block
or
NetA:
NetA
in
A BlockC
BlockB
NetA:
{port A} {block BlockB}
Note that you should specify a mapping file that does not over constrain the tool, which
might degrade the QoR. Also, do not mix the Feedthrough and NoFeedthrough keywords
with the Block, Port, and Pin keywords within the same net specification.
Use the following command to specify a mapping file named feedthroughs.txt that contains
the feedthrough configuration for the current design.
icc_shell> set_fp_pin_constraints -allow_feedthroughs on \
-read_feedthrough_map on -feedthrough_map_file feedthroughs.txt
When you run the preceding command, the place_fp_pins command reads the
feedthrough constraints from the file named feedthroughs.txt in the current working
directory.
The following example writes feedthrough mapping information containing block, side, offset
and layer constraints for plan groups and soft macros to the ftoutput.txt file.
icc_shell> report_fp_feedthroughs \
-write_feedthrough_map {blocks side offset layer} \
-block_type {plan_groups soft_macros} \
-feedthrough_map_file ftoutput.txt
To generate a table that lists the connectivity details for each feedthrough, use the
report_fp_feedthroughs -write_connectivity_detail -block_type block_type
command. By default, the command writes out a file named connectivityDetailOut. You can
specify the name of the output file by using the -connectivity_detail_file option. The
specified file lists the feedthrough driver, feedthrough load, feedthrough path, and number of
logical and physical connections for each feedthrough. The following
report_fp_feedthroughs command writes out the feedthrough connectivity details for the
soft macros in the design:
icc_shell> report_fp_feedthroughs -block_type soft_macros \
-write_connectivity_detail \
-connectivity_detail_file connectivity.txt
icc_shell> sh cat connectivity.txt
NAME NODE(LOG) DRIVER LOAD(s) CATEGORY NODE(PHYS) PATH
Clk 2 Dp Alu CUT 2 Dp>Alu
PSW[0] 1 Dp Alu,Alu CUT 2 Dp>Alu
PSW[2] 1 Dp Alu CUT 2 Dp>Alu
n939 2 Alu Dp CUT 2 Alu>Dp
Alu_Carry 2 Alu Dp CUT 2 Alu>Dp
Alu_Neg 2 Alu Dp CUT 2 Alu>Dp
Oprnd_A[2] 2 Dp Alu CUT 2 Dp>Alu
Oprnd_A[1] 2 Dp Alu CUT 2 Dp>Alu
Oprnd_A[13] 2 Dp Alu FEEDTHRU 2 Dp>Alu
Oprnd_B[5] 2 Dp Alu CUT 2 Dp>Alu
Oprnd_B[14] 2 Dp Alu FEEDTHRU 2 Dp>Alu
Op_Result[15] 2 Alu Dp FEEDTHRU 2 Alu>Dp
Op_Result[5] 2 Alu Dp CUT 2 Alu>Dp
Note:
Pin and feedthrough routing is highly dependent on both pin constraints and the quality
of the global routing.
If your design has terminals or I/O cells that overlap plan groups, you must use the
place_fp_pins -include_flip_chip_style_connections command to properly
create feedthroughs for all terminals.
After feedthrough creation, you can perform the following types of analysis on the pins in
your design.
• Explore top-level nets and nets that cross between plan groups or soft macros. Click the
“Explore” tab in the GUI to access this function.
• Perform detour analysis and rank nets by detour severity. Click the “Detour” tab in the
GUI to access this function.
• Check pin alignment on soft macro pins. Click the “Pin Alignment” tab in the GUI to
access this function.
• Perform pin assignment checks and view the results in the layout. Click the “Pin
Assignment” tab in the GUI to access this function.
You can remove the feedthrough ports and nets that exist in your design, including those
created by other tools, from all soft macros, plan groups, and voltage areas. You can also
remove feedthrough ports, nets, and buffers by net name or block name.
For pure feedthroughs, the tool removes all ports and the child-level net. For regular
feedthroughs, one port remains as well as the child-level net.
When the tool removes a feedthrough port, the tool also deletes all the pins of that port. The
tool reconnects the nets for which feedthroughs are removed at the parent level of the logic
hierarchy.
The command uses the routing information from the global router to insert feedthroughs at
the points where a net crosses the voltage area boundary.
Note:
If your design has terminals or I/O cells that overlap voltage areas, you must use the
create_voltage_area_feedthroughs -include_flip_chip_style_connections
command to properly create feedthroughs for all terminals.
multiply instantiated module set to avoid conflicts and potential problems during
plan-group-aware routing, and pin placement during commit hierarchy. If an instance of a
multiply instantiated module set has different pin assignment constraint settings, a warning
message is issued during the set_fp_pin_constraints step.
Note:
No feedthroughs are allowed for multiply instantiated modules.
Note:
If you do not select a master instance before committing the hierarchy, the
commit_fp_plan_groups command issues a warning and randomly chooses the first
multiply instantiated module instance as the master instance.
You can create pin guides on soft macros, plan groups, or the current top-level cell to control
the placement of pins or ports on soft macros or plan groups. The tool creates pin guides
based on net names or pins names. The place_fp_pins command determines the best
location for the pins constrained by the pin guide.
Note:
Pin guides must intersect the module boundary in one contiguous area. Multiple
intersections imply that you want a feedthrough on the net. If there are two or more
external connections for the net, it is interpreted as a “real” feedthrough, that is, one of
the ports is the original port on the block, and the other is the new port.
The routing for the nets that have ports associated with the pin guides is constrained to
cross the corresponding soft macro or plan group boundaries through the interior of the pin
guide. As a result, pin assignment honors the pin guide regions and places pins within the
corresponding plan group or soft macro edge segment. If the pin guide overlaps more than
one edge of the soft macro, the router can choose to go through any edge segment that
overlaps that pin guide.
The pin guide is a polygon associated with a group of ports or pins and the overlapping plan
group or soft macro. Only one pin guide can be associated with any given pin on a soft
macro or plan group. If the pin guide does not overlap any soft macro or plan group, or if it
does not have any ports associated with it, it is disregarded during routing and pin
assignment.
The following command creates a rectilinear pin guide that constrains the pins connected to
the nets “data_internal*”. The pin guide intersects three plan groups: mod1, mod2, and
mod3. The coordinates {260 250} {292 250} {292 300} {390 300} {390 355} {260 355} and
{260 250} outline the pin guide.
icc_shell> create_pin_guide -name {pg1} \
-boundary {{260 250} {292 250} {292 300} {390 300} {390 355} \
{260 355} {260 250}} -parents {mod1 mod2 mod3} \
[get_nets data_internal*]
Figure 11-10 shows the design with pins placed by using a pin guide created by the previous
create_pin_guide command. The pin guide rectilinear region is highlighted.
port and the other side is a “regular” (connected) feedthrough. To ensure that the
connectivity of the feedthrough is clear, the pin guide shape should touch the port, plan
group, or soft macro that is connected to the net.
To generate feedthroughs that honor pin guides,
• Enable feedthrough creation by running the set_fp_pin_constraints
-allow_feedthroughs on command.
• Add the feedthrough block to the list of parent objects by specifying the
create_pin_guide -parents object command when creating the pin guide.
The IC Compiler tool supports the rectilinear feedthrough guide shapes shown in
Figure 11-12.
Figure 11-12 Rectilinear Feedthrough Pin Guide Shapes
The following example checks the pin assignment in the current design for pin spacing
violations by using the check_fp_pin_assignment -pin_spacing command.
icc_shell> check_fp_pin_assignment -pin_spacing
******************************************************************
Report: check_fp_pin_assignment
Design: top
Version: E-2010.12
Date: Tue Oct 5 16:34:29 2010
******************************************************************
-------------- Start Of Pin Spacing Checks -------------
Error: Pin to pin spacing constraints violated in soft macro "mod2":
1:pin "dataout_02" connected to net "data_internal2_02"
BBOX: (351.0500 251.7500) (351.1500 251.8500)
2:pin "dataout_01" connected to net "data_internal2_01"
BBOX: (351.1000 251.7500) (351.2000 251.8500)
-------------- End Of Pin Spacing Checks -------------
{mod2/dataout_01 mod2/dataout_02}
You can view a list of nets with pins that are not optimally aligned by pin assignment. The
list displays the total number of two-connection nets among the specified nets that have at
least one of their two connections inside a soft macro. The command also reports the
number and percentage of misaligned nets among the two-connection nets.
The following example lists pins in the design that have a detour tolerance greater than 10
percent. The following pin detour report displays the nets where the bounding box of the
standard cell macro pins on the net is smaller than the bounding box of all standard cells and
soft macros on the net.
12-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
By providing feedback on design and timing information, the timing checking analysis tool
can help you determine the feasibility of your design and its timing constraints.
You can generate a report file that contains additional design information for validating the
budgets assigned to each block in your design. You can use this report to analyze why
certain budgets are assigned to each block port and to debug the budgets generated by the
IC Compiler design planning timing budgeter.
The design information in the report file includes, but is not limited to, clocks in the design,
timing constraints in the design, timing exceptions in the design, delay distribution on the
worst timing path through the block ports, pins tied high or low, high negative slack on the
timing path, and so on.
To generate a pre-budgeting timing analysis report file,
1. Choose Timing > Floorplan Timing Environment Check.
The Timing Environment Analysis Options dialog box appears.
Alternatively, you can use the check_fp_timing_environment command.
2. Select the Budgeting Analysis tab. This is the default.
3. Enter the hierarchical cell name or plan group name and the pin names on which to apply
the budgeting analysis.
4. Select the options to use for performing budgeting analysis. The options you specify
determine the type of information that is written to the output report file.
5. Show reports on one or more of the following:
❍ Block pin statistics – For each block, prints the number of hierarchical pins that can
and cannot be budgeted and the total number of pins on the block. A hierarchical pin
is budgeted if timing constraints or exceptions are propagated to it. The default is on.
❍ Unbudgetable pins – Reports why pins cannot be budgeted. The default is on. A
hierarchical pin might not be budgeted for the following reasons:
The pin is not connected to a net.
The pin is not connected to a top-level net, but is connected to an internal net.
The pin is not connected to an internal net, but is connected to a top-level net.
Only fixed delay exists on one side of the pin. (There is nothing to budget, although
there is an input or output delay constraint on these pins.)
Timing paths through pins are not constrained.
The pin is constrained by a user-defined budget.
❍ Static logic pins – For each block to be budgeted, lists the pins that are set to a static
logic state as a result of a case analysis statement. It reports if a block pin is tied high
(1) or low (0) by a power or ground net in the logical netlist. It also reports if a block
pin is set to a specific state by set_case_analysis, set_logic_one, or
set_logic_zero constraints. The default is on.
❍ Number of pin connections – Reports the number of pin connections from the
startpoint and the endpoint of the timing paths going through one block to other
blocks, through top-level standard cells, through pad cells, through top-level ports,
and through ports on the plan group.
Enter the number of pin connections to display for each type of net connection. The
default is 1.
❍ Delay violating cells – Lists the top-level cells of interface paths that have cell delays
greater than the specified percentage of the captured clock period. It traverses all the
critical paths per clock domain through the block pin.
The percent argument is required and must be greater than or equal to zero.
❍ Report to file – Prints the report to an output file in a single-line format. Enter the
name of the output file. The default is off.
❍ Output in table format – Formats the report in a table. If the report is in a table, it is
easier to read, but it might be difficult to parse using automated scripts. The default is
off.
6. Select the Timer and Bottleneck Analysis tab to generate timing and bottleneck reports.
You can show timing and bottleneck reports on:
❍ Zero wire delay – Performs zero wire delay analysis and reports the negative-slack
paths that have slack less than the negative percentage of the captured clock period.
This enables timing analysis in a special mode in which the wire delays are set to
zero. The default is off.
Specify a slack limit. The slack limit is the threshold percentage of the end clock
period for each negative-slack path. A timing path is printed in the output report file if
its slack is less than the negative percentage of the path’s captured clock period.
❍ Virtual IPO – Reports timing analysis results based on virtual in-place optimization.
The default timing report from this option uses a slack threshold of zero. The default
is off.
Specify a slack limit for the timing paths in the virtual in-place optimization timing
report. Only paths that have slack less than the slack percentage of the capture clock
period are reported.
❍ Bottleneck cells – Reports bottleneck cells. It lists the cells in the design that
contribute to multiple timing violations. It lists the leaf cell, its reference, and the
number of paths through the leaf cell that have timing violations. Based on this report,
you can check the fanin and fanout logic to determine the possible cause of the timing
bottleneck. The default is off.
❍ Run Virtual IPO – Disable this option if you do not want virtual in-place optimization
to run before reporting bottleneck cells. The default is to run virtual in-place
optimization.
❍ Slack limit – You can specify the slack limit for reporting bottleneck cells only. Only
timing paths having slack less than the slack limit are explored to locate bottleneck
cells. The default is 0.
❍ Maximum number of cells – You can specify the maximum number of bottleneck cells
to report. This allows you to limit the number of bottleneck cells reported for a design.
The default is 20.
❍ Maximum number of paths – You can optionally specify a maximum number of paths
to report.
7. Click OK.
The following information is printed in the report file for the whole design:
• Negative-slack paths based on zero wire delay
• Bottleneck cells
• Timing report based on virtual in-place optimization
The remainder of the report is divided by soft macro or plan group. All the timing
environment information related to one soft macro or plan group is printed together.
Proportional budgeting allocates positive and negative slack based on the actual physical
circuits in each path. It also allocates slack on the path based on the delay on the path
portions within individual blocks. Timing budgets are distributed proportionally to the worst
or best case delay that is actually present for each path (per clock domain) inside the
top-level soft macros. Portions of interface paths which are hierarchically in the top level are
considered fixed delays just as hard macros are considered as fixed delays. This means that
all slack for interface paths is budgeted solely to blocks.
After slack is allocated between blocks, the design is processed to generate a timing
constraints file in the Synopsys Design Constraints (SDC) format for each block that has a
timing model.
To run the timing budgeter,
1. Choose Timing > Allocate Budgets.
The Allocate Budgets dialog box appears.
Alternatively, you can use the allocate_fp_budgets command.
2. Set the options, depending on your requirements.
❍ Hierarchical cells – Select this option to specify a list of hierarchical cell names for
budgeting. By default, all plan groups and soft macros in the current design are
budgeted.
❍ Black box cells – Select this option if you want a list of black box cells to be budgeted
with black box timing models. The default is off.
Enter the names of the black box cells in the text box. Black box cells are not
budgeted unless they are included in this text box. Black box cells that have timing
models and are omitted from the text box are treated as hard macros.
❍ Fixed delay objects – Select this option to specify that certain objects that are
implemented have fixed delays that will not change in subsequent optimizations. The
list of objects includes plan groups, soft macro cells, hard macro cells, black boxes,
hierarchical cells for plan groups, pins of soft macros with hierarchical models, and
pins of hierarchical cells for plan groups.
The delay allocated to the timing paths passing through these pins during budgeting
is equal to the current delay.
Select the Plan groups option if you want a list of cells to be treated as hard macros
for budgeting purposes. The tool skips slack allocation for cells designated as fixed
delay cells. Timing budget that is usually distributed to the fixed delay cell is
distributed to other soft macros on the same timing path. The default is off.
❍ Output file name format specification – Enter the directory and naming style for the
output SDC constraints file. The syntax of the string specifies the directory to write the
SDC files and the type of names to output. If you specify outputdir/i.sdc, the IC
Compiler tool writes instance names. The string outputdir/m.sdc requests the tool to
write reference names. One consolidated SDC file is written for designs that contain
multiply instantiated modules. See the man page for more information.
❍ Interblock logic – Select this option to fix top-level timing budget values during
budgeting. If you deselect this option, the tool performs proportional timing budgeting
at the top level as well as plan groups and soft macros.
❍ Exploration mode – Select this option to perform budgeting in exploration mode. See
“Performing Fast Time to Budget Analysis” on page 12-10 for more information about
this option. The default is off and the tool performs budgeting in the normal
floorplanning flow.
❍ Incremental budgeting – Select this option to perform budgeting in incremental mode.
During incremental budgeting, the timing budgeter retrieves block implementation
information from designs with hierarchical models and budgets the delays using this
information. The block-level slack of the worst timing paths through the block pins is
considered. The tool tightens budgets for pins associated with positive slack
numbers, and relaxes budgets for pins with negative slack numbers.
Note:
Use this option only on designs with interface logic models that were created with
the create_block_abstraction command. Designs that contain interface logic
models commands contain information about the block-level slack of the worst
path through the hierarchical pins. If the design contains plan groups or if the
block abstractions in the design do not have pins with negative slack information,
incremental budgeting issues an error message and stops.
❍ Split long lines – Select this option if you want the tool to split long SDC command
lines in the budget file by breaking the line and inserting the Tcl continuation
character (\) at the end of the line. The default is on.
❍ Write constraints for partial netlists – The allocate_fp_budgets command does not
create partial constraint files by default. Specify the -print_partial_constraints
option to generate partial constraint files for blocks with a partial netlist. Partial
netlists are commonly used in the on-demand-loading flow, the trace mode flow, and
the hierarchical flow using ILMs or block abstraction models. The partial constraint file
for blocks with a partial netlist is incomplete and contains only constraints for the
portion of the block netlist at the top level.
❍ Enable QTM model generation – Select this option to enable quick timing model
generation for the budgeted plan groups or soft macros. (This option is equivalent to
the create_qtm_model command.) The delay arcs and the constraint arcs that are
created in the quick timing models represent the budgets on the plan groups or soft
macros.
You can load the quick timing models for the soft macros or plan groups after they are
committed to soft macros. You can also generate a top-level timing report to check
the QoR of your budgets and identify potential problems before running optimization
on the individual blocks.
❍ Output QTM directory – Enter the name of the directory into which the quick timing
model files are written after the timing budgeting is finished. The default is the current
directory.
****************************************
Report : User budgets
Design : ORCA
Version: G-2012.06-ICC-SP4
Date : Tue Nov 13 11:52:43 2012
****************************************
---------------------------
Minimum budgets for blocks
---------------------------
Block Budget
----------------------------------------
I_ORCA_TOP/I_BLENDER_2 0.500 units
...
Initial Placement
Hierarchical Placement
Plan-Group-Aware Routing
Finalize Routing
allocate_fp_budgets -exploration
Commit
paths in the timing report, run a timing report for that path on a saved design with ILM or
block abstraction models.
Zero slack budgeted paths are reported in the timing report with a slack of zero. Because the
quick timing represents the timing of the blocks if they met the generated SDC budgets, the
top-level timing should converge to a slack of zero.
Note:
The automatic transfer of budgeted timing SDC constraints and attributes works on
designs with single or multiple scenarios.
Timing budgeting on plan groups runs with full-chip timing. It honors the pin locations and
the feedthrough nets assigned to the plan groups.
Figure 12-2 shows the flow for performing timing budgeting on plan groups.
Figure 12-2 Performing Timing Budgeting on Plan Groups
Timing budgeting
Commit hierarchy
Note:
After committing the hierarchy using the commit_fp_plan_groups command, the
created soft macros do not have timing models. At this point, you might encounter a few
warning messages. These messages do not affect any physical design operations, such
as refining the pin assignment.
If you want to perform an early timing check at the top level after you commit the hierarchy,
do the following:
1. Save the soft macro CEL views by using the save_mw_cel -hierarchy command.
2. Close the soft macro CEL views by using the close_mw_cel command, which leaves
open only the CEL view for the top-level design.
3. Generate hierarchical models for the soft macros from the top level by using the
create_block_abstraction command.
Conflicts might occur when budgeting according to instance names. In this case, the
strictest constraint is used if a conflict occurs.
Figure 12-3 shows a design example containing multiply instantiated modules.
Figure 12-3 Multiply Instantiated Module Design
BlockA BlockB
FF1 FF2
in out in out
D Q D Q
1 3 2 3 1
In this example the clock period is 10 ns and the budgets are allocated along the timing path
as shown in the figure. If BlockA and BlockB are independent, the set of corresponding input
and output constraints for each block are:
BlockA:
set_input_delay 1 [get_ports in]
set_output_delay 6 [get_ports out]
BlockB:
set_input_delay 6 [get_ports in]
set_output_delay 1 [get_ports out]
If BlockA and BlockB are multiply instantiated modules, the delays cannot be correctly
combined by choosing the strictest value for each constraint. The combination of the delays
would result in the following constraint, which is impossible to meet for timing closure:
set_input_delay 6 [get_ports in]
set_output_delay 6 [get_ports out]
Instead, the budget values for the two multiply instantiated blocks are considered and the
delay combination resulting in the strictest budget is kept. For the design example, either of
the following constraint sets produces the correct result:
set_input_delay 1 [get_ports in]
set_output_delay 6 [get_ports out]
or
set_input_delay 6 [get_ports in]
set_output_delay 1 [get_ports out]
If the connectivity of the blocks gives a different budget for each block, the strictest
budgeting constraint is created. Given this set of constraints:
BlockA:
set_input_delay 2 [get_ports in]
set_output_delay 6 [get_ports out]
BlockB:
set_input_delay 6 [get_ports in]
set_output_delay 1 [get_ports out]
The constraint defining the strictest budget is kept as shown in the following example.
set_input_delay 2 [get_ports in]
set_output_delay 6 [get_ports out]
This approach is used in designs with plan groups and hierarchical models. For
multicorner-multimode designs, constraints for each scenario are resolved independently
for each active scenario.
Table 12-2 shows a list of conventions used when writing constraints to a combined SDC
file.
Table 12-2 Combined SDC File Constraint Guidelines and Examples
create_clock -name clk1 create_clock -name clk2 create_clock -name clk1 -add
[get_ports {clk}] [get_ports {clk}] [get_ports {clk}] create_clock
-name clk2 -add [get_ports
{clk}]
create_clock -name clk create_clock -name clk create_clock -name clk list
[get_ports {clk}] [get_pins {U1/A}] [[get_ports {clk}] [get_pins {U1/
A}]]
create_generated_clock Clocks generated in different instances that have unique names are
treated the same as they are in individual SDC files. If generated
clocks are created with the same name have any conflicting
attributes (options -source, -multiply_by, -divide_by, -invert,
-master_clock), a warning is issued and a clock is selected for
output to the SDC file.
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
set_clock_uncertainty The uncertainty set on clocks is valid for the entire design and is the
same for all multiply instantiated modules. If uncertainty is defined
on ports or pins, the worst-case uncertainty value is used in the
merged SDC.
set_clock_latency The largest value among all latency values in the different SDC files
for the -max option for the same clock. Similarly, the smallest value
is chosen for the -min option.
set_clock_transition The same command is written for all multiply instantiated modules
in the combined SDC file.
set_propagated_clock The same command is written for all multiply instantiated modules
in the combined SDC file.
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
set_false_path -from [get_pins set_false_path -from [get_pins no output for the exception
{U1/A}] {U2/A}]
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
set_drive If different set_drive values exist for the same port in different
instances, largest resistance value is used for the -max option. The
smallest resistance value is used for the -min option. The options
-rise and -fall are treated separately.
set_drive -min [get_ports {in}] set_drive 3 -min [get_ports {in}] set_drive 2 -min [get_ports {in}]
set_driving_cell The library cell with the largest drive resistance to output is selected
if there are different library cell and pin paths for a given port in
different instances. If the set_driving_cell command for one port
has the same library cell and pin for different instances, but the
input_transition_rise or the input_transition_fall
numbers are different, the largest number for -max and the smallest
number for -min is output.
set_input_transition The largest value for -max conditions and the smallest value for
-min conditions are chosen if different input transition numbers
exist for the same port in different instances. The -rise and -fall
options are treated separately.
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
set_load -pin_load The largest value for -max and the smallest value for -min are
chosen if the set_load -pin_load statements for the same port
on different instances have different values.
set_load -wire_load The largest value for -max and the smallest value for -min are
chosen if the set_load -wire_load statements for the same port
on different instances have different values.
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
set_operating_conditions Operating conditions must match exactly for all multiply instantiated
module instances for the generation of
set_operating_conditions statements.
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
set_disable_timing The list of disabled cells, pins or ports in the current design match
exactly for all multiply instantiated module instances for the
generation of set_disable_timing statements.
set_max_time_borrow The worst case maximum time borrow value is written to the
merged SDC file.
Table 12-2 Combined SDC File Constraint Guidelines and Examples (Continued)
set_max_transition The worst case maximum transition time value is written to the
merged SDC file.
The tool budgets all scenarios in two phases in the get dominant scenarios timing budgeting
flow. The tool first performs timing budgeting by applying the constraints for the dominant
scenario. Next, the tool budgets other scenarios when you specify the -add_scenarios
option and combines the constraints. This flow makes it possible to generate constraints for
all scenarios without making all scenarios active at the same time, reducing the system
resource requirements necessary for performing timing budgeting.
Note the following when using this flow:
• If you specify the -add_scenarios option without first performing an initial timing
budgeting run, the results are undefined.
• If you budget the same scenario twice by using two consecutive -add_scenarios
options, the results are undefined.
opening the cell in the distributed process. The -post_open_cell_script options specifies
the script file name that is run immediately after the distributed process opens the cell.
To use distributed timing budgeting, you must have a distributed processing system
configured in your compute environment. The following example uses the
set_host_options command to enable four distributed processes using the Oracle Grid
Engine and uses the allocate_fp_budgets command to perform distributed timing
budgeting.
icc_shell> set_host_options -name my_grd_host_options \
-pool grd -submit_options {-P bnormal -l arch=glinux, \
cputype=amd64,mem_free=4G,mem_avail=4G -l \
qsc=f -cwd}
icc_shell> allocate_fp_budgets \
-host_options my_grd_host_options \
-pre_open_cell_script pre.tcl \
-post_open_cell_script post.tcl
The command processes the hierarchical signal integrity information during budgeting and
writes out this information about the block’s pin attributes.
The total effective drive strength is written out on block pins to represent the top-level
aggressor drive strength, and the total coupling capacitance is written out on block pins to
represent the total coupling capacitance in the block CEL view.
A timing path starts at a startpoint and ends at an endpoint. Timing paths are divided into
segments. For each timing path segment, the report prints the actual and budgeted delay or
the fixed delay values of the segment. You can use this information to analyze the process
of generating budgets for your design.
You can also generate a text or HTML format post-budget timing analysis report using the
check_fp_budget_result command. For each pin on a block, the report lists the worst
case timing paths per endpoint clock domain that pass through the pin. For each path
segment on the timing path, the report lists the budgeted and actual delays for the path
segment.
To generate a plain text format report, specify the -file_name reportfile option. The
following example writes a plain text format report to the report.rpt file.
icc_shell> check_fp_budget_result -file_name report.rpt
Starting check_fp_budget_result ...
1
icc_shell> sh ls htmlreport
I_ORCA_TOP_I_BLENDER_0.html
I_ORCA_TOP_I_BLENDER_1.html
I_ORCA_TOP_I_BLENDER_2.html
index.html
Clocks launching (capturing) flip-flops on the top level have source latencies only.
Clocks launching (capturing) flip-flops in blocks have both source and network latencies.
Clock latency budgeting is on by default if timing budgeting (allocate_fp_budgets
command) is run after clock planning.
You can enable (turn on) clock planning based latency values by setting the following
variable in the icc_shell to true (the default) before performing timing budgeting:
set virtual_clocks_from_cp true
To disable (turn off) clock planning based latency values, set the following variable in the
icc_shell to false.
set virtual_clocks_from_cp false
You can include latencies during budgeting for synthesized clock trees which were not
created during clock planning by setting the following variable to a value of true before
running the timing budgeter. The default is false.
icc_shell> set synthesized_clocks true
After you create budgets to reflect real clock latencies, check for the following:
• Ensure every real input clock port created by clock planning for a block budget has
calculated source and network latency statements in the block budget.
• Ensure latency statements in the budgets reflect the actual clock network delays in the
design.
• Ensure every input port set_input_delay and set_output_delay is referenced to a
virtual clock that has the latency for the launch or capture clock associated with the path
through the port.
• Check latencies in budgets against clock planning latency files.
Note:
Clock planning creates a source latency file and a network latency file for each clock
port in the tcp_output directory.
• Check that latencies in budgets are only for clock ports defined in the block budget file.
• Check latencies in clock planning latency files against the clock skew report.
13-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
For more information about the command options, see the commit_fp_plan_groups man
page.
To commit plan groups to soft macros using the GUI layout window, first set the window task
mode to Design Planning if it is not already in that mode (File > Task > Design Planning).
Then choose Partition > Commit Plan Groups. This opens the dialog box shown in
Figure 13-1.
Figure 13-1 Commit Plan Groups Dialog Box
To commit only specific plan groups, choose the Specified option in the GUI and enter the
plan group names or choose the plan groups in the GUI. By default, the tool commits all plan
groups to soft macros. To copy the power and ground straps into the new soft macro and
delete them from the top-level, select the Push down power and ground straps into the child
cell option. By default, the tool keeps the power and group straps at the top level. To rename
the new soft macro, select the Commit to a new top cell option and enter the new name in
the Top cell name box. By default, the tool uses the instance name as the new cell name.
Committing the physical hierarchy performs the following actions on the design:
• Converts the virtual flat design to a two-level hierarchical design
• Removes standard cells and hard macros belonging to a plan group from the top-level
design and copies them down to the soft macro that is created for the plan group
• Creates nets in the soft macros based on the hierarchy preservation data
• Pushes placement blockages and route guides down to the soft macros
• Pushes power and ground straps and standard cell preroutes down into each soft macro,
if selected
After the tool converts the plan groups to soft macros, the standard cell instances within the
plan groups are moved to the new soft macros and the new soft macros reside in the same
location as the plan groups they replace. Cell utilization for the new soft macros is the same
as for the plan groups. The default utilization is based on the sum of the area of standard
cells and hard macros in the cell divided by the area in the core area bounding box of the
cell.
Figure 13-2 Committing Plan Groups and Creating Separate Design Libraries
Milkyway Design Library
CEL Top
Milkyway Design Library Milkyway Design Library
After block-level implementation, you can link the different design libraries to the top-level
design by using the set_mw_lib_reference command.
For more information about the command options, see the push_down_fp_objects man
page.
To push down objects into the new soft macros using the GUI layout window, first set the
window task mode to Design Planning if it is not already in that mode (File > Task > Design
Planning). Then choose Partition > Push Down Objects. This opens the dialog box shown in
Figure 13-3.
Figure 13-3 Push Down Objects Dialog Box
To copy down objects only to specific plan groups, choose the Specified soft macros option
in the GUI and enter the soft macro instance names. By default, the tool copies down objects
to all soft macros. Select the object types for the objects you want to push down in the Types
of objects to be pushed down box. If you select Shapes, you can push down all shapes,
shapes that are part of a net, or shapes that are not part of a net.
Select Push down specified objects to restrict the push down operation to only the objects
you specify. Enter a Tcl command or the name of the specific objects in the text box, or
choose the objects in the GUI. By default, the tool pushes down all objects of the specific
types that you selected. Select the push down mode to specify how the tool processes the
object. Select Push to create a copy of the object in the soft macro and delete it from the top
level. Select Copy to create a copy of the object in the soft macro and retain it at the top
level. Select Cut to create pins for the routing objects at the soft macro boundaries.
Select one or more option following Net types: Clock, Signal, or Power and Ground to push
those objects down into the soft macro. Select the Type of pushed down objects, Blockage
or Original, to specify whether routing or cell objects are changed to blockages or whether
they remain as routes or cells. Select Limit pushed down objects to specified layers, and
select one or more metal layers, to push down only objects on the selected layers.
Select Check objects overlaps to check for overlapping routing before pushing down the
routes. By default, the tool does not perform overlap checking. Select Freeze push down
nets to prevent the modification of push-down nets during push-down and optimization.
Select Allow feedthroughs to create new ports for feedthroughs on signal and clock nets,
and create a new net at the top level. Select Create pins to create pin shapes when the push
down mode is Copy. Select Remove routing to remove the route connections between the
pushed down cells. Select Retain bus naming to keep the bus naming convention, such as
"[number]", for the newly created child feedthrough ports and child feedthrough nets. Select
Connect copy down objects to their nets when you select Copy as the push down mode to
connect pushed down objects to their corresponding nets in the soft macro. Select Include
partially overlapped cells to push down cells that partially overlap the soft macro boundary.
Specify horizontal and vertical offset values to Offset between soft macro core and rows
when you copy down rows. Select Margin around soft macro boundary and specify values
in the Left, Right, Top and Bottom boxes to capture objects outside the soft macro boundary
and push them down into the soft macro as blockages.
Routing objects that overlap the boundary of cell B are pushed into cell B as routing, and
objects within the margin are pushed down as route guides or blockages.
3 3 3
2 2 2
A 1 A 1 A 1
B 4 B 4 B 4
For more information about the command options, see the push_up_fp_objects man
page.
To push up objects from soft macros to the top design level by using the GUI layout window,
first set the window task mode to Design Planning if it is not already in that mode (File > Task
> Design Planning). Then choose Partition > Push Up Objects. This opens the dialog box
shown in Figure 13-5.
Figure 13-5 Push Up Objects Dialog Box
To push up objects only from specific soft macros, choose the Specified soft macros option
in the GUI. Enter the soft macro instance names or choose the objects in the GUI. By
default, the command pushes up objects from all soft macros. Select the object types in the
Types of objects to be pushed up box. If you select Shapes, you can select all shapes,
shapes that are part of a net, or shapes that are not part of a net.
Select the All objects option to push up all cells, nets, shapes, and routing objects. Objects
that were pushed down and new objects created within the soft macro are pushed up by this
option. By default, the Pushed down objects only option is selected and the tool pushes up
only objects that were previously pushed down. Select Collection of child objects and enter
a collection or Tcl command in the box to specify a collection of objects.
Select the Copy option following Push up mode to create a copy of the object at the top level
and retain the object within the soft macro. By default, the Push option is selected and the
tool creates a copy of the object at the top level and deletes the object in the soft macro.
Select Top level nets connected to soft macros and enter or select a top-level net name to
push up only objects connected to the specified nets.
Select Ignore non push-down nets to keep route objects at the soft macro level that are
connected to nets that were not pushed down. If you select this option, you must also select
the Routing option in Types of objects to be pushed up box. Select Remove routing between
pushed up cells to prevent the tool from connecting cells that are pushed up. By default, both
the cells and the routing between the cells is pushed up.
Use the Types of objects after push up from soft macro options to transform objects as they
are pushed up to the top level from the soft macro level. Select Routing to push up route and
pin objects as routes. Select Pins to push up soft macro pins as terminals. Select Blockages
to push up objects as blockages at the top level. By default, the Original option is selected
and pushed up objects retain the same type after they are pushed up.
Select Limit pushed up objects to specified layers and select one or more Metal layers from
the selection box to restrict the push up operation to the specified subset of metal layers.
For more information about the command options, see the uncommit_fp_soft_macros
man page.
To uncommit soft macros using the GUI layout window, first set the window task mode to
Design Planning if it is not already in that mode (File > Task > Design Planning). Then
choose Partition > Uncommit Soft Macros. This opens the dialog box shown in Figure 13-6.
The tool pushes up physical objects from the soft macro to their relative positions in the
top-level design. Any physical objects that make a physical connection to power and ground
nets are connected to the corresponding power and ground nets in the top-level design. The
tool copies object properties from the soft macro to the top-level design.
Select Specified in the Target soft macros box and enter or select the macros you want to
uncommit. By default, the All option is selected and the contents of all soft macros are
copied to the top level. Select the All option in the Preroutes to push up section to push up
all power, ground and detail routing, Select the Power and Ground option to push up only the
power and ground straps. Select None to avoid pushing up preroutes. Select Remove feed
through ports on soft macros to remove the feedthroughs from the selected soft macros. All
feedthrough nets and ports with suffixes of *_pft and *_rft are removed.
The tool copies the following objects from the soft macro to the top-level design:
• Standard cells
• Straps on power and ground nets
• Vias on power and ground nets
• Placement blockages, including soft placement blockages and the internal padding
around the boundary and cell rows
• Route guides
Note that the uncommit process does not remove the soft macros that were present before
running the commit_fp_plan_groups command. Any routing in the soft macros, except for
the power and ground preroutes, is deleted after you uncommit the hierarchy.
During the uncommit process, when the soft macros are converted back into plan groups,
the uncommit_fp_soft_macros command automatically propagates the child level Unified
Power Format (UPF) constraints and other Milkyway data from the soft macro to the top
level of the design. The tool performs the following actions regarding UPF:
• Locates all power domains and their corresponding voltage area geometries and
instantiates them in the top-level design, according to how they were instantiated in the
soft macro. In the case of the topmost power domain in the soft macro, which has a
default voltage area, the voltage area is instantiated in the top-level design with the same
name as its corresponding power domain and with a geometry that is coincident with the
plan group boundary.
• Reconnects the newly instantiated top-cell power domains to existing Milkyway objects.
The IC Compiler flip-chip interface supports two design styles: single I/O driver ring and
multiple I/O driver ring. The tool places the flip-chip drivers in a ring formation along the
periphery of the chip.
In a flip-chip design, a bump cell represents a piece of metal or solder bump that forms an
electrical contact to the chip package. Similar to processing silicon wafers for wire bonding,
openings are made on the wafer to expose the metal contact points. Solder bumps are
formed on these metal contact points. The chip’s power, ground, and signal I/Os are
available through the solder bumps that are formed on the top side of the wafer during the
final processing step. The solder bumps on the chip make the physical connections to the
package substrate. The chip is connected to external circuitry (a circuit board, another chip,
or a wafer) by flipping it over so that the solder bumps connect to metal pads to complete the
A-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
interconnect. This is in contrast to wire bonding in which the chip is mounted upright and
wires are used to connect the chip pads to external circuitry.
The flip-chip driver is the I/O circuitry that drives or receives signals from or to the chip
through the bump. There are signal bump cells, which are connected to signal and clock
nets, and power and ground bump cells, which are connected to power and ground straps.
The locations of solder bumps on the chip are determined by the placement of the bump
cells. (The I/O driver cells are placed independently.) You can place bump cells on top of the
I/O drivers or anywhere within the core area. You can also place standard cells under bump
cells.
This topic includes the following sections:
• Flip-Chip Implementation Flow Overview
• Preparing the Library
• Creating an Initial Floorplan
• Using a Die-Driven Flip-Chip Flow
• Using a Package-Driven Flip-Chip Flow
• Routing Flip-Chip Bumps
• Using Flip-Chip Structures in Cover Macros
• Creating RDL Net Shielding
• Creating Tapered Routes
• Connecting Floating Bump Cells to Ring Nets
• Summary of the Flip-Chip Commands
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Flip-Chip Implementation Flow Overview A-3
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
See Also
• I/O Drivers
• Bump Cells
I/O Drivers
To prepare the I/O drivers, open the design in the Milkyway Environment tool. Select
Scheme mode and perform the following operations:
• Set the cell type as IO Pad by using the cmMarkCellType command.
cmMarkCellType
setFormField "Mark Cell Type" "Cell Type" "pad"
formOK "Mark Cell Type"
• Set the power and ground pins as flipchip by using the dbSetCellPortTypes
Milkyway command.
dbSetCellPortTypes "libname" "cellname" '(
("VDD "inout" "Power" "flipchip")
("VSS" "inout" "Ground" "flipchip")
) #f
Bump Cells
You can maintain bump cells in the same Milkyway design library that you use for the I/O
driver cells. To prepare the bump cells, open the design in the Milkyway Environment tool.
Select Scheme mode and perform the following operations:
• Mark the bump cell as a flip-chip bump by using the cmMarkCellType command.
cmMarkCellType
setFormField mark_cell_type library_name lib
setFormField mark_cell_type cell_name cell
setFormField mark_cell_type cell_type "flip chip pad(bump)"
formOK mark_cell_type
• Create bump terminals (pins) on a redistribution routing layer by doing the following:
❍ Create a .lib file with a terminal name and a corresponding .db file. Without the .lib file,
all bump cells are treated as physical-only cells.
❍ Locate the layer for the octagonal-shaped passivation opening in the flip-chip bump
cell.
❍ Create a polygon in the CEL view by using the geAddPolygon command or choose
Milkyway: Create > Polygon. Query the polygon to get a list of vertices.
❍ Enter the name or number of the layer on which you want to create the polygon,
select the L45 routing option, and then add all the vertices.
You should now have an octagonal piece of metal in the bump CEL view.
❍ Add text to the layer by using the geAddText command. Use the text layer that
matches the newly created terminal.
❍ Create a FRAM view by using the auExtractBlockPinVia command.
The CEL and FRAM view should match the terminal name that you created in the .lib
file.
Figure A-2 shows the CEL and FRAM views of a bump cell.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Preparing the Library A-5
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Setup library
Create floorplan
Assign nets
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Die-Driven Flip-Chip Flow A-7
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
For more information about the command options, see the place_flip_chip_ring man
page.
Specify the name of the bump reference cell by using the -physical_lib_cell
{cell_name} option; you can specify only one library cell. The -prefix prefix_string
option specifies the prefix string used to create the cell name. For example, the argument
-prefix "BUMP_" specifies that the new bump cells are named BUMP_1, BUMP_2, and so
on. The -number bump_count option specifies the number of bump cells to place. The
place_flip_chip_ring command places bump cells until the specified number of bumps
is placed or until all the flip-chip bump locations in each specified ring are allocated.
Specify the spacing between bump cells by using the -bump_spacing spacing option;
specify the spacing between rings by using the -ring_spacing spacing option. Both
spacing values are specified in microns. The -ring_number count option specifies the
number of rings to create. The -boundary {x1 y1 x2 y2} option specifies the bounding
box for the outermost ring.
In the following example, the command creates and places 100 flip-chip bump cells using
the PAD80B library cell in a two-ring configuration. The spacing between the adjacent bump
cells and the adjacent ring cells is 70 microns, and the outermost ring occupies the rectangle
bounded by the coordinates {290 290} and {2940 1934}.
icc_shell> place_flip_chip_ring -physical_lib_cell {PAD80B} \
-prefix "BUMP_" -bump_spacing 70 -ring_number 2 \
-ring_spacing 70 -number 100 -boundary "290 290 2940 1934"
Figure A-4 shows the layout after running the previous command.
By default, the command places bump cells on the left die edge in the North orientation,
bump cells on the top die edge in the East orientation, bump cells on the right edge in the
South orientation, and so on. To place all flip-chip bump cells in the same orientation, use
the -same_orientation option.
The -left_orientation orientation option specifies the orientation of the flip-chip
bump cells on the left die edge. When you specify both the -left_orientation and
-same_orientation options, the command places all flip-chip bumps in the same
orientation as specified by the -left_orientation option.
Figure A-5 shows two simple layouts containing bump cells. The layout on the left is created
without the -same_orientation option and the layout on the right is created with the
-same_orientation option.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Die-Driven Flip-Chip Flow A-9
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
For more information about the command options, see the place_flip_chip_array man
page.
Define the bump cell array by specifying the starting point and the x- and y-pitch for each
bump cell in the pattern. The place_flip_chip_array command can be used to place
power and ground bump cells in the chip core. The -start_point {x y} option defines the
starting point of the lower leftmost bump cell. The -delta {x y} option sets the horizontal
and vertical pitch for each bump cell in the array. The -repeat {columns rows} option
specifies the number of columns and rows in the array. The place_flip_chip_array
command places bump cells into the array pattern until the specified number of bumps is
placed, or until the array pattern is full.
The -physical_lib_cell, -prefix, and -number options operate in the same way as in
the place_flip_chip_ring command. For more information about these options see
“Creating a Pattern of Bump Cells in a Ring Configuration” on page A-8.
In the following example, the place_flip_chip_array command creates 28 flip-chip bump
cells and places them in a 7 by 4 array pattern, starting at the lower-left x- and y-coordinate
of {590 590}. The bump cells are named with the VDD_CORE_ prefix. The bump cells are
placed by using a 300 micron center-to-center pitch in both the horizontal and vertical
directions.
icc_shell> place_flip_chip_array -physical_lib_cell {PAD80B_P} \
-prefix "VDD_CORE_" -start_point {590 590} -number 28 \
-delta {300 300} -repeat {7 4}
Figure A-6 shows the layout after running the previous command.
Figure A-6 Placing Bump Cells in a 7 by 4 Array Pattern
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Die-Driven Flip-Chip Flow A-11
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Use the following command syntax to reset the matching type and allow the driver to match
any bump cell that does not have an assigned matching type.
icc_shell> set_matching_type -matching_type "" [get_cells "BUMP_*"]
If you specify the -matching_type option, bump cells with the same matching type only are
assigned to the drivers. You can rotate or mirror the driver placement by specifying the
-driver_orientation option and align the drivers to the left, right, bottom or top sides of
the bounding box by specifying the -alignment option. For more information about these
options, see the man page.
The following example creates two flip-chip driver strips. The command assigns the "signal"
matching type to the drivers and rotates the drivers by 180 degrees.
icc_shell> set_flip_chip_driver_strip -bbox {{0 0} {200 1000}} \
-driver_orientation S -matching_type {"signal"}
icc_shell> set_flip_chip_driver_strip -bbox {{300 0} {500 1000}} \
-driver_orientation S -matching_type {"signal"}
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Die-Driven Flip-Chip Flow A-13
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
The set_flip_chip_driver_ring command defines the legal locations for flip-chip driver
cells in a ring configuration; the command syntax is as follows.
set_flip_chip_driver_ring
-matching_type {matching_type_list}
-max_driver_size {width height}
-max_driver_num_per_ring number
-min_driver_spacing spacing
-ring_number count
-ring_spacing spacing
-outer_ring boundary_box
[-orientation N | W | S | E | FN | FS | FW | FE]
[-num_extra_spacing count]
[-extra_spacing spacing]
[-stagger_drivers]
[-name ring_name]
Specify which drivers to place in a particular ring by using the -matching_type option; the
command places only the drivers with the specified matching types into the ring. Specify the
maximum width and height of the drivers by using the -max_driver_size option. Specify
the maximum number of drivers per ring by using the -max_driver_num_per_ring option.
Set the spacing between driver cells and the spacing between adjacent rings by using the
-min_driver_spacing and -ring_spacing options respectively. Specify the number of
rings by using the -ring_number option; specify the bounding box that defines the extent of
the outer ring by using the -outer_ring option.
The following example defines a peripheral ring of flip-chip drivers that meets the following
constraints:
• Driver is assigned a "blue" or "green" matching type
• Driver is less than 20 um in width
• Driver is less than 100 um in height
In addition, the command places the flip-chip drivers in two rings, with the outermost ring
bounded by the coordinates {100 100} and {900 900} and a spacing of 15.0 microns
between the two rings. Each ring can contain at most 150 drivers with a minimum spacing
of 1.2 microns between two adjacent drivers of the same ring.
icc_shell> set_flip_chip_driver_ring -ring_spacing 15.0 \
-matching_type {"blue" "green"} -max_driver_size {20 100} \
-max_driver_num_per_ring 150 -min_driver_spacing 1.2 \
-ring_number 2 -outer_ring {{100 100} {900 900}}
The set_flip_chip_driver_array command defines the legal locations for flip-chip driver
cells within an array configuration; the command syntax is as follows.
set_flip_chip_driver_array
-matching_type {matching_type_list}
-max_driver_size {width height}
-start_point {x y}
-dimension {column row}
-delta {x y}
[-orientation N | W | S | E | FN | FS | FW | FE]
[-name array_name]
Restrict the placement of drivers to a particular array by using the -matching_type option.
This technique can be used for multivoltage driver placement. Define the size of the largest
driver by specifying the -max_driver_size option. Specify the driver placement grid by
using the -delta and -dimension options; the -delta option specifies the pitch between
driver cells and the -dimension option specifies the number of columns and rows in the
driver array. Define the starting point at the lower-left corner of the driver array by specifying
the -start_point option.
The following command defines a flip-chip driver array of 2 columns and 20 rows, starting at
coordinate {0 100} on left edge of the die. The spacing between drivers is 60 microns, and
the largest flip-chip driver allowed is 180 microns in width by 60 microns in height:
icc_shell> set_flip_chip_driver_array -max_driver_size {180 60} \
-start_point {0 100} -dimension {2 20} -delta {0 60} \
-matching_type {"blue" "green"}
For information about the command options, see the place_flip_chip_drivers man
page.
The place_flip_chip_drivers command places drivers with the io_pad and
flip_chip_driver cell types into legal placement locations specified by the
set_flip_chip_driver_array, set_flip_chip_driver_ring, or
set_flip_chip_driver_strip command. The tool places the drivers and minimizes wire
length; you can use the set_flip_chip_options command to assign different weights to
nets connecting drivers to bump cells and for nets connecting drivers to soft macros.
Place only drivers with a particular matching type by specifying the -matching_types
option. Minimize jogs in the route between the driver cell and the bump cell by specifying the
-pin_alignment option; the tool attempts to align the driver center with the bump center.
Snap the lower-left corner of the driver to the flip-chip grid by specifying the -snap_to_grid
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Die-Driven Flip-Chip Flow A-15
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
option. The flip-chip grid is defined by the set_flip_chip_grid command. Use the
-swapping_only option to optimize the existing driver placement by swapping drivers of the
same size.
The next example sets the matching type “ground” for the pin named PAD on the driver
ppad2.
icc_shell> set_matching_type -matching_type {"ground"} ppad2/PAD
Automatic net assignment logically connects flip-chip I/O drivers and bump cells. This
process is required because there is no logical connection between driver cells and bump
cells in the Verilog netlist in the die-driven flow. After logical connections are established,
you can route the bump nets between the flip-chip I/O drivers and bump cells.
The -matching_type option defines the list of matching types for the drivers and bumps to
be routed. Based on the current driver placement, the command finds the nearest
unassigned bump with the same matching type and assigns a logical net between the driver
and bump cell. The assign_flip_chip_nets command matches flip-chip bump cells to
drivers by using the shortest wire length method. The bump-to-driver connection net
assignments are updated in the Milkyway database for the die-driven flow.
The tool processes the automatic net assignment between drivers and bump cells based on
the assigned matching types set by using the set_matching_type command. Only drivers
and bump cells of an identical type are matched. Unspecified matching types are not
processed if you use the -matching_type option.
The following example performs automatic net assignment between the drivers and bump
cells assigned the matching type "west". The display_rdl_route_flylines command
displays the flylines between the driver and bump cells.
icc_shell> assign_flip_chip_nets -matching_type {"west"}
icc_shell> display_rdl_route_flylines
Automatic net assignment can handle various design scenarios, such as a driver cell with
multiple flip-chip pins, or a flip-chip pin with multiple terminals distributed far from each other.
These requirements occur primarily on VDD, VSS, and control pins of macro drivers. Net
assignment can also handle multiple pad pins per I/O driver, such as multiple bump cells
connected to a single I/O driver. For multiple terminal pins, net assignment can assign one
bump cell for each terminal. Net assignment can also handle multiple personality matching
between drivers and bump cells, such as "power" drivers to "power" bump cells and "signal"
drivers to "signal" bump cells. If the ports of a group of drivers are connected by the same
net, such as a VDD net, net assignment can create unique nets and assign a one-to-one
connection between each bump and each flip-chip driver port. Net assignment can also
create a many-to-one connection between a single bump and multiple flip-chip driver ports.
The following command performs a multiple-terminal-aware net assignment.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Die-Driven Flip-Chip Flow A-17
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
The merge_flip_chip_nets command disconnects all pins, I/O ports, and terminals from
a specified collection of flat nets and reconnects them to the newly merged net. Use the
-from option to specify the collection of nets to merge; the -to option specifies the new
name for the merged net. You should use the -update_routing option if you use the
merge_flip_chip_nets command after flip-chip redistribution layer routing.
The following command merges all nets that begin with the string VDD, such as VDD,
VDD_1, VDD_2, and VDD_3, into the single VDD net:
icc_shell> merge_flip_chip_nets -from [get_flat_nets VDD* -all] \
-to VDD -update_routing
----------------------------------------------------------------
REG_ADDR_1[5] REG_ADDR_1[4]
TE1_ON_3 TE2_ON_3
DATA_2[28] REG_DATA_2[29]
REG_DATA_3[30] IDLE_3
REG_ADDR_3[1] REG_ADDR_3[2]
REG_DATA_2[9] REG_DATA_2[8]
R_TMU0_ON_2 R_TMU1_ON_2
PE_CLK_4 RESET_4
FE_CLK_4 BUSY_4
Total 9 crossing!
----------------------------------------------------------------
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Package-Driven Flip-Chip Flow A-19
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Setup library
Create floorplan
Related Topics:
• Importing Bump Locations
• Saving Bump Cell Information
• Defining Flip-Chip Driver Locations
• Designating the Driver Matching Type
• Defining the Flip-Chip Placement Grid
• Setting Options for Flip-Chip Driver Placement
• Placing Flip-Chip Drivers
In a package-driven flow, bump cells are imported and placed in predefined physical
locations per the requirements of the flip-chip package. The read_aif command reads the
bump locations from an AIF file. Use the -pad_to_ref_lib option to remap the cell
reference in the AIF file. You can also change the orientation of the cell by specifying the S,
E, or W keyword. To place the bump cells without connecting them, specify the
-ignore_assign_nets option.
Example A-2 shows an AIF file that specifies bump cell locations for a design. Note that the
bump cell location coordinate {0 0} in an AIF file references the center of the die, while the
coordinate {0 0} in the tool refers to the lower-left die boundary.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Package-Driven Flip-Chip Flow A-21
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
[DIE]
NAME=design
WIDTH=3230.000000
HEIGHT=2183.400000
[PADS]
PAD1 = POLY 16.570,40.000 40.000,16.570 40.000,-16.570
16.570,-40.000 -16.570,-40.000 -40.000,-16.570
-40.000,16.570 -16.570,40.000 16.570,40.000
PAD2 = SQUARE 40
PAD3 = RECT 60 20
[NETLIST]
Figure A-9 shows the layout after importing the AIF file shown in Example A-2.
Figure A-9 Imported Bump Cells
For more information about writing the floorplan information to a DEF or Tcl file, see “Writing
the Floorplan File” on page 2-27.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using a Package-Driven Flip-Chip Flow A-23
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Note that the flip-chip placement grid is not the same as the standard cell row and column
grid. Use the set_flip_chip_grid command to define the flip-chip placement grid by
setting the minimum array pitch for flip-chip driver placement. Set the origin of the grid by
specifying the -grid_origin option; set the horizontal and vertical grid spacing by
specifying the -x_step and -y_step options.
The following example specifies a flip-chip grid with a grid origin at (0,0) and a grid spacing
of 0.1 microns in both the x- and y-directions.
icc_shell> set_flip_chip_grid -grid_origin {0 0} \
-x_step 0.1 -y_step 0.1
Note:
For peripheral I/O flip-chip design styles, single-layer routing on the top metal layer is
preferred. In addition, single-layer routing on the top metal layer minus one level
(dual-layer routing) is also allowed when necessary.
Figure A-11 describes the flow for performing redistribution layer routing.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Routing Flip-Chip Bumps A-25
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
See Also
• Specifying Redistribution Layer Routing Rules
• Performing Redistribution Layer Global Routing
• Analyzing Redistribution Layer Routing
• Performing Redistribution Layer Detail Routing
• Resolving Redistribution Layer Routing Congestion
• Performing Incremental RDL Routing and Route Optimization
• Writing Flip-Chip Nets to a File
• Creating Stacked Vias on Pad Pins
The preceding command creates a new routing rule called rdl_routing for the M8 and M9
layers. The width and spacing values are set to 0.1 microns.
2. Apply the routing rule to the redistribution layer nets
icc_shell> set_net_routing_rule \
-rule rdl_routing {flip_chip_nets}
3. Specify the redistribution layer routing options
icc_shell> set_route_rdl_options \
-layer_bump_spacings {M8 2.5 M9 5} \
-layer_routing_angles {M8 45_degree M9 45_degree}
The preceding command sets the bump spacing at 2.5 microns for the M8 layer and 5
microns for the M9 layer, and specifies a routing angle of 45 degrees for both M8 and M9
layers.
The -skip_detail_route true option directs the command to perform only global
redistribution layer routing and skip detail routing. The -auto_via true option inserts vias
while creating the redistribution layer routes. Alternatively, you can insert redistribution layer
vias in a separate step by specifying -auto_via false and using the
create_stack_via_on_pad_pin command to insert the vias.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Routing Flip-Chip Bumps A-27
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
You can also display a list of flip-chip flylines that are crossed by using the
report_flip_chip_flyline_cross command. For more information see “Reporting
Crossover Nets” on page A-18.
The -reuse_existing_global_route option skips global routing and reuses the existing
global routes when creating detail routes.
The push_rdl_route command moves redistribution layer routes based on the command
options you specify. To create additional space around a specified route, use the
push_rdl_route -layer layer -mode neighbor -nets target_net command, where
target_net is the net around which to create space. To control the number of redistribution
layer routes to move, specify the -sweep_range n option, where n is the number of nets to
move on each side of the target net. By default, the command moves 10 nets on each side
of the target net.
To move a specified route up, down, left, or right, use the push_rdl_route -layer layer
-mode net -nets target_net -direction up|down|left|right command. The tool
moves the net until the net is blocked by a routing obstruction or the net meets the bounding
box defined by the -bounding_box option.
Figure A-13 shows the layout result after running the push_rdl_route -layer layer
-mode net -nets target_net -direction down command. The dashed line represents
the original flip-chip net route.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Routing Flip-Chip Bumps A-29
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Figure A-14 RDL Routing Before and After Optimization With -reserve_power_resources
To split one or more RDL routes into narrow, parallel routes, or copy RDL routes to adjacent
layers, use the split_rdl_route command. Command options control the width, spacing,
and layer destination of the parallel routes.
The following example splits the RDL route for net sd[3] into parallel routes with a width of 5
microns for each new route.
icc_shell> split_rdl_route -nets {sd[3]} -widths {M9 {5}}
The following example copies RDL net PAD_NET2 from layer M9 to layer M8 and inserts
vias every 30 microns.
icc_shell> split_rdl_route -nets {PAD_NET2} -mode adjacent_layer \
-from_layers {M9} -to_layers {M8} -via_interval 30
To create new RDL routes of the same length for up to 16 different RDL nets, or to modify
existing RDL routes, use the route_rdl_differential command. The following example
uses the route_rdl_differential command to modify existing RDL routes for nets sd[0]
and sd[3]. The command updates the RDL routes to create net shapes of the same length.
icc_shell> route_rdl_differential -layers {M9 M8} \
-nets {sd[0] sd[3]}
Figure A-15 shows the layout before and after running the route_rdl_differential
command. The nets are now the same length in the image on the right.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Routing Flip-Chip Bumps A-31
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To widen the power and ground RDL nets to fill the available space between other RDL nets
and bump cells, use the create_rdl_power_extension command. The command avoids
creating DRC violations on the newly widened nets. You can also use this command to
remove widened RDL nets to power and ground pads if the nets were created earlier by the
create_rdl_power_extension command. The following example removes any existing
widened RDL nets created by the create_rdl_power_extension command on layer M9.
The second command creates new, widened nets to RDL power and ground bump cells on
layer M9 where space is available.
icc_shell> create_rdl_power_extension -layer M9 -mode remove
1
icc_shell> create_rdl_power_extension -layer M9 -mode new
Power Net: VDD
Ground Net: VSS
1
Use the -width_variation {variation length} option to control the change in wire
width within the specified length of the RDL route. If you set the variation to zero, the tool
creates the RDL extension such that the wire maintains the same width throughout the route
extension, or decreases in width, but does not increase and decrease in width. Use the
-from_previous_extension true option to create an RDL power extension by connecting
to an existing extension.
Figure A-16 shows the layout result after specifying create_rdl_power_extension
-width_variation {1 20}. The option specifies that the width for the RDL routing net can
decrease by one micron for every 20 microns of route length.
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Routing Flip-Chip Bumps A-33
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
If you do not specify the -from_metal option, the command automatically searches for the
pin that is closest to the top layer and creates a stacked via on the pin. If there is inadequate
space to create a stacked via on the closest pin, the command searches for the next closest
pin. If you do not specify the -to_metal option, the command uses the top metal layer as
the redistribution layer.
If an object blocks the access to a pad pin, you can create an extension wire to connect the
pad pin and the stacked via. The -extend_layer, -min_length, and -max_length options
specify the layer on which to create the extension wire and the minimum and maximum
length for the extension wire. After creating the stacked via, the tool checks that the
extension wire meets the constraint specified by the -min_length and -max_length
options.
The following example creates a stacked via and an extension wire between the via and the
pad pin. The extension wire is created on the M8 layer and is between 10 and 100
technology file units in length.
icc_shell> create_stack_via_on_pad_pin -min_length 10 \
-max_length 100 -extend_layer M8
Figure A-17 shows the results of the preceding command on four different pad pins.
Figure A-17 Stacked Vias
Before After
create_stack_via_on_pad_pin create_stack_via_on_pad_pin
Setting this variable to the default of false treats bump and cover cells as physical-only
cells.
2. Specify the target nets for shielding with the set_net_routing_rule command.
icc_shell> set_net_routing_rule \
-rule rdl_net_shielding {sd[0] sd[1] sd[2] sd[3]}
3. Assign the net to connect to the shield with the set_route_rdl_options command. By
default, the RDL router uses the ground net with the largest number of ports as the
shielding net. This example also sets the width of the strap that connects the shield to the
VSS net or bump cell.
icc_shell> set_route_rdl_options -layer_bump_spacings {M8 2.5 M9 5} \
-shielding_net VSS -connect_edge_center false \
-layer_tie_shield_widths {M9 5}
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Using Flip-Chip Structures in Cover Macros A-35
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
5. (Optional) If the RDL routes require further optimization, use the push_rdl_route and
optimize_rdl_route commands to refine the layout.
Figure A-18 shows a bump cell and RDL route before and after adding the shield.
Figure A-18 RDL Net Before and After Shielding
Figure A-19 shows two different design implementations that contain tie straps; the left
image uses a tie strap width of 5 microns, and the right image uses a tie strap width of 15
microns.
Figure A-19 RDL Net With Two Different Tie Shield Widths
set_route_rdl_options \ set_route_rdl_options \
-layer_tie_shield_widths {M9 5} -layer_tie_shield_widths {M9 15}
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Creating RDL Net Shielding A-37
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
coverage. The command also reports the average shielding ratio for the shielded nets, and
the total shield length divided by the total shielded net length.
In the previous example, the create_rdl_shield command reported the following shield
coverage for net sd[3]:
Shielded 76% side-wall of (sd[3]) in layer M9
Figure A-20 shows the pad connection for net sd[3]. Note that an obstruction prevented the
tool from completely surrounding the target net with a shield. Use the push_rdl_route and
optimize_rdl_route commands to adjust the layout to create additional routing resources
for net shields.
Figure A-20 Shield With Obstruction
You can also control the type of endcap that is used to connect the RDL route to the pad or
vias. Use the -connect_pad_without_endcap option with the set_route_rdl_options
command to specify whether the tool inserts a tapered endcap or creates the connection
without an endcap. This setting is also honored by the push_rdl_route and
optimize_rdl_route commands.
After setting the RDL routing option, verify the option setting with the
report_route_rdl_options command. The report displays the nets specified by the
set_route_rdl_options -route_to_ring_nets command.
icc_shell> report_route_rdl_options
****************************************
Report : report_route_rdl_options
Design : floorplan_init
Version: J-2014.09
Date : Wed Aug 13 16:04:49 2014
****************************************
----------------------------------------
RDL routing options:
----------------------------------------
...
Route to ring Nets: VDD VSS
Command Description
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Connecting Floating Bump Cells to Ring Nets A-39
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Command Description
Command Description
AppendixA:A:Using
Chapter Usingthe
theFlip-Chip
Flip-ChipFlow
Flow
Summary of the Flip-Chip Commands A-41
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
B-1
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
DFA
Control Center
Tabs
Actions
Module Object
Blocks
Block-to-Block
Connections
Block-to-I/O
Connections
Macro-to-Macro
Flylines
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Starting the Data Flow Analysis Tool B-3
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Note that you should not save your design with the save_mw_cel command while DFA is
active. To save your design, first exit DFA by choosing File > Exit DFA from the DFA Control
Center, then use the save_mw_cel command to save your design.
The tool searches the design hierarchy and displays module object blocks for the modules
that meet your specified criteria.
You can also expand blocks by selecting them in the GUI. To expand individual module
object blocks,
1. Select the block by clicking inside the block. The block outline changes to a dashed line.
2. Choose Actions > Expand all children from the DFA Control Center, or click the right
mouse button and select Expand All Children from the context menu.
Figure B-2 shows the layout window before and after selecting the top module object block
and expanding the child modules.
Module object blocks for black boxes are displayed with a dashed line. Each module object
block for a black box is labeled LBB for a logical black box or PBB for a physical black box.
Figure B-3 shows a design with four module object blocks displayed; two of the blocks are
black boxes. The lower-left block is a physical black box, and the lower-right block is a
logical black box.
Figure B-3 Data Flow Analysis With Black Boxes
Alternatively, you can merge all modules into the top level by choosing Actions > Merge all
module(s) to top from the DFA Control Center.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Expanding and Merging Logic Modules B-5
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To restore the module shape, location, group, and note information, Select File > Load
modules from a file and select a file you saved previously. The tool restores the shape and
location information, and attaches the notes to the module object blocks.
The tool uses the current hierarchy color to highlight the macros. In Figure B-5, the mirror
hierarchy colors setting is also active.
Figure B-5 Show Macros of Selected Blocks
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Examining Hard Macro Placement B-7
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To change the hierarchy color of the hard macros in the currently selected block, choose
Actions > Set hierarchy color in the DFA Control Center. If you enabled the “Mirror hierarchy
colors options” in the Settings tab, the tool also changes the color of the module object
block. Figure B-6 shows that layout after enabling “Mirror hierarchy colors” and choosing
Actions > Set hierarchy color to change the selected blocks to the next available color.
Figure B-6 Changing Hierarchy Color
To clear the color, select Actions > Unset hierarchy color in the DFA Control Center.
To show connections between all module object blocks, choose Settings > “Show all module
connections” in the DFA Control Center panel. Connections between unselected modules
are displayed with light aqua-green connectivity lines. To move the module names to the
top-left corner of the rectangle, choose Settings > “Show module name top left”. Long
module names in the top-left corner are truncated to 10 characters. To see the full module
name in the InfoTip, hold the pointer over the module. Figure B-8 shows layout with these
option settings enabled.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Examining Net Connectivity B-9
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To get more details on the net connections between module object blocks,
1. Move the pointer over the flyline and pause until the flyline displays as a dashed white
line.
2. Click the flyline to open the Connection Details dialog box.
Figure B-9 shows the Connection Details dialog box that is displayed after clicking the flyline
between modules u_m and u0_1. The dialog box lists 120 nets as inputs to block u_m, and
475 nets as outputs from block u_m.
To display net flylines in the layout for specific nets, select one or more nets in the dialog
box. As you select the nets, the layout view is updated to display the flylines for the selected
nets as shown in Figure B-10.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Examining Net Connectivity B-11
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Note that you cannot select input and output nets at the same time.
To remove nets from the list of nets, select the net names and click Filter Nets. To restore
the nets to the list, choose Tools > Manage net filters from the DFA Control Center, select
the net names and click Remove.
To filter the lists of nets by fanout, enter the minimum fanout and maximum fanout values
and click Search. The list is updated to show only nets that meet the fanout criteria.
To group net names for a bus into a single entry, enter a regular expression in the Group Bus
Prefix box and select the check box. The default expression is [[0-9]+]. You should modify
the expression based on the bus naming convention for your design. When the Group Bus
Prefix option is active, click Show Non-bus Signals to include non-bus signals in the list of
nets. Figure B-11 shows the Connection Details dialog box before and after grouping the
nets by bus prefix by using the expression __[0-9]+_.
Figure B-11 Nets Before and After Bus Grouping
To list nets that contain a specified string, enter the search string regular expression in the
search box and click the Search button. For example, to search for all nets that contain the
string “HR”, enter .*HR.* as the search string.
The tool shows the flylines from the selected macros or I/Os that meet the criteria specified
in the dialog box as shown in Figure B-12. Flylines between macros and I/Os are displayed
in yellow and flylines between macros are displayed in pink. Make sure that at least one of
the Macro-Macro Flylines, Macro-I/O Flylines, I/O-I/O Flylines or Flylines Between Selection
options is selected.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Tracing Macro and I/O Connections B-13
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To change the flylines that are displayed, select a new macro or change the selection
options in the dialog box and click Show Flylines. The Min Bus Pin Width option limits the
display to flylines that are part of a bus of the specified width or a larger width. The Num of
Flylines option limits the number of flylines displayed to the specified value. When you enter
a value N for the Num of Flylines option, only N flylines with the largest number of signals
are shown.
Click Save To File to write out a file containing the sources and destinations for the currently
displayed flylines. You can use this file to examine the connections to the currently selected
macros. Click Extract Data to rerun data extraction to expand the currently available register
levels and gate levels for flyline display. Click the Help button for more information about this
dialog box.
To display flylines that originate from a common driver and drive multiple macros,
1. Select one or more macros
2. Select the Common drivers (Macros only) option
3. Click Show Flylines
The tool redisplays the layout and shows flylines that drive both the selected macros and
other macros. In Figure B-13, the selected macro shares drivers with the other three macros
in the group.
Figure B-13 Macros With Common Drivers
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Tracing Macro and I/O Connections B-15
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
*********************************************
Input port to modules connections
*********************************************
u0_0 has 3 connections from input ports
tsti_0__SE_
test_cgtm
n94
...
The dialog box provides different options for tracing registers between macros. To show the
flylines, select Show Flylines To Levels, otherwise only the register locations are displayed
in the layout. To display flylines and registers for paths that contain one register, select Reg
Level 1, and so on. Select Dest Pins to show the flyline from the destination pin. To limit the
flyline display to only flylines between selected macros, select Flylines Between Selection.
After selecting the options, click Highlight Levels to update the Layout view with the new
selections.
To view flylines for individual paths that contain registers, click Show Level Info. As you
select a net in the Register Highlight Level Information dialog box, the tool displays a flyline
for each register-to-register or macro-to-register segment. Figure B-14 shows three paths
highlighted: a path with zero register levels, a path with one register level, and a path with
two register levels.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Highlighting Registers in Macro-to-Macro Paths B-17
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To sort any column in ascending or descending order, right mouse click the column header
and select the sort direction. The dialog box lists net connections with 0, 1, 2, and 3 levels
of registers. To select more than one path, hold the Ctrl key while selecting additional nets.
Click Select All or Unselect All to change the selection, or Remove to remove the selected
nets from the list. You can recover removed nets by closing and reopening the dialog box.
To save the paths to a file, click Save To File.
After you click Set Selected or Set All, the tool provides the selected modules to the
-hierarchy_gravity_blocks option of the set_fp_placement_strategy command. For
more information about hierarchy gravity, see “Hierarchical Gravity” on page 6-6.
The tool opens the Macro Array Editor and places the selected macros into the array. The
macros are aligned by their lower-left corners. The instance names of the selected macros
are displayed in the Selected Macros list.
Note that if the array dimensions are too large for the placement area, the tool displays a
warning at the top of the Macro Array Editor.
Figure B-15 shows the macro array editor window. For more information about this window,
click Help.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Setting Placement Gravity for Modules B-19
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Add or remove
rows or columns
Adjust order or
orientation of
array elements
You can display the name of a macro in the Macro Array Editor by holding the pointer over
the macro in the array. To select a macro in the array, you can click the macro in the Macro
Array Editor or click its name in the Selected Macros list.
To adjust the view displayed in the Macro Array Editor, click the zoom-in or zoom-out button
at the top of the dialog box and drag a rectangle in the Array Pattern panel. Click the fit
button to fit the array in the view. You can display or hide the connection flylines by selecting
or deselecting the Show Flylines option in the bottom left corner of the window.
You can use the macro array editor window to
• Add or remove rows and columns in the array
• Adjust the order and orientation of array elements
• Drag and drop a macro into an empty location in the array
If you need to reverse the most recent edit, click the Undo button. You can sequentially
reverse multiple edits.
You can add or remove rows and columns in the array. You can remove only an empty row
or column. You can also adjust the channel spacing between rows and columns. To add a
row above a macro, select the macro and click the Add Row button. To add a column on the
left side of a macro, select the macro and click the Add Column button. To remove a row,
select the row and click the Remove Row button. To remove a column, select the column
and click the Remove Column button.
To adjust the channel size for a row or column,
1. Click the row or column channel between the macros.
2. Enter the new spacing value in microns in the Set Row/Column Spacing dialog box.
3. Click OK.
You can reorder the array elements by moving macros from row to row or from column to
column. You can also let the tool sort the macros automatically.
To move a macro in the array,
1. Select the macro.
2. Click the button for the direction you want to move the macro: Up, Down, Left, or Right.
You can also drag and drop the macro to an empty location in the array.
To sort the array by instance name, click the Auto Sort button.
To flip a macro, select the macro and click the Flip button. If you click the Flip button multiple
times, the tool alternately flips the macro horizontally and vertically.
You can reconfigure the entire array by defining new dimensions for the array.
To reconfigure the macro array,
1. Click the Reconfigure Array button.
2. Enter the new values for row, column, row spacing and column spacing in the dialog box.
3. Click OK.
When you are satisfied with the macro array, you can apply the configuration to the macros
in your design by updating macro placement.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Editing Macro Arrays B-21
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To update the macro placement in the layout view, click Apply. The tool applies the updated
location, spacing, and orientation information to the corresponding macros in the layout
view, and then snaps the group to the lower-left corner of the placement grid.
Note that if any of the macros in the array have an is_fixed attribute value set to true, the
tool prompts you to unfix the macros and continue. Click OK to unfix the macros, and Apply
to apply the changes. To cancel the edit, click Cancel.
Alternatively, you can save your edits by creating a relative placement group. For details,
see “Setting Macro Group Constraints” on page B-25.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Editing Macro Placement in the Layout View B-23
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
To flip or rotate a macro or group of macros, select the macros and click Clockwise 90,
Counter CW 90, Flip by X axis, or Flip by Y axis. If you select a group of macros, the origin
of the rotation or flip is the center of the group.
When you are satisfied with the macro placement, you can create a relative placement
group. For more information, see “Setting Macro Group Constraints” on page B-25.
If the tool finds matching macros, it orients the macros in the selected module and moves
them to replicate the macro arrangement in the model module.
To close the data flow analysis window, choose File > Exit DFA from the DFA Control
Center.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Setting Macro Group Constraints B-25
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
3. Configure the window behavior as shown in Figure B-20 and click OK to save the
configuration.
Figure B-20 CDE Window Behavior
Save modules to a file Saves the settings in the Settings tab and the positions of the DFA
module object blocks to a file on disk. You can load the file at a
later time to restore the layout.
Load modules from a file Loads a previously saved DFA layout file and restores the
positions of the DFA module object blocks to their previously saved
locations. Settings from the Settings tab are also restored.
Load modules from plan Loads only module object blocks from plan groups. If your design
groups does not contain plan groups, this option is not available.
Write module report Writes a report that lists the number of input port-to-module
connections, and module-to-output port connections for each
module object block. The report also lists the number of
submodules, number of macros, macro area, number of standard
cells, standard cell area, number of pins/ports, and other
information for each module object block.
Write verbose module report Writes a detailed report of input port-to-module connections,
module-to-module connections, and module-to-output port
connections for each module object block. The report includes the
information generated by the “Write module report” action, and the
list of nets that connect the module object blocks and I/O ports.
Exit DFA Closes the DFA Control Center and exits data flow analysis.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Data Flow Analysis Control Center Reference B-27
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Auto hierarchy detection Searches for modules that meet the search criteria and displays
them as object module blocks in the GUI. The tool prompts you for
the minimum and maximum number of macros per block, and
minimum and maximum module area percentage.
Data flow flylines Displays flylines between macros and I/Os that meet the specified
criteria. The tool prompts you for the maximum fanout and
maximum number of register and fanout levels to trace before
displaying the flylines.
Manage net filters Opens the Net Filters dialog box, where you can add or remove net
name wildcard filtering for module-to-module and module-to-IO
port connection traces.
Edit macro array Opens the Macro Array Editor dialog box, which you can use to
change the architecture of the macro array and configure the
position or orientation of macros in the array.
Macro Toolbox Opens the Macro Editing Toolbox dialog box, which you can use to
align, distribute, and rotate the selected macros.
Copy macro placement Opens the Copy Macro Placement dialog box. Use this dialog box
to copy macro placement from the currently selected module
object block into another module object block. The tool orients the
hard macros of the selected destination module and moves them
to replicate the macro arrangement of the source module.
Select macros of selected Adds all macros of the currently selected module object blocks to
modules the current selection.
Remove group constraints Opens a dialog box that lists the current relative placement
constraints. Choose a macro group constraint and click Remove to
remove it, or click Remove All to remove all macro group
constraints.
Create movebound from Creates a placement movebound from one or more module object
module blocks. All hierarchical and leaf cells contained in the selected
modules are placed into the new movebound.
Add to gravity list Adds the currently selected module object blocks to the list of
blocks for applying hierarchy gravity.
Set hierarchy gravity Opens a list of candidate modules for hierarchy gravity. Use the
buttons at the bottom of the dialog box to set or remove hierarchy
gravity from the selected blocks.
Expand all children Expands the currently selected module object blocks and show the
child modules for the blocks, and hide the selected block.
Expand all children w/ macros Expands the currently selected module object blocks that contain
macros and show the child modules for the blocks, and hide the
selected block.
Choose children to expand Opens a list of the child modules for the currently selected module
object blocks. Choose one or more children and click Apply to
perform the expansion.
Select related modules Adds all siblings of currently selected module object blocks to the
selection.
Merge module(s) to parent Merges selected module object blocks to their respective parent
modules and hide the selected modules.
Merge module(s) to top Merges all visible modules and show only the TOP module.
Group selected modules Creates a group of module object blocks from the selected blocks.
Ungroup selected groups Removes the group and expand the group into individual module
object blocks.
Show detail info Opens a dialog box that contains information about the selected
module object blocks. Information includes the number of
submodules, number of macros, macro area, number of standard
cells, standard cell area, number of pins/ports, whether
hierarchical gravity is set, and the connections between this
module and other modules.
Edit module note Creates a note for information about the module object block or
group. If a note already exists, this function opens the existing note
for editing.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Data Flow Analysis Control Center Reference B-29
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
Set hierarchy color Assigns a new color to the selected modules and all children with
the set_hierarchy_color -cycle_color command.
Unset hierarchy color Removes any assigned hierarchy color from the selected modules
and any children with the unset_hierarchy_color command.
Ports of selected modules Adds to the current selection all physical I/O ports that are
connected to the currently selected modules.
Macros of selected modules Adds to the current selection all macros of currently selected
modules.
Deselect macros of selected Removes from the current selection all macros that belong to the
modules currently selected module object blocks.
Macros of visible modules Adds to the selection all macros that belong to the currently visible
modules.
Select only DFA objects Changes the GUI settings to hide non-DFA elements and only
allow selection of DFA-related elements such as modules, groups,
I/O blocks, ports and macros.
Allow port selection Enables the selection of I/O ports in the GUI.
Auto select macros Automatically selects the macros within the module object block in
the Layout window when you select the module object block itself.
Show only bus nets Displays flyline traces between modules that are bus nets. Buses
are defined by the bus_naming_style setting. Flylines for nonbus
signals are hidden.
Show IO connections Displays connections between module object blocks and I/O ports
in the display.
Show module info Displays the number of hard macros and utilization in the bottom
left corner of the module.
Show module name top left Displays the name of the module at the top left of the block, instead
of the center of the block
Mirror hierarchy colors Draws module object blocks by using the same colors assigned to
hierarchies with the set_hierarchy_color command.
AppendixB:B:Data
Chapter DataFlow
FlowAnalyzer
Analyzer
Data Flow Analysis Control Center Reference B-31
IC
IC Compiler™
Compiler™ Design
Design Planning
Planning User
User Guide
Guide L-2016.03
Version L-2016.03
B report_fp_placement 6-51
report_qtm_model 4-13
black boxes
set_qtm_global_parameter 4-12
create FRAM view 4-8
set_qtm_technology 4-12
flattening existing instances 4-6
set_switching_activity 8-71
managing the properties for 4-9
shape_fp_blocks multiple instantiated
sizing by gate equivalence 4-7 modules
block level designs, performing simultaneous shaping plan groups in (shape_fp_blocks)
placement and pin assignment 6-9 6-67
update_voltage_area 6-64
conventions for documentation 1-xxi
C copy_floorplan command 2-32
clock
creating
latency 9-5, 12-30
pin guides 11-27
clock planning
customer support 1-xxii
performing plan group-aware clock tree
synthesis 9-8
commands D
copy_floorplan 2-32
create_qtm_model 4-12 DEF file
create_voltage_area 6-61 reading 2-30
estimate_fp_area 3-10
flatten_fp_black_boxes 4-6
get_fp_wirelength 6-54
F
get_voltage_areas 6-64 floorplan file, reading 2-32
pack_fp_macro_in_area 6-57
read_def 2-30
read_floorplan 2-32
G
read_saif 8-71 get_voltage_areas command 6-64
IN-1
IN-1
IC Compiler™ Design Planning User Guide Version L-2016.03
M Q
MinChip quick timing model for black boxes
using multivoltage designs 3-10 command summary 12-12
MinChip technology using Tcl commands to create 4-12
performing steps inside 3-3
multiple instantiated modules
placement of 6-65 R
multivoltage designs read_def command 2-30
using in MinChip 3-10 read_floorplan command 2-32
reading
DEF file 2-30
O real clock latencies, creating budgets for 12-30
optimizing pins for block level designs 6-10
overview of hierarchical models 5-2
S
soft macros
P discarded pins 11-8
packing hard macros 6-57 uncommit physical hierarchy 13-1
physical data SolvNet
copying 2-32 accessing 1-xxii
physical hierarchy documentation 1-xx
commit 13-1 switching activity, annotating 8-71
pin assignment
IN-2
Index IN-2
IC Compiler™ Design Planning User Guide Version L-2016.03
T V
timing budgeting voltage areas
creating real clock latencies 12-30 planning location and shape of 6-59
performing in design planning 12-1 removing commands
pre-budget timing analysis 12-4 remove_voltage_area 6-64
prerequisites 12-3 supporting physical boundary scenarios 6-63
running 12-7 updating 6-64
U
update_voltage_area command 6-64
IN-3
Index IN-3