Innovus Foundation Flows Guide: Product Version 20.12 September 2020
Innovus Foundation Flows Guide: Product Version 20.12 September 2020
Innovus Foundation Flows Guide: Product Version 20.12 September 2020
Cadence Design Systems, Inc. (Cadence), 2655 Seely Ave., San Jose, CA 95134, USA.
Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence)
contained in this document are attributed to Cadence with the appropriate symbol. For queries
regarding Cadence’s trademarks, contact the corporate legal department at the address shown
above or call 1-800-862-4522.
Restricted Print Permission: This publication is protected by copyright and any unauthorized use
of this publication may violate copyright, trademark, and other laws. Except as specified in this
permission statement, this publication may not be copied, reproduced, modified, published,
uploaded, posted, transmitted, or distributed in any way, without prior written permission from
Cadence. This statement grants you permission to print one (1) hard copy of this publication subject
to the following conditions:
1. The publication may be used solely for personal, informational, and noncommercial purposes;
2. The publication may not be modified in any way;
3. Any copy of the publication or portion thereof must include all original copyright, trademark,
and other proprietary notices and this permission statement; and
4. Cadence reserves the right to revoke this authorization at any time, and any such use shall be
discontinued immediately upon written notice from Cadence.
Disclaimer: Information in this publication is subject to change without notice and does not
represent a commitment on the part of Cadence. The information contained herein is the proprietary
and confidential information of Cadence or its licensors, and is supplied subject to, and may be
used only by Cadence’s customer in accordance with, a written agreement between Cadence and
its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and
expressly disclaims, any representations or warranties as to the completeness, accuracy or
usefulness of the information contained in this document. Cadence does not warrant that use of
such information will not infringe any third party rights, nor does Cadence assume any liability for
damages or costs of any kind that may result from use of such information.
Contents
About This Manual 8
Innovus Stylus Common UI Product Documentation 10
1 11
Overview 11
Introduction to Foundation Flow 11
Foundation Flow Overview Diagram 12
Before You Begin 12
Input for Running Foundation Flows 13
Additional Inputs for Running Foundation Flows 13
Flow Variations 14
About the Flow Documentation 15
2 16
TCL Variables 16
Installing Foundation Flows 16
Starting Foundation Flows 16
Describing setup.tcl 18
Defining Floorplanning, Scan, CTS, SDC, and Routing Layer 19
Defining Hierarchical Partition Information 20
Defining Library and Technology File 22
Example of Library and Technology File 23
Defining RC Corner Information 23
Example of RC Corner Information 26
Defining Delay Corner Information 26
Example of Delay Corner Information 30
Defining Constraint Modes and Analysis Views 30
Example of Constraint Modes and Analysis Views 31
Defining OpenAccess 33
Mailing Results and Updates 34
Miscellaneous Variables 35
Defining Extraction Options 36
Describing innovus_config.tcl 37
Defining Noise Settings 38
pre_cts_tcl_3a 209
pre_init_tcl_3a 209
pre_place_tcl_3a 210
7 217
Hierarchical Flow 217
Introduction to Hierarchical Implementation Flow 217
Overview of Hierarchical Implementation Flow 218
One-Pass and Two -Pass Hierarchical Flows 218
Before You Begin - Hierarchical Implementation Flow 218
Inputs for Hierarchical Implementation Flow 219
Hierarchical Partition Flow 220
Implementing Top-Level and Blocks Concurrently 221
Using Interface Logic Models 221
Using the Flattened and Unflattened ILM States 222
Performing Multi-Mode Multi-Corner Timing Analysis and Optimization 223
Managing Clock Latencies 223
Deriving Clock Tree Estimation for Budgeting and CTS 224
Preventing Hierarchical Signal Integrity Issues 228
About the Hierarchical One-Pass ILM Flow and Diagram 228
Hierarchical Foundation Flow with FlexILM 229
Setting Up the Flow 230
Single Pass Hierarchical Flow 231
FlexILM Generation and Top preCTS Optimization with FlexILM 231
Reassigning PTN Pin and Rebudgeting Timing 232
Results for Hierarchical Flow Implementation 232
8 234
Tags for Flow 234
9 249
Sample Script - Code Generator 249
Executing the Flow 249
Sample Single Script Flow 258
Provides information specific to the forms and commands available from the
Innovus graphical user interface.
Innovus Database Access Command Reference
Lists all of the Innovus database access commands and provides a brief description of
syntax and usage.
Innovus User Guide
Describes how to install and configure the Innovus software, and provides strategies for
implementing digital integrated circuits.
Mixed Signal Interoperability Guide
Describes the digital mixed-signal flow.
README file
Contains installation, compatibility, and other prerequisite information, including a list of
Cadence Change Requests (CCRs) that were resolved in this release. You can read this file
online at downloads.cadence.com.
Overview
In this section we cover a basic introduction to how foundation flows are implemented in Innovus.
Introduction to Foundation Flow
Foundation Flow Overview Diagram
Before You Begin
Input for Running Foundation Flows
Additional Inputs for Running Foundation Flows
Flow Variations
About the Flow Documentation
When the tasks described in this guide are complete, you should have a flat design that is ready for
DRC and LVS checks and other sign-off tasks.
This flow is a recommended starting point for you to work with designs for a block or a flat chip.
Ultimately, your design might have a different final set of commands, owing to your specific
customization for your design or technology needs.
For more information, see the following sections of the Innovus User Guide
Floorplanning the Design
Synthesizing Clock Trees
RC Extraction
RC scaling factors
OCV derating factors
Metal fill parameters
Filler cell names
Tie cell names
Welltaps and Endcaps
Clock gating cell names
Spare instance names
JTAG instance names
JTAG rows
LSF queue
Dont Use Cells
Delay Cells
CTS Cells
Flow Variations
Based on the timing model you use, there are three variations of the flat implementation flow:
MMMC: the flow uses the MMMC timing throughout the flow. You may use the MMMC flow in
designs that require optimization at multiple operating modes or at multiple corners.
The following two are supported for backward compatibility but are not recommended:
Default: the flow uses the default timing model until the final Timing Analysis step, when it
changes to MMMC timing. Though the default flow is a non-MMMC flow, it changing to MMMC
timing for the final timing analysis step gives the most accurate sign-off timing.
Postroute MMMC: the flow uses the default timing model for the Preroute portion of the flow
and MMMC timing after Routing. You may use the Postroute MMMC flow in designs that
require improved co-relation with third-party tools.
Note: Because MMMC timing incorporates timing information for more modes and corners, the
postroute MMMC and MMMC flows may incur memory and run-time degradation.
TCL Variables
In this section we cover the Tool Command Language (Tcl) variables and descriptions for foundation
flows.
The section covers:
Installing Foundation Flows
Starting Foundation Flows
Describing setup.tcl
Defines the variables to use in the flow. This script is unique for each design and is the only script that
is required. It contains variable settings that define the necessary information to drive the foundation
flow; including design data, library information, and flow control.
The following variables are defined in setup.tcl. They are put into an array named vars.
To use them enter:
set vars variable_name value
Note: The vars in the column Variable Name in italics are actually placeholders and can be substituted
with your own values. For example in rc_max,cap_table the value rc_max is a placeholder and can be
a value you want to specify in cap_table.
You can also specify a view_definition_tcl file in place of the MMMC vars. For this, you must define
either of the following:
vars(view_definition_tcl)
OR
vars(library_sets), vars(rc_corners), vars(delay_corners), vars(constraint_modes) and
vars(setup/hold_analysis_view) variables.
def_files name Specify the name of the initial DEF file. The fp_file is the alternate
recommended file.
cts_spec list This file is optional. If omitted Innovus will use the SDC to build the
clock tree.
max_route_layer integer Specify the number of routing layers
process integer Specify the process node between min=10, max=250 (nm)
scan_def name This is optional, specify the name of the Scan DEF file
dbs_dir string Specify the string of the database directory (the default is DBS)
fp_tcl_file text script to build floorplan (overrides fp_file)
fp_tcl_proc text TCL procedure to build floorplan (overrides fp_file, fp_tcl_file)
rpt_dir string Specify the string of the report directory (the default is RPT)
<step>,rpt_dir string Specify the report directory for a specific step. If this is not set,
vars(rpt_dir) is used.
script_root string Specify the location of SCRIPTS directory (the default is SCRIPTS)
design name Name of the design (required)
add_tracks boolean Re-generate tracks as against using what is in the incoming
floorplan. The default value is false.
set vars(budget_mode) giga_opt float Specify this variable to enable timing budgeting with
GigaOptvirtual.
Possible values are giga_opt and
proto_net_delay_model.
Default: giga_opt
Defining OpenAccess
Mailing Results and Updates
Miscellaneous Variables
For edi_config.tcl variables see Describing innovus_config.tcl
For examples see Example Settings for Each Script
Note: ** For backward compatibility, the script retains both the variables.
Also see Example of RC Corner Information
For other setup.tcl variables, see:
Defining Floorplanning, Scan, CTS, SDC, and Routing Layer
Defining Library and Technology File
Defining Delay Corner Information
Defining Constraint Modes and Analysis Views
Defining OpenAccess
Mailing Results and Updates
Miscellaneous Variables
set vars(best,T) 0
*Derating Factors
The valid derating factors are described below:
set List of power domains. This allows bind to a specify delay corner
vars(dc,ls,power_domains) AND library set
Support for Power Domain - Per Delay Corner AND Per Library Set
Variable Name Usage Description
set vars(library_sets) List of library sets
set vars(delay_corners) List of delay corners
set vars(power_domains) List of power domains to bind
set vars(dc1,pd1,early_library_set) List of delay corners, power domains, and early library
sets
set vars(dc1,pd1,late_library_set) List of delay corners, power domains, and late library
sets
set vars(dc2,pd2,library_set) List of delay corners, power domains, and library sets
set slow_worst
vars(func_slow_worst,delay_corner)
set func_mode
vars(func_slow_worst,constraint_mode)
set func_mode
vars(func_fast_best,constraint_mode)
set slow_worst
vars(test_slow_worst,delay_corner)
set test_mode
vars(test_slow_worst,constraint_mode)
set test_mode
vars(test_fast_best,constraint_mode)
Defining OpenAccess
Defining OpenAccess
When running the flow using OpenAccess libraries there are two ways in which to initalise the flow.
With a netlist and floorplan or with an already initialised OA view.
If the design database needs to interoperable with virtuoso it may be necessary to use the setOaxMode
command. This should be included in a plug script.
For other setup.tcl variables, see:
Defining Floorplanning, Scan, CTS, SDC, and Routing Layer
Defining Library and Technology File
Defining RC Corner Information
Miscellaneous Variables
Variable Name Value Type Usage Description
flat [off, partial, Controls the level of script unrolling
full]
verbose boolean Adds comments when true
tags,verbose boolean Adds tag comments when true
tags,verbosity_level [low | high] When high adds comments for ALL possible tags in each
flow script
log_dir name Directory for log files
plug_dir string Directory for plug-ins
skew_buffers list Specify list of buffers to use during useful skew
set boolean Supports FlexILM for preCTS top-level timing closure.
vars(enable_flexilm)
Default: ILM based flow
Describing innovus_config.tcl
This is an optional configuration file intended to support design projects where the setup.tcl is shared
between team members and defines common design data such as library, timing, and technology
information and the innovus_config.tcl is a local file that contains flow related information that is
unique to a particular block or run.
The following variables are put in an array named vars and defined in innovus_config.tcl.
To use them enter:
set vars variable_name value
Note: The vars in the column Variable Name in italics are actually placeholders and can be substituted
with your own values. For example in rc_max,cap_table the value rc_max is a placeholder and can be
a value you want to specify in cap_table.
The following types of variables are covered in this section:
Defining Noise Settings
Defining Power and Ground Nets
Defining Multi-Threading or Distributed Processing
Defining CCOpt Variables
Example of Distributed Processing
Defining LP Flow Variables
Defining Optional Variables
Defining Tie and Filler Cells
Defining Welltap and Endcap Specifications
Defining Welltap and Endcap Specifications (Per power domain basis)
Reporting Power
Defining Hier ILMs
Defining Flow Control
Defining Command Mode Variables
Defining ccopt_design for Clock Tree Construction
Defining CCOpt Top and Bottom Layers
set vars(local_cpus) 4
set vars(remote_hosts) 4
set vars(custom,script) /grid/sfi/farm/bin/bsub <run limit>
<project name> <resource string> <queue name>
Example 2
The tcl file view_definition.tcl will be created to define RC Corners and to update the
Delay Corners.
2. Variables vars(cpf_file) + !vars(cpf_timing) will not set the init_cpf_file but will set
the init_mmmc_file. The variable init_design will be executed which means that the timing will be
3. No CPF file. init_cpf_file will not be set but init_mmmc_file will be set and init_design will be
executed which means that timing will be derived from mmmc_file.
So, when cpf_file is set and cpf_timing is NOT defined, we default to (1) (assuming the CPF has full
timing). The user must specify vars(cpf_timing) false to get flow (2)
For other edi_config.tcl variables, see
Defining Extraction Options
Defining Noise Settings
Defining Power and Ground Nets
Defining Multi-Threading or Distributed Processing
Defining Optional Variables
Defining Tie and Filler Cells
Defining Welltap and Endcap Specifications
Defining Welltap and Endcap Specifications (Per power domain basis)
Reporting Power
Defining Hier ILMs
Defining Flow Control
Defining Command Mode Variables
For setup.tcl variables see Describing setup.tcl
For examples see Example Settings for Each Script
dont_use_list list Specifies the list of dont use cells This file is sourced
during the init step, so it
should contain
setDontuse commands.
Examples
The variable vars (power_analysis_view) is the analysis_view that is used for power optimization. It is
one of the defined views in the setup.tcl. It is used in the init step:
set_power_analysis_mode -analysis_view $vars(power_analysis_view)
Following is an example where report power is called at the end of each step and when vars
(report_power) is true:
report_power -view $vars(power_analysis_view) -outfile
$vars(rpt_dir)/$vars(step).power.rpt
References
For other edi_config.tcl variables, see:
Defining Extraction Options
Defining Noise Settings
Defining Power and Ground Nets
Defining Multi-Threading or Distributed Processing
Defining LP Flow Variables
Defining Tie and Filler Cells
Defining Welltap and Endcap Specifications
Defining Welltap and Endcap Specifications (Per power domain basis)
Reporting Power
Defining Hier ILMs
Defining Flow Control
Defining Command Mode Variables
For setup.tcl variables see Describing setup.tcl
For more examples, see Example Settings for Each Script
valid timeDesign options
domain,checkerboard boolean Specify true or false in the checkerboard in well tap cells
domain,max_gap float Specify the maximum distance from the right edge of one
well-tap cell to the left edge of the following well-tap cell in
the same row
domain,cell_interval float Specify the maximum distance from the center of one well-
tap cell to the center of the following well-tap cell in the same
row
domain,pre_endcap cell_name Specify the Pre Endcap cells
domain,post_endcap cell_name Specify the Post Endcap cells
Reporting Power
Reporting Power
in_place_opt false
no_pre_place_opt false
place_opt_design true
In hierarchical flow, the final full flat timing analysis is done with the original constraints and it
does not take into account the block level constraint files (that may have been modified). Use -
preserveAssertions {true | false} to avoid issues related to buffer removal. It may be beneficial to
run the first pass of hold fixing with setup degradation disallowed to see how many hold violations
are left, and then check if the violations are real and decide how to proceed.
To enable leakage power optimization throughout the flow, use ‑leakagePowerEffort
{low | high}. An high effort may impact timing and will have an impact on run-time.
For pre-route optimization, set critical range to the percentage of sub-critical paths to be
optimized, for example, 0.2 or 0.5.
The high effort hold fixing should improve the quality of results at the expense of runtime.
Set CTS options; the recommendation is to route the clock nets during CTS. If some signals
should not be routed, set the clock nets option to false and use RouteClkNet true in the spec file.
clock_gate_clone false Choose True or False depending upon whether you want to clone
the gates
Set the routing options. The recommended options for multicut via insertion and litho driven
routing incur run-time penalties but yield advantages so they are included here. The
‑routeWithLithoDriven option is recommended for 45 nm but may also be used at 65 nm.
The flow default is to disable multi-cut via insertion. For 90nm and below, it is recommended to
insert multi-cut vias using set vars(multi_cut_effort) medium. This will come with a runtime
and memory penalty and will also affect QoR. The set vars(multi_cut_effort) can be set to
high if needed; expect an average of 5 percent coverage improvement with an average 10
percent runtime hit versus medium and will also affect TNS.
Set the noise analysis options. Existing CeltIC users should preserve existing settings if
applicable. Consult the SI Analysis application note for more information on these settings. You
can get the application note from your Cadence Support Representative.
Note: Leaf nets are the nets connected to the clock pins of the leaf cell (flop/latches). Non-leaf nets are
the nets that are not leaf nets; and they form the main part of the clock tree from the root down till the
leaf nets.
- vars(clock_gate_aware)
- vars(place_io_pins)
- vars(in_place_opt)
- vars(preserve_assertions)
- vars(leakage_power_effort)
- vars(dynamic_power_effort)
- vars(clock_gate_aware)
- vars(critical_range)
PreCTS
set vars(step) prects
These variables affect this step:
- vars(process)
- vars(preserve_assertions)
- vars(leakage_power_effort)
- vars(dynamic_power_effort)
- vars(clock_gate_aware)
- vars(critical_range)
- vars(useful_skew)
- vars(skew_buffers)
CTS
set vars(step) cts
- vars(route_clock_nets)
- vars(litho_driven_routing)
- vars(multi_cut_effort)
PostCTS
set vars(step) postcts
These variables affect this step:
- vars(process)
- vars(enable_cppr)
- vars(clock_gate_clone)
See Sample Single Script Flow for an example implementation.
Tags and plug-ins provide an easy method to both expand upon and customise the basic flows. In
this section we describe the pre-defined variables for plug-ins and tags. The section covers:
Defining Plug-in Variables
Commands that can be Tagged
post_init_tcl string The content of the file will be sourced after loading the
design
pre_place_tcl string The content of the file will be sourced after loading the
design but before running the placement step. Before
running the command place_opt_design
place_tcl string When specified, this file will replace the default
placement commands
post_place_tcl string The content of the file will be sourced after running the
placement step but before exiting the script. After
running the command place_opt_design
pre_prects_tcl string The content of the file will be sourced before loading the
CTS
post_prects_tcl string The content of the file will be sourced after pre-CTS
optimization.
cts_tcl string When specified, this file will replace the default
ccopt_design command
pre_cts_tcl string The content of the file will be sourced after placing the
design but before running designing the clock. Before
running the command ccopt_design
post_cts_tcl string The content of the file will be sourced after designing
the clock. After running the command ccopt_design
Specify the directory PLUG/post_cts.tcl
pre_postcts_tcl string The content of the file will be sourced before post-CTS
optimization
post_postcts_tcl string The content of the file will be sourced after post-CTS
optimization
pre_postcts_hold_tcl string The content of the file will be sourced before post-CTS
Hold Fixing
post_postcts_hold_tcl string The content of the file will be sourced after before post-
CTS Hold Fixing
pre_route_tcl string The content of the file will be sourced after loading the
CTS but before routing. Before running the command
routeDesign
post_route_tcl string The content of the file will be sourced after routing. After
running the command routeDesign
pre_postroute_tcl string The content of the file will be sourced before postRoute
Hold Fixing
post_postroute_tcl string The content of the file will be sourced after postRoute
Hold Fixing
postroute_spread_wires boolean The content of the file will be sourced after loading the
post routing design and spreading the wires
pre_signoff_tcl string The content of the file will be sourced before final static
timing analysis (STA)
post_signoff_tcl string The content of the file will be sourced after before final
static timing analysis (STA)
metalfill_tcl string When specified, this file will replace the default metal fill
commands
metalfill string Specify variable to define if and when to insertion
metalfill (pre_postroute, pre_postroute_si,
pre_signoff)
pre_model_gen_tcl string The content of the file will be sourced before running
FlexModel model generation
pre_assign_pin_tcl string The content of the file will sourced before running
partition pin assignment
Plug-in Usage:
To enable a plug-in, define the appropriate plug-in variable in the setup.tcl file. The software
sources the plug-in automatically at the appropriate time in the flow. For example:
set vars(post_cts_tcl) PLUG/post_cts.tcl
Example 1:
set vars(prects,opt_design,post_tcl) file
saveDesign $vars(dbs_dir)/prects1.enc
...
saveDesign $vars(dbs_dir)/prects1.enc
...
By setting, vars(flat) to full, the contents of the tag script get imported into the run script to create
a fully flattened script. Otherwise, there would simply be source file.
Example 2:
By default, time_design for place, cts, and route are skipped. If you want to enable timing reports for
any of them, just set vars(step,time_design,skip) true.
...
createClockTreeSpec
...
Example 3:
Steps to create directories inside the RPT directory where reports can be appended while running
the flow:
Create a final_always_source_tcl plug-in:
set vars(final_always_source_tcl) file
Where file:
Creates the directory you want.
For Example:
file mkdir $vars(rpt_dir)/$vars(step)
This has the advantage of being able to easily change the prefix as well.
Innovus
This command will start the Innovus Implementation System in the graphical mode.
Choose Flow - Foundation Flow Wizard.
Note: The wizard allows you to start from scratch, from the current design in memory, or from an
existing setup.tcl. In this section we will discuss starting from scratch.
Start from Choose this option to automatically configure the Wizard. You will still need to
Scratch select files and enter names of files but the background process will take care of
most of the configurations. In this section we will discuss starting from scratch.
Load the Choose this option if you have already created a setup.tcl file or the system has it
Design in memory. Click Load.
Setup from
Memory
Load Click the icon on the field to select a file from the system and to modify it as you go
Previously along creating the configurations to save in setup.tcl.
Installed
Script
Foundation Flow Install Select the install directory by browsing the system and click
Directory Install.
Save Foundation Flow Select where you want to save the database.
Database At
Save Foundation Flow Reports Select where you want to save the database.
At
You can also save the script by clicking the Save button top right. Choose where you want to save
the different scripts: Setup, Innovus Configure and LP Configure.
Specify Process Displays the type of node you specified. Click Edit to go back to the Library
Node form and change value.
Technology LEF Displays the LEF file you specified. Click Edit to go back to the Library form
and change value.
Physical LEF Displays the LEF file you specified. Click Edit to go back to the Library form
and change value.
See also,
Setting Up the Library Information
Specify the Technology LEF File for your Select the LEF file directory by browsing the
Design system.
Use the File Browser to select Additional Select additional LEF libraries, if any. See
LEF Libraries for your File Designing the Flow - Netlist
See also,
Adding Library to the Flow - Summary
Netlist Displays the netlist you specified. Click Edit to go back to the Library form and
change value.
Floorplan Displays the floorplan you specified. Click Edit to go back to the Library form and
change value.
Clock Displays the clock tree you specified. Click Edit to go back to the Library form
Tree and change value.
See also,
Designing the Flow - Netlist
Designing the Flow - Clock Tree
Use my Clock Tree Spec File Select to use your own clock tree specification file from the
system. See Designing the Flow - Netlist.
Back Click to move to the previous screen and change any entry,
if needed.
Choose the
Floorplan File for
your Design
Back Click to move to the previous screen and change any entry, if needed.
Notes
During the course of this wizard you may need to find files from your system. When you click ... the
following type of screen will show up.
Add Select the file that you need and click Add. The right pane opens. Select the file and
click <<. The file is added to the left pane.
Delete Select the file that you need and click Delete.
See also,
Designing the Flow - Clock Tree
Adding Design to the Flow - Summary
Do you want to Enable SignalStorm Select Yes or No. If you select Yes then choose at what
Delay Calculation? stage from the drop down menu.
Do you want to enable Select Yes or No. If you select Yes then choose at what
onChipVariation? stage from the drop down menu.
See also,
Timing the Flow - Library Set
Timing the Flow - RC Corner
Timing the Flow - Delay Corner
Timing the Flow - Constraint Mode
Timing the Flow - Analysis View
Reviewing the Timing Setup
Back Click to move to the previous screen and change any entry, if needed.
See also,
Timing the Flow - Timing
Timing the Flow - RC Corner
Timing the Flow - Delay Corner
Timing the Flow - Constraint Mode
Timing the Flow - Analysis View
Reviewing the Timing Setup
Back Click to move to the previous screen and change any entry, if needed.
See also,
Timing the Flow - Timing
Timing the Flow - Library Set
Timing the Flow - Delay Corner
Timing the Flow - Constraint Mode
Timing the Flow - Analysis View
Reviewing the Timing Setup
Specify Delay Select the button to turn it On or OFF. When you click OFF the following form
Corner(s) opens File Menu > Add Delay Corner. This form will take you to further forms
Using the where you make selections and then come back to the Wizard.
Matrix Table
Back Click to move to the previous screen and change any entry, if needed.
See also,
Timing the Flow - Timing
Timing the Flow - Library Set
Timing the Flow - RC Corner
Timing the Flow - Constraint Mode
Timing the Flow - Analysis View
Reviewing the Timing Setup
Back Click to move to the previous screen and change any entry, if
needed.
See also,
Timing the Flow - Timing
Timing the Flow - Library Set
Timing the Flow - RC Corner
Timing the Flow - Delay Corner
Timing the Flow - Analysis View
Reviewing the Timing Setup
Specify Default Setup Analysis Views Specify the view you want. Choose from the drop-down
list
Specify Default Hold Analysis Views Specify the view you want. Choose from the drop-down
list
See also,
Timing the Flow - Timing
Timing the Flow - Library Set
Timing the Flow - RC Corner
Timing the Flow - Delay Corner
Timing the Flow - Constraint Mode
Reviewing the Timing Setup
See also,
Timing the Flow - Timing
Timing the Flow - Library Set
Timing the Flow - RC Corner
Do You Want to Select Leakage Power or Dynamic Power to use if you want to
Optimize Power optimize power. Each of the options comes in three flavours: High,
Medium, and Low. This is optional.
Do you have an Specify the activity file if you have one and select it from the system.
Activity File? Else, select No. (Default)
Do you want to Select Yes if you want to generate reports. Else, select No. (Default)
Generate Power
Reports?
Does your Power have Specify the CPF file if you have MSO or PSV requirements and you
MSO or PSV can additionally keep DEF rows. Else, select No. (Default)
Requirements?
Do you want to Select from options if you want to commit certain sections of the CPF
Commit Certain files. This option is active if you specify a CPF file in the previous
Portion of the CPF option.
File?
Back Click to move to the previous screen and change any entry, if needed.
Power Analysis View Displays the name you specified for the power analysis view.
Back Click to move to the previous screen and change any entry, if
needed.
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Route
Setting up the Tool - Signal Intergrity
Setting up the Tool - Design For Manufacture (DFM)
Setting up the Tool - Multi-CPU
Setting up the Tool - Multi-CPU - Distributed Processing
Reviewing the Tool Setup
Enable Clock Gate Aware Check the box to enable clock gate aware if you have clock gating
If You Have Clock Gating cells in your design
Cells in Your Design
Specify Number Of Rows Enter value to specify number of rows for JTAG placement
For JTAG Placement
Specify Tie Hi/Lo Cells Select the file from a new screen that shows you the selected
Hi/Lo Cells cells in right hand folder. You can Add or Delete cells
to the left hand folder. Then click Apply
Specify Filler Cells Select the file from a new screen that shows you the selected
Filler Cells cells in right hand folder. You can Add or Delete cells
to the left hand folder. Then click Apply
Specify Well Taps Select the file from a new screen that shows you the selected Well
Tap cells in right hand folder. You can Add or Delete cells to the
left hand folder. Then click Apply
Specify JTAG Cells Select the file from a new screen that shows you the selected
JTAG Cells in right hand folder. You can Add or Delete cells to the
left hand folder. Then click Apply
Select Click to select the required file from a new screen that shows you
the selected cells in right hand folder. You can Add or Delete cells
to the left hand folder. Then click Apply.
See also,
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Route
Specify critical range of TNS Optimization Enter value for critical range of TNS optimization
Enable Clock Gate Aware If You Have Check box to enable clock gating aware if you
Clock Gating Cells in Your Design have clock gating cells in your design
Enable useful Skew and Select Skew Select value from drop-down to enable useful
Buffers skew and select skew buffers
Disable Hold Fixing for IO Check box to disable hold fixing for IO
Enable Hold Fixing allow TNS degradation Check box to enable hold fixing allowing TNS
degradation
Resize Shifter and Isolation Instances Check box to resize shifter and isolation instances
Specify Dont Use List Enter value for dont use list
See also,
Setting up the Tool - Placement
Setting up the Tool - CTS
Setting up the Tool - Route
Setting up the Tool - Signal Intergrity
Setting up the Tool - Design For Manufacture (DFM)
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - Route
Setting up the Tool - Signal Intergrity
Setting up the Tool - Design For Manufacture (DFM)
Setting up the Tool - Multi-CPU
Setting up the Tool - Multi-CPU - Distributed Processing
Reviewing the Tool Setup
Enable Litho Driven Routing Check box to enable litho driven routing
Enable Wire Spreading at Post-Route Check box to enable wire spreading at post-route
Optimization optimization
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Signal Intergrity
Setting up the Tool - Design For Manufacture (DFM)
Setting up the Tool - Multi-CPU
Setting up the Tool - Multi-CPU - Distributed Processing
Reviewing the Tool Setup
How Do You want to Set Noise Select radio button if you want to use system defaults
Thresholds? or if you want to customize the thresholds, enter,
Delta Delay Threshold
Celtic Settings |
How Will You Be Running Signoff Select use Innovus/ETS or 3rd party Tool
Timing?
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Route
Setting up the Tool - Design For Manufacture (DFM)
Setting up the Tool - Multi-CPU
Setting up the Tool - Multi-CPU - Distributed Processing
Reviewing the Tool Setup
Specify Custom Tcl to Select the file from a Windows Explorer format which shows the files
Add Metalfill in directories
Open Access Abstract Select the file from a Windows Explorer format which shows the files
View Name in directories
Open Access Layout Select the file from a Windows Explorer format which shows the files
View Name in directories
Open Access Select the file from a Windows Explorer format which shows the files
Referance Library in directories
GDS Map File Select the file from a Windows Explorer format which shows the files
in directories
List of GDS Files List of GDS Files opens. Click >> to open right pane for you to browse
the exact file, select and Add.
The file and path shows up on the left pane. Provide a name for the
GDS File and click Close.
Back Click to move to the previous screen and change any entry, if needed.
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Route
Setting up the Tool - Signal Intergrity
Setting up the Tool - Multi-CPU
Setting up the Tool - Multi-CPU - Distributed Processing
Reviewing the Tool Setup
Number of CPUs per Enter value for number of CPUs per remote machine
Remote Machine
Setup Distribute Click to setup distribued processing. the following screen opens:
Processing Setting up the Tool - Multi-CPU - Distributed Processing.
Back Click to move to the previous screen and change any entry, if needed.
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Route
Setting up the Tool - Signal Intergrity
Setting up the Tool - Design For Manufacture (DFM)
Reviewing the Tool Setup
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Route
Setting up the Tool - Signal Intergrity
Setting up the Tool - Design For Manufacture (DFM)
Setting up the Tool - Multi-CPU
Reviewing the Tool Setup
See also,
Setting up the Tool - Placement
Setting up the Tool - Optimization
Setting up the Tool - CTS
Setting up the Tool - Route
Setting up the Tool - Signal Intergrity
Setting up the Tool - Design For Manufacture (DFM)
Setting up the Tool - Multi-CPU
Setting up the Tool - Multi-CPU - Distributed Processing
Always Source at Beginning of Each Step Check box and select file
Initialization - Before Installation or After Installation Check box and select file
or
Placement - Before Placement or During Placement Check box and select file
or After Placement
Clock Tree Synthesis - Before CTS or During CTS Check box and select file
or After CTS
Post CTS Optimization - Before post-CTS Check box and select file
Optimization or After post-CTS Optimization
Routing - Before Routing or After Routing Check box and select file
Post-Route Optimization + Hold Fixing - Before Check box and select file
Post-Route Optimization or After Post-Route
Optimization
Post-Route Optimization + Hold Fixing + SI - Before Check box and select file
Post-Route Optimization or After Post-Route
Optimization
Post-Route Signoff - Before Post-Route Signoff or Check box and select file
After Post-Route Signoff
Sign-off - Before Signoff or After Signoff Check box and select file
Completing Setup
The following screen appears:
Code Generator
From this release, Innovus provides a code generator to enable users to quickly generate scripts to
load their design data, setup their timing environment, and execute the recommended
implementation flow from placement through signoff.
Note: Foundation Flow code generator generates EDI 11.1 based scripts automatically. No
changes to setup.tcl are required. With this release, the design import command init_design
replaces the command loadConfig.
In this section we cover:
Introduction to Code Generator
Usage
Example Scripts
Results
Error.Warning Messages
The foundation flow is in the SCRIPTS directory and the code generator is SCRIPTS/gen_flow.tcl
(symbolic link to gen_edi_flow.tcl).
To learn more on Innovus Code Generator follow these links:
Advantages
TCL Command
Command Line Options
Examples:
Advantages
The following are the advantages of the Code Generator:
Through the Code Generator the scripts will be generated instead of being executed.
All flow will have the command sequence based on the user settings. A clean, flat script will
be generated for conditional code that is based on static user settings (for example,
setup.tcl).
All conditional code branches that require run time specific data will be generated as
conditionals (that is, they cannot be flattened).
For example, since analysis view can be altered via user plug-ins, checks must be made to
determine which corners are active:
source_plug plug_in Loads one or more plug-in scripts, catch errors, etc.
The code generator is backwards compatible (it will work with existing code).
For the LP flow, there are these additional procedures:
Procedure Description
FF_EDI::proc_name [option]
Note: Once the scripts have been generated, the use model will be identical to previous releases
When the scripts are generated, the code generator will check for data consistency; i.e. all
required variables are properly defined, necessary files exists, etc.
TCL Command
Usage: tclsh SCRIPTS/gen_flow.tcl options steps
Step Description
Note: "a" and "b" should be valid steps for the specific mode.
Command Description
- full Unrolls plug-ins and tags (include contents in the main flow script)
-d | -dir The code generator creates a design specific set of run scripts in a FF directory in
the local user directory. You can optionally change the name of the output
directory using this option.
-s | -setup Provide the directory containing the setup.tcl setup file required to run the
Foundation Flow.
Default is “.”.
Examples:
September 2020 136 Product Version 20.12
Innovus Foundation Flows Guide
Code Generator--Introduction to Code Generator
Examples:
gen_flow -H route
The above command returns a list of variables related to the route step, as shown below:
=======================================================================================
=======================
variable (command) : values
--------------------------------------------------- route -----------------------------
----------------
in_route_opt (route_design) : FALSE true
route_secondary_pg_nets (route_pg_pin_use_signal_route) : true FALSE
secondary_pg_nets (route_pg_pin_use_signal_route) : List of global nets for
secondary power/ground
route_clock_nets (set_cts_mode) : TRUE false
litho_driven_routing (set_nanoroute_mode) : true FALSE
multi_cut_effort (set_nanoroute_mode) : MEDIUM high
postroute_spread_wires (set_nanoroute_mode) : true FALSE
secondary_pg,cell_pin_pairs (set_pg_pin_use_signal_route) : List of cell:pin pairs
---------------------------------------------------- dbs ------------------------------
----------------
dbs_dir (none) : Database directory
dbs_format (save_design) : FE oa
oa_abstract_name (save_design) : OA Abstract view name
oa_layout_name (save_design) : OA Layout view name
save_constraints (save_design) : true FALSE (Save
constraints with DBS?)
save_rc (save_design) : true FALSE (Save RCDB with
DBS?)
-------------------------------------------------- report -----------------------------
---------------
capture_metrics (none) : true FALSE
check_setup (none) : TRUE false
html_summary (none) : HTML summary file
report_power (none) : TRUE false
report_run_time (none) : TRUE false
report_system_info (none) : true FALSE
rpt_dir (none) : Reports directory
time_info_db (none) : Time info DB file
time_info_rpt (none) : Time info report file
=======================================================================================
=======================
Note: Default values are in uppercase (all capitals). Valid categories include:
flow
hier
dbs
synth
init
ilm
mmmc
power
place
opt
cts
hold
route
extract
noise
report
distribute
misc
See also,
Usage
Example Scripts
Results
Error.Warning Messages
Usage
Below are the steps to use the Code Generator:
1. Dump the foundation flow code generator from the Innovus interface (GUI or TUI) or download
from the download manager.
GUI: Flows > Create Foundation Flow Template
TUI: writeFlowTemplate --directory directory
2. Create a setup.tcl through either Using the Wizard or using gen_setup.tcl.
To create using wizard, simply invoke the wizard and follow the on screen instructions.
When finished, save as setup.tcl.
To create using gen_setup.tcl,
load an existing Innovus database
and source directory/SCRIPTS/gen_setup.tcl (the existing data base should be
the starting point for the foundation flow)
Edit the resulting setup.auto.tcl and edi_config.auto.tcl files (if necessary)
Rename the files to setup.tcl and edi _config.tcl, respectively.
3. Run the code generator: tclsh directory/SCRIPTS/gen_flow.tcl options
4. Execute the flow: make
Note: See the "Makefile Options - Script Updates" and "Makefile Options - Single Process
Execution" sections of this page for more information.
To learn more on Innovus Code Generator Usage see:
Execution Tips
Makefile Options - Script Updates
Makefile Options - Single Process Execution
Execution Tips
Once the flow scripts are generated the use model for the flow execution differs from earlier in these
ways:
The generated scripts are expaned (unrolled) based on the variables in the setup.tcl, so any
change in the setup.tcl will only affect the scripts if they are regenerated.
- make init
The code generator runs again automatically. This is intended to keep the generated scripts
synchronized with setup.tcl. This can be disabled by running one of the following three
commands:
make UPDATE=no
gen_flow.tcl –n
set vars(make_update) no
make prects
The flow will run the steps from <last completed> to prects
The flow can be executed either in a single process or in multi-process; the default is multi-
process (i.e. each step runs a separate Innovus process). This is more deterministic but also
increases runtime due to re-loading and re-timing the step databases. To run a single process
flow, use
Any completed step in the flow can be checked for logical equivalence (against
vars(netlist)) by running:
make lec_<step>
Any completed step in the flow loaded into an Innovus GUI session by running:
make debug_<step>
make UPDATE=no
Note: A new option ?u|-rundir allows the scripts/Makefile to be generated elsewhere than
the current work directory ".".
.
Example Scripts
Following are the examples of the code generation:
SINGLE STEP
STEP RANGE
ALL STEPS
HIERARCHICAL FLOW - Example Scripts
See also,
Introduction to Code Generator
Usage
Results
Error.Warning Messages
SINGLE STEP
% tclsh SCRIPTS/gen_flow.tcl init
-------------------------------------------------
-------------------------------------------------
STEP RANGE
% tclsh SCRIPTS/gen_flow.tcl route-signoff
-------------------------------------------------
-------------------------------------------------
ALL STEPS
w/OUTPUT DIRECTORY RENAMED (-d MYFF)
-------------------------------------------------
-------------------------------------------------
w/setup.tcl located in another directory (-s MYSETUPDIR) and plug-ins/tags imported (-f full)
HIERARCHICAL FLOW
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
Results
The code generator default to creating an instance of the foundation flow in a FF directory in the
local user directory. The user can optionally override this using the option
-d directory.
Here is an example of the files created by the code generator:
Flat Mode (all steps)
Hierarchical Mode (all steps)
See also,
Introduction to Code Generator
Usage
Example Scripts
Error.Warning Messages
FF
FF/vars.tcl
FF/run.conf
FF/procs.tcl
FF/Innovus
FF/Innovus/run_all.tcl
FF/Innovus/run_init.tcl
FF/Innovus/run_place.tcl
FF/Innovus/run_prects.tcl
FF/Innovus/run_cts.tcl
FF/Innovus/run_postcts.tcl
FF/Innovus/run_route.tcl
FF/Innovus/run_postroute.tcl
FF/Innovus/run_postroute_si.tcl
FF/Innovus/run_signoff.tcl
FF/Innovus/run_debug.tcl
FF/Innovus/gen_html.tcl
Makefile
Makefile
FF/vars.tcl
FF/run.conf
FF/procs.tcl
FF/Innovus/run_assemble.tcl
FF/Innovus/run_partition.tcl
FF/Innovus/run_debug.tcl
PARTITION
PARTITION/Makefile.partition
PARTITION/Makefile
PARTITION/dtmf_recvr_core/FF
PARTITION/dtmf_recvr_core/FF/vars.tcl
PARTITION/dtmf_recvr_core/FF/Innovus
PARTITION/dtmf_recvr_core/FF/Innovus/run_all.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_init.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_place.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_prects.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_cts.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_postcts.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_postcts_hold.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_route.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_postroute.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_postroute_hold.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_postroute_si_hold.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_postroute_si.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_signoff.tcl
PARTITION/dtmf_recvr_core/FF/Innovus/run_debug.tcl
PARTITION/dtmf_recvr_core/FF/procs.tcl
PARTITION/dtmf_recvr_core/Makefile
PARTITION/tdsp_core/FF
PARTITION/tdsp_core/FF/vars.tcl
PARTITION/tdsp_core/FF/Innovus
PARTITION/tdsp_core/FF/Innovus/run_all.tcl
PARTITION/tdsp_core/FF/Innovus/run_init.tcl
PARTITION/tdsp_core/FF/Innovus/run_place.tcl
PARTITION/tdsp_core/FF/Innovus/run_prects.tcl
PARTITION/tdsp_core/FF/Innovus/run_cts.tcl
PARTITION/tdsp_core/FF/Innovus/run_postcts.tcl
PARTITION/tdsp_core/FF/Innovus/run_postcts_hold.tcl
PARTITION/tdsp_core/FF/Innovus/run_route.tcl
PARTITION/tdsp_core/FF/Innovus/run_postroute.tcl
PARTITION/tdsp_core/FF/Innovus/run_postroute_hold.tcl
PARTITION/tdsp_core/FF/Innovus/run_postroute_si_hold.tcl
PARTITION/tdsp_core/FF/Innovus/run_postroute_si.tcl
PARTITION/tdsp_core/FF/Innovus/run_signoff.tcl
PARTITION/tdsp_core/FF/Innovus/run_debug.tcl
PARTITION/tdsp_core/FF/procs.tcl
PARTITION/tdsp_core/Makefile
Error.Warning Messages
The following are the most frequent error and warning messages.
Warning on Missing Required Data
Warning to Replace Old Variables
See also,
Introduction to Code Generator
Usage
Example Scripts
Results
-------------------------------------------------
-------------------------------------------------
# -----------------------------------------------------
# Error Summary
# -----------------------------------------------------
# ---------------------------------------
CPF-Based Low Power Flow is one of the important implementation of the foundation flow.
level shifters, isolation cells, power domains, and power switches. CPF also includes the
information Innovus needs for multi-mode multi-corner (MMMC) timing analysis. With the CPF-
Based Low Power Implementation Flow design, you do not need Innovus commands to define
views, corners, and modes for MMMC.
For the main design tasks the flow uses the Innovus supercommands with as few nondefault
options as possible.
For a block or a flat chip, these commands are the starting point for the low power design.
Ultimately, each design that you implement might have a different final set of commands, but this
flow is the recommended starting point before customizing a specific design or technology. When
you have completed the tasks described in this guide, you will have a flat MSV design that is
ready for DRC and LVS checks and other sign-off tasks.
Additional Input
In addition, depending on the design and technology, you may need to supply values for the
following items:
RC scaling factors
OCV derating factors
Metal fill parameters
Filler cell names
Tie cell names
Welltap cells
Endcap cells
Secondary power cell:pin pair
Clock gating cell names
Spare instance names
JTAG instance names
JTAG rows
LSF queue
Dont Use Cells
Delay Cells
CTS Cells
See also,
Defining Variables and Specifying Values for Command Modes
Creating Variables for CPF-based Low Power Flow
Results for CPF-based Low Power Flow
Example - CPF-Based Low Power Foundation Flow
Describing lp_config.tcl
Describing lp_config.tcl
Low power configuration file overlay. This file contains foundation flow variables that are specific to
the LP/CPF flow and should be used in addition to the setup.tcl and edi_config.tcl.
The vars(power_domains) is optional. If not defined, the power domain list will be picked up
automatically.
In addition, the following can optionally defined either globally or per p/g net
To optionally override for a given p/g net(s), use vars(route_secondary_pg_nets) to define the list
of nets to be overridden and then override vars(<p/g net>,<option>)
runCLP options
Connects the enableNetOut at the top of a column to the enableNetIn at the top of the next column,
and connects the enableNetOut at the bottom of the column to the enableNetIn at the bottom of the
next column. Below variables are for ring based PSO implementation:
... define pso cell name for each side of the power domain
... define filler cell name for each side of the power domain
... define the number of switches for each side of the power domain
See also,
Timing Environment Initialization
MMMC Timing and SI Setup for Low Power P_R Implementation
Create RC Corners
-preRoute_res $vars($rc_corner,pre_route_res_factor)\
-preRoute_cap $vars($rc_corner,pre_route_cap_factor)\
-preRoute_clkres\ $vars($rc_corner,pre_route_clk_res_factor)\
-preRoute_clkcap\ $vars($rc_corner,pre_route_clk_cap_factor)\
-postRoute_res\ $vars($rc_corner,post_route_res_factor)\
-postRoute_cap\ $vars($rc_corner,post_route_cap_factor)\
-postRoute_clkres\ $vars($rc_corner,post_route_clk_res_factor)\
-postRoute_clkcap\ $vars($rc_corner,post_route_clk_cap_factor)\
-postRoute_xcap\ $vars($rc_corner,post_route_xcap_factor)\
-T $vars($rc_corner,T)\
Note: If the low power P&R implementation is not CPF-based or the CPF file does not have its
analysis-views defined, then the user has to create library sets, delay corners, constraint mode and
analysis views.
Please refer to the following section in this guide for these:
Describing setup.tcl
Describing edi_config.tcl
Example Settings for Each Script
See also,
Describing lp_config.tcl
Timing Environment Initialization
-timing $vars($library_set,timing) \
-si $vars($library_set,si)
} else {
See also,
Create Delay Corners
Create Constraint Modes
Create Analysis Views
Attach RC Corners to Delay Corners
Update library_sets with SI Libraries, if defined
Define setup and hold Analysis Views and Enable the Default Views
eval $command
See also,
Create Library Sets
Create Constraint Modes
Create Analysis Views
Attach RC Corners to Delay Corners
Update library_sets with SI Libraries, if defined
Define setup and hold Analysis Views and Enable the Default Views
-sdc_files $vars($constraint_mode,pre_cts_sdc)
See also,
Create Library Sets
-constraint_mode \ $vars($analysis_view,constraint_mode) \
-delay_corner $vars($analysis_view,delay_corner)
Note: The steps mentioned below are common for CPF and non-CPF based low power P&R
implementation.
See also,
Create Library Sets
Create Delay Corners
Create Constraint Modes
See also,
Create Library Sets
Create Delay Corners
Create Constraint Modes
Create Analysis Views
Update library_sets with SI Libraries, if defined
Define setup and hold Analysis Views and Enable the Default Views
-si $vars($library_set,si)
Set derating factors for delay corners and enable CPPR. CPPR should only be enabled for designs
using derating or designs with specific requirements
See also,
Create Library Sets
Create Delay Corners
Create Constraint Modes
Create Analysis Views
Attach RC Corners to Delay Corners
Define setup and hold Analysis Views and Enable the Default Views
See also,
Create Library Sets
Create Delay Corners
Create Constraint Modes
Create Analysis Views
Attach RC Corners to Delay Corners
Update library_sets with SI Libraries, if defined
Plugin Description
always_source_tcl Sourced at the beginning of every script
pre_partition_tcl Before partitioning
The sections below describe some of the plug-in enabled in the reference design.
See also,
Defining Variables and Specifying Values for Command Modes
Creating Variables for CPF-based Low Power Flow
Results for CPF-based Low Power Flow
CPF File_3a
CPF File:
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtwc0d720d72.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtwc0d720d72.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpwc0d720d72.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtwc0d72.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtwc0d72.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpwc0d72.lib \
../LIBS/STDCELL/LIBERTY/HVT_CG/tcbn65lphvtcgwc0d72.lib \
../LIBS/STDCELL/LIBERTY/LVT_CG/tcbn65lplvtcgwc0d72.lib \
../LIBS/STDCELL/LIBERTY/NVT_CG/tcbn65lpcgwc0d72.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_0864/ulp_dp_512x36cm4sw1bk1.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_0864/ulp_rom_512x32cm16.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_0864/ulp_sp_2kx32cm8sw1bk2.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_0864/ulp_sp_4kx32cm8sw1bk4.lib \
../LIBS/IO/LIBERTY/tpzn65lpgv2wc_0864.lib \
../LIBS/ANALOG/LVDS/LIBERTY/lvds_wc_0864.lib \
../LIBS/IP/LIBERTY/pso_wc_0864.lib \
../LIBS/IP/LIBERTY/Module_A_wc_0864.lib \
../LIBS/IP/LIBERTY/Module_B_wc_0864.lib \
../LIBS/IP/LIBERTY/Module_U_wc_0864.lib \
../LIBS/IP/LIBERTY/Module_W_wc_0864.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtwc0d720d9.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtwc0d720d9.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpwc0d720d9.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtwc0d90d9.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtwc.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtwc.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtwc0d90d9.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpwc0d90d9.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpwc.lib \
../LIBS/STDCELL/LIBERTY/HVT_CG/tcbn65lphvtcgwc.lib \
../LIBS/STDCELL/LIBERTY/LVT_CG/tcbn65lplvtcgwc.lib \
../LIBS/STDCELL/LIBERTY/NVT_CG/tcbn65lpcgwc.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_1080/ulp_dp_512x36cm4sw1bk1.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_1080/ulp_rom_512x32cm16.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_1080/ulp_sp_2kx32cm8sw1bk2.lib \
../LIBS/RAMS_ROMS/LIBERTY/WORST_1080/ulp_sp_4kx32cm8sw1bk4.lib \
../LIBS/IO/LIBERTY/tpzn65lpgv2wc.lib \
../LIBS/ANALOG/PLL/LIBERTY/PL0042.scx3_tsmc_cln80gt_hvt_ss_1p08v_125c.lib \
../LIBS/IP/LIBERTY/pso_wc_1080.lib \
../LIBS/IP/LIBERTY/Module_A_wc_1080.lib \
../LIBS/IP/LIBERTY/Module_B_wc_1080.lib \
../LIBS/IP/LIBERTY/Module_U_wc_1080.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtbc0d881d1.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtbc0d881d1.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpbc0d881d1.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtbc1d11d1.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtbc.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtbc.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtbc1d11d1.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpbc.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpbc1d11d1.lib \
../LIBS/STDCELL/LIBERTY/HVT_CG/tcbn65lphvtcgbc.lib \
../LIBS/STDCELL/LIBERTY/LVT_CG/tcbn65lplvtcgbc.lib \
../LIBS/STDCELL/LIBERTY/NVT_CG/tcbn65lpcgbc.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1320/ulp_dp_512x36cm4sw1bk1.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1320/ulp_rom_512x32cm16.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1320/ulp_sp_2kx32cm8sw1bk2.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1320/ulp_sp_4kx32cm8sw1bk4.lib \
../LIBS/IO/LIBERTY/tpzn65lpgv2bc.lib \
../LIBS/ANALOG/PLL/LIBERTY/PL0042.scx3_tsmc_cln80gt_hvt_ff_1p32v_0c.lib \
../LIBS/IP/LIBERTY/pso_bc_1320.lib \
../LIBS/IP/LIBERTY/Module_A_bc_1320.lib \
../LIBS/IP/LIBERTY/Module_B_bc_1320.lib \
../LIBS/IP/LIBERTY/Module_U_bc_1320.lib \
"
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtbc0d880d88.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtbc0d880d88.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpbc0d880d88.lib \
../LIBS/STDCELL/LIBERTY/HVT/tcbn65lphvtbc0d88.lib \
../LIBS/STDCELL/LIBERTY/LVT/tcbn65lplvtbc0d88.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpbc0d88.lib \
../LIBS/STDCELL/LIBERTY/HVT_CG/tcbn65lphvtcgbc0d88.lib \
../LIBS/STDCELL/LIBERTY/LVT_CG/tcbn65lplvtcgbc0d88.lib \
../LIBS/STDCELL/LIBERTY/NVT_CG/tcbn65lpcgbc0d88.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1056/ulp_dp_512x36cm4sw1bk1.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1056/ulp_rom_512x32cm16.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1056/ulp_sp_2kx32cm8sw1bk2.lib \
../LIBS/RAMS_ROMS/LIBERTY/BEST_1056/ulp_sp_4kx32cm8sw1bk4.lib \
../LIBS/IO/LIBERTY/tpzn65lpgv2bc_1056.lib \
../LIBS/ANALOG/LVDS/LIBERTY/lvds_bc_1056.lib \
../LIBS/IP/LIBERTY/pso_bc_1056.lib \
../LIBS/IP/LIBERTY/Module_A_bc_1056.lib \
../LIBS/IP/LIBERTY/Module_B_bc_1056.lib \
../LIBS/IP/LIBERTY/Module_U_bc_1056.lib \
../LIBS/IP/LIBERTY/Module_W_bc_1056.lib \
"
../LIBS/IP/LIBERTY/Module_U.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpwc.lib \
"
../LIBS/IP/LIBERTY/Module_U.lib \
../LIBS/STDCELL/LIBERTY/NVT/tcbn65lpwc.lib \
"
NSLEEP -valid_location to
-valid_location to
set_hierarchy_separator /
set_design chip_top
Macro Models
set_macro_model Module_U
-default -external_controlled_shutoff
PD_2p5v@ana_2p5 PDdvfs@norm_0v864 }
PD_2p5v@ana_2p5 PDdvfs@off }
-primary_ground_net vssa
-primary_ground_net vssa
-primary_ground_net VSSsoc
end_macro_model
i_pad_frame/*PLL_AVDD1_H \
i_pad_frame/*PLL_DGND_i* \
i_pad_frame/*PLL_DVDD_i* \
i_pad_frame/*PLL_AGND0_H \
i_pad_frame/*PLL_AVDD0_H \
*FILLER_PDpll_*} -boundary_ports { \
-shutoff_condition !power_on_pin
i_pad_frame/rf_SW[1].i_rf_SW i_pad_frame/rf_SW[2].i_rf_SW \
-shutoff_condition !power_on_pin
i_rom_subsystem/i_rom_wrap/i_rom_core } -shutoff_condition \
-shutoff_condition !i_apb_subsystem/i_power_ctrl/pwr1_on_smc \
-secondary_domains { PDdvfs }
-primary_ground_net VSSsoc
VSSsoc
VSSsoc
VSSsoc
VSSsoc
-primary_ground_net VSSsoc
-primary_ground_net vssa
-primary_ground_net vssa
-average_ir_drop_limit 0
-peak_ir_drop_limit 0 -average_ir_drop_limit 0
-peak_ir_drop_limit 0 -average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-average_ir_drop_limit 0
-library_set 1v056
PDrom@norm_1v080 PDsmc@norm_1v080 \
i_apb_subsystem__i_uart1__PDuart_SW@norm_1v080 PD_3p3v@ana_3p3 \
PD_2p5v@ana_2p5 }
i_apb_subsystem__i_uart1__PDuart_SW@norm_1v080 PD_3p3v@ana_3p3 \
PD_2p5v@ana_2p5 }
PD_2p5v@ana_2p5 }
i_apb_subsystem__i_uart1__PDuart_SW@norm_1v080 PD_3p3v@ana_3p3 \
PD_2p5v@ana_2p5 }
PDsmc@norm_0v864 i_apb_subsystem__i_uart1__PDuart_SW@norm_0v864 \
PD_3p3v@ana_3p3 PD_2p5v@ana_2p5 }
../DATA/chip_top.sdc
../DATA/chip_top_dvfs2.sdc
PDsmc@PDdvfs1_bc i_apb_subsystem__i_uart1__PDuart_SW@PDdvfs1_bc \
PDwakeup@PDdvfs1_bc }
PDsmc@PDdvfs1_wc i_apb_subsystem__i_uart1__PDuart_SW@PDdvfs1_wc \
PDwakeup@PDdvfs1_wc }
PDsmc@PDdvfs2_bc i_apb_subsystem__i_uart1__PDuart_SW@PDdvfs2_bc \
PDwakeup@PDdvfs1_bc }
PDsmc@PDdvfs2_wc i_apb_subsystem__i_uart1__PDuart_SW@PDdvfs2_wc \
PDwakeup@PDdvfs1_wc }
VDDdvfs
VDDdvfs
i_apb_subsystem/i_uart1/ua_nrts } -from { \
-isolation_output high
i_apb_subsystem__i_uart1__PDuart_SW } -exclude { \
low
i_apb_subsystem/i_power_ctrl/isolate_smc } -pins { \
i_apb_subsystem/i_smc/smc_n_be[0] i_apb_subsystem/i_smc/smc_n_be[1] \
i_apb_subsystem/i_smc/smc_n_be[2] i_apb_subsystem/i_smc/smc_n_be[3] \
i_apb_subsystem/i_smc/smc_n_cs[0] i_apb_subsystem/i_smc/smc_n_cs[1] \
i_apb_subsystem/i_smc/smc_n_cs[2] i_apb_subsystem/i_smc/smc_n_cs[3] \
i_apb_subsystem/i_smc/smc_n_cs[4] i_apb_subsystem/i_smc/smc_n_cs[5] \
i_apb_subsystem/i_smc/smc_n_cs[6] i_apb_subsystem/i_smc/smc_n_cs[7] \
i_apb_subsystem/i_smc/smc_hready i_apb_subsystem/i_smc/smc_hresp[0] \
i_apb_subsystem/i_smc/smc_n_ext_oe i_apb_subsystem/i_smc/smc_n_rd \
i_apb_subsystem/i_smc/smc_n_we[3] i_apb_subsystem/i_smc/smc_n_we[2] \
i_apb_subsystem/i_smc/smc_n_we[1] i_apb_subsystem/i_smc/smc_n_we[0] \
-isolation_output high
i_apb_subsystem/i_smc/smc_hready i_apb_subsystem/i_smc/smc_hresp[0] \
i_apb_subsystem/i_smc/smc_n_be* i_apb_subsystem/i_smc/smc_n_cs* \
i_apb_subsystem/i_smc/smc_n_wr i_apb_subsystem/i_smc/smc_n_we* \
i_apb_subsystem/i_smc/smc_n_rd i_apb_subsystem/i_smc/smc_n_ext_oe } \
-isolation_output high
i_apb_subsystem/i_smc/i_apb/i_cfreg0 i_apb_subsystem/i_smc/i_apb/i_cfreg1 \
i_apb_subsystem/i_smc/i_apb/i_cfreg2 i_apb_subsystem/i_smc/i_apb/i_cfreg3 \
i_apb_subsystem/i_smc/i_apb/i_cfreg4 i_apb_subsystem/i_smc/i_apb/i_cfreg5 \
i_apb_subsystem/i_smc/i_apb/i_cfreg6 i_apb_subsystem/i_smc/i_apb/i_cfreg7 \
i_apb_subsystem/i_smc/eco_logic_type4[0].smc_eco_type4 \
i_apb_subsystem/i_smc/eco_logic_type4[1].smc_eco_type4 \
i_apb_subsystem/i_smc/eco_logic_type4[2].smc_eco_type4 } -restore_edge \
!i_apb_subsystem/i_power_ctrl/nrestore_smc -save_edge \
-peak_ir_drop_limit 0 -average_ir_drop_limit 0
-peak_ir_drop_limit 0 -average_ir_drop_limit 0
-prefix CPF_ISO_
-prefix CPF_ISO_
post_cts_tcl_3a
post_cts_tcl:
This plug-in is called after CTS inside the run_cts.tcl flow script. You can use this plug-in to adjust
IO timings based on clock insertion delays. The sample commands mentioned below are
incorporated in the post_cts plug-in. You can modify these commands according to your design
needs.
set_propagated_clock [all_clocks]
set_clock_propagation propagated
set_interactive_constraint_modes {}
set_interactive_constraint_modes {PMdefault}
source ../DATA/chip_top_propagated.sdc
set_interactive_constraint_modes {}
set_interactive_constraint_modes {PMdvfs2}
source ../DATA/chip_top_dvfs2_propagated.sdc
set_interactive_constraint_modes {}
post_init_tcl_3a
post_init_tcl:
This plug-in is called after importing the database and CPF inside the run_init.tcl flow script. You
can use this plug-in for floorplan related tasks, which cover:
Die/core boundary creation
Placement of hard macros/blocks
Power domain sizing and clearance surrounding to it
Placement and routing blockages in the floorplan
IO ring creation
And PSO planning
Below are some of the sample commands incorporated in the post_init plug-in. You can
modify these commands according to your design needs:
relativePlace \
i_sram_subsystem/i_1_sram_voltage_island/i_0_SRAM_2kx32_wrap/i_sram_core \
relativePlace \
i_sram_subsystem/i_2_sram_voltage_island/i_0_SRAM_2kx32_wrap/i_sram_core \
i_sram_subsystem/i_1_sram_voltage_island/i_0_SRAM_2kx32_wrap/i_sram_core \
-rsExts 15 15 15 15 -minGaps 15 15 15 15
addPowerSwitch -checkerBoard \
-column \
-powerDomain i_apb_subsystem__i_uart1__PDuart_SW \
-backToBackChain \
-bottomOffset 60 \
-enableNetIn $n \
-enableNetOut pduart_powered_off \
-enablePinIn NSLEEPIN \
-enablePinOut NSLEEPOUT \
-globalSwitchCellName HDRSID2 \
-leftOffset 20 \
-reportFile $vars(rpt_dir)/PDurt_pso.rpt \
-switchModuleInstance i_apb_subsystem/i_uart1 \
-topOffset 2 \
-rightOffset 2 \
-horizontalPitch 70 \
-height 125 \
-skipRows 5
-switchModuleInstance i_apb_subsystem/i_smc \
-enableNetIn $n \
-enableNetOut pdsmc_powered_off \
-enablePinIn NSLEEPIN \
-enablePinOut NSLEEPOUT \
-reportFile $vars(rpt_dir)/PDsmc_pso.rpt \
-cornerCellList CDN_RING_CORNER_UL \
-fillerCellNameBottom CDN_RING_FILLER \
-fillerCellNameLeft CDN_RING_FILLER \
-fillerCellNameRight CDN_RING_FILLER \
-fillerCellNameTop CDN_RING_FILLER \
-bottomSide 1 \
-leftSide 1 \
-rightSide 1 \
-topSide 1 \
-leftOffset 2 \
-rightOffset 2 \
-topOffset 2 \
-bottomOffset 2 \
-bottomNumSwitch 4 -distribute \
-leftNumSwitch 3 -distribute \
-topNumSwitch 4 -distribute \
-rightNumSwitch 3 -distribute \
-switchCellNameLeft CDN_RING_SW \
-switchCellNameRight CDN_RING_SW \
-switchCellNameTop CDN_RING_SW \
-switchCellNameBottom CDN_RING_SW
deleteHaloFromBlock -allBlock
addHaloToBlock 2 2 2 2 i_D0TCM/i_sram_core_1
addHaloToBlock 2 2 2 2 i_D1TCM/i_sram_core_1
addHaloToBlock 2 2 2 2 i_D0TCM/i_sram_core_0
addHaloToBlock 2 2 2 2 i_ITCM/i_sram_core
post_place_tcl_3a
post_place_tcl:
This plug-in is called after cell placement inside the run_place.tcl flow script. You can use this plug-
in for standard cell rail creation and check the connectivity and geometry on power nets.
-targetViaTopLayer 4 \
-crossoverViaTopLayer 4 -verbose
-crossoverViaTopLayer 4 -layerChangeTopLayer 4
verifyGeometry -allowPadFillerCellsOverlap \
-allowRoutingBlkgPinOverlap -allowRoutingCellBlkgOverlap
post_prects_tcl_3a
post_prects_tcl:
This plug-in is called after the prects optimization is completed inside the run_prects.tcl flow script.
You can use this plug-in for secondary power pin routing for low power cells (State retention
flops/always-on-buffers/level-shifters) and check the connectivity and geometry on power nets. The
sample commands below are incorporated in the post_prects plug-in. You can modify these
commands according to your design needs.
Note: route_secondary_pg_nets is a procedure implemented in utils.tcl, it does secondary pg
routing.
route_secondary_pg_nets
route_secondary_pg_nets is part of utils.tcl and it internally calls for setPGPinUseSignalRoute
and routePGPinUseSignalRoute commands for routing secondary PG nets.
pre_cts_tcl_3a
pre_cts_tcl:
This plug-in is called before CTS inside the run_cts.tcl flow script. You can use this plug-in to define
non-default CTS mode settings. The sample below displays commands incorporated in the pre_cts
plug-in. You can modify these commands according to your design needs.
pre_init_tcl_3a
pre_init_tcl:
This plug-in is called before importing the database, inside the run_init.tcl flow script. You can use
this plug-in for tasks which can be done before importing the design. For example, use this plug-in
to insert buffers on tie-high/tie-low assign statements. The sample commands mentioned below are
incorporated in the pre_init plug-in. You can modify these commands according to your design
needs.
pre_place_tcl_3a
pre_place_tcl:
This plug-in is called before doing cell placement inside the run_place.tcl flow script.
User can use this plug-in for:
Power planning related tasks which includes:
Power planning for power domains (ring/stripe creations)
Power Shut-off cell power hookup
Welltap/Bias cell power hookup
And commands for enabling always-on-net synthesis as part of preCTS optimization.
Below are some of the sample commands incorporated in the pre_place plug-in. You can
modify these commands according to your design needs.
selectInst i_PLL
-stacked_via_bottom_layer M1 -layer_left M4 \
-snap_wire_center_to_grid Grid
-stacked_via_bottom_layer M1 -layer_left M4
-padPinAllGeomsConnect -padPinMaxLayer 2 \
addStripe -block_ring_top_layer_limit M5 \
-padcore_ring_bottom_layer_limit M1 -set_to_set_distance 70 \
-skip_via_on_pin {} -stacked_via_top_layer M5 \
-snap_wire_center_to_grid Grid
addStripe -block_ring_top_layer_limit M5 \
-padcore_ring_bottom_layer_limit M1 -set_to_set_distance 35 \
-skip_via_on_pin {} -stacked_via_top_layer M5 \
-stacked_via_bottom_layer M8 -layer_leftM8
addStripe -block_ring_top_layer_limit M9 \
-set_to_set_distance 35 -stacked_via_top_layer M9 \
-block_ring_bottom_layer_limit M5 \
-allow_jog_block_ring 0
-padcore_ring_bottom_layer_limit M5 -set_to_set_distance 35 \
-stacked_via_top_layer M9 -padcore_ring_top_layer_limit M9 \
-ybottom_offset 18
For welltap/Bias/Power-Switch cells PG pin connection, you can run strap over/off-set with regard to
these cells so that the PG connection is established easily. For example, in the below stripe
creation command, the stripe is created over welltap cells (FILLBIAS2A9TH) so that PG connection
is easily established.
-switch_layer_over_obs 1
To handle always-on net synthesis as part of preCTS optimization, you have to enable these:
setvar dpgOptSupportAOFeedThru 1
Hierarchical Flow
Innovus Implementation System Hierarchical Flow is a more complex implementation of the flat
foundation flow.
In this section we cover:
Using Interface Logic Models
About the Hierarchical One-Pass ILM Flow and Diagram
Hierarchical Foundation Flow with FlexILM
Results for Hierarchical Flow Implementation
Delay Cells
CTS Cells
During the flow, as the block implementation progresses, the budgeted timing models for the
blocks are often replaced with Interface Logic Models (ILM’s) or with more accurate budgeted
timing models. You can also add new LEF files that contain the antenna information for the
blocks.
See also,
Using Interface Logic Models
About the Hierarchical One-Pass ILM Flow and Diagram
Hierarchical Foundation Flow with FlexILM
Results for Hierarchical Flow Implementation
See also,
Performing Multi-Mode Multi-Corner Timing Analysis and Optimization
Managing Clock Latencies
Deriving Clock Tree Estimation for Budgeting and CTS
Preventing Hierarchical Signal Integrity Issues
See also,
Using the Flattened and Unflattened ILM States
Managing Clock Latencies
Deriving Clock Tree Estimation for Budgeting and CTS
Preventing Hierarchical Signal Integrity Issues
If the delays of the clock tree are included, during pre-CTS optimization, the latency of the
clock pins should be included in the SDC file to account for the top-level clock latency (source
latency)
During the post-CTS stage, the delays of the clock tree are calculated and latencies asserted
on pins or with -source are retained.
The deriveTimingBudget command and savePartitioncommand will generate a budgeted
library for use at the top level:
This model assumes zero delay on the clock tree
For pre-CTS optimization, any clock latencies applied to the clock pins of the model
should represent the full clock insertion (top and block)
This model cannot be used in the post-CTS stage. Use the saveModel command to
create new models for each partition in the post-CTS stage.
See also,
Using the Flattened and Unflattened ILM States
Performing Multi-Mode Multi-Corner Timing Analysis and Optimization
Deriving Clock Tree Estimation for Budgeting and CTS
Preventing Hierarchical Signal Integrity Issues
When you perform timing budgeting, latencies in the block- and top-level will be adjusted
based on the latency SDC’s. MacroModels for top-level CTS will be used in a .lib flow.
3. Control the latency manually in the following cases:
when the design contains clock feedthroughs
when clocks are generated within a partition
4. Derive the budgeted latencies by performing a prototyping pass through the flow including
CTS
Example
The following example illustrates the use flow for deriving CTS files and latencies separately for the
top level and for each block.
For this example, assume a single clock FCLK that attaches to pin pll/clk at the top level and enters
partitions A and B at port clk
The insertion delay target for flat full chip insertion 5 ns. The insertion delay target for partition A is 3
ns and that for partition B is 2 ns.
AutoCTSRootPin clk
MinDelay 3ns
MaxDelay 3ns
# Ptn B
AutoCTSRootPin clk
MinDelay 2ns
MaxDelay 2ns
# Top Level
AutoCTSRootPin pll/clk
MinDelay 5ns
MaxDelay 5ns
# Ptn B
# Full Chip
Note: MacroModels are not required in the ILM flow because CTS automatically calculates the
latency based on the spef file. The saveModel command produces the MacroModels automatically
setPtnUserCnsFile \
-fileName PartitionLatencySDCFile
-ptnName PartitionName
In the budgeted SDC’s for each partition, the IO arrival and departure times reflect the assigned
latencies. The source and network latencies are also assigned
For this example, the source latency will be 2 ns for partition A (5 ns – 3 ns) and 3 ns for partition B
(5 ns -2 ns)
The same budgeted SDC’s can be used for pre-CTS and post-CTS optimization. The network
latencies will be ignored once the tree is synthesized
Related Topics:
Creating a Clock Tree Specification File in the "Synthesizing Clock Trees” chapter in the
Innovus User Guide
Timing Budgeting chapter in the Innovus User Guide
See also,
Using the Flattened and Unflattened ILM States
Performing Multi-Mode Multi-Corner Timing Analysis and Optimization
Managing Clock Latencies
Preventing Hierarchical Signal Integrity Issues
See also,
Hierarchical Flow
Using Interface Logic Models
Hierarchical Foundation Flow with FlexILM
Results for Hierarchical Flow Implementation
Make –f Makefile
Initial partitioning and budgeting
Run block to preCTS and generate FlexILM
Top FlexILM prectsopt , re-assign ptn pin , timing rebudget and FlexILM-ECO
Assemble updated preCTS DB and check timing
Block implementation from CCOPT/CTS to signoff , generate ILM
Top implementation from CCOPT/CTS to signoff with ILM
Final chip assembly
###optDesign ####
setTrialRouteMode -honorPin false -handlePartitionComplex true
setHierMode -optStage preCTS
setOptMode -handlePartitionComplex true
optDesign -preCTS -outDir RPT -prefix flexilm
See also,
Hierarchical Flow
Using Interface Logic Models
About the Hierarchical One-Pass ILM Flow and Diagram
Results for Hierarchical Flow Implementation
The following list depicts the tags for the Innovus foundation flow.
vars(init,set_distribute_host,tag) value
vars(init,set_multi_cpu_usage,tag) value
vars(init,set_rc_factor,tag) value
vars(init,derate_timing,tag) value
vars(init,create_rc_corner,tag) value
vars(init,create_library_set,tag) value
vars(init,create_delay_corner,tag) value
vars(init,create_constraint_mode,tag) value
vars(init,create_analysis_view,tag) value
vars(init,update_delay_corner,tag) value
vars(init,update_library_set,tag) value
vars(init,set_default_view,tag) value
vars(init,set_power_analysis_mode,tag) value
vars(init,load_config,tag) value
vars(init,load_floorplan,tag) value
vars(init,add_tracks,tag) value
vars(init,load_cpf,tag) value
vars(init,commit_cpf,tag) value
vars(init,read_activity_file,tag) value
vars(init,specify_ilm,tag) value
vars(init,load_ilm_non_sdc_file,tag) value
vars(init,initialize_timing,tag) value
vars(init,load_scan,tag) value
vars(init,specify_spare_gates,tag) value
vars(init,set_dont_use,tag) value
vars(init,set_max_route_layer,tag) value
vars(init,set_design_mode,tag) value
vars(init,insert_welltaps_endcaps,tag) value
vars(init,load_config,tag) value
vars(init,time_design,tag) value
vars(init,check_design,tag) value
vars(init,check_timing,tag) value
vars(init,report_power_domains,tag) value
vars(place,set_distribute_host,tag) value
vars(place,set_multi_cpu_usage,tag) value
vars(place,restore_design,tag) value
vars(place,initialize_step,tag) value
vars(place,set_design_mode,tag) value
vars(place,set_delay_cal_mode,tag) value
vars(place,set_place_mode,tag) value
vars(place,set_opt_mode,tag) value
vars(place,cleanup_specify_clock_tree,tag) value
vars(place,specify_clock_tree,tag) value
vars(place,specify_jtag,tag) value
vars(place,place_jtag,tag) value
vars(place,place_design,tag) value
vars(place,add_tie_cells,tag) value
vars(place,time_design,tag) value
vars(place,save_design,tag) value
vars(place,report_power,tag) value
vars(place,verify_power_domain,tag) value
vars(place,run_clp,tag) value
vars(prects,set_distribute_host,tag) value
vars(prects,set_multi_cpu_usage,tag) value
vars(prects,initialize_step,tag) value
vars(prects,set_design_mode,tag) value
vars(prects,set_ilm_type,tag) value
vars(prects,cleanup_specify_clock_tree,tag) value
vars(prects,create_clock_tree_spec,tag) value
vars(prects,specify_clock_tree,tag) value
vars(prects,set_useful_skew_mode,tag) value
vars(prects,set_opt_mode,tag) value
vars(prects,set_design_mode,tag) value
vars(prects,set_delay_cal_mode,tag) value
vars(prects,set_dont_use,tag) value
vars(prects,opt_design,tag) value
vars(prects,ck_clone_gate,tag) value
vars(prects,save_design,tag) value
vars(prects,report_power,tag) value
vars(prects,verify_power_domain,tag) value
vars(prects,run_clp,tag) value
vars(cts,set_distribute_host,tag) value
vars(cts,set_multi_cpu_usage,tag) value
vars(cts,initialize_step,tag) value
vars(cts,set_design_mode,tag) value
vars(cts,set_cts_mode,tag) value
vars(cts,set_nanoroute_mode,tag) value
vars(cts,enable_clock_gate_cells,tag) value
vars(cts,clock_design,tag) value
vars(cts,disable_clock_gate_cells,tag) value
vars(cts,run_clock_eco,tag) value
vars(cts,update_timing,tag) value
vars(cts,time_design,tag) value
vars(cts,save_design,tag) value
vars(cts,report_power,tag) value
vars(cts,verify_power_domain,tag) value
vars(cts,run_clp,tag) value
vars(postcts,set_distribute_host,tag) value
vars(postcts,set_multi_cpu_usage,tag) value
vars(postcts,initialize_step,tag) value
vars(postcts,set_design_mode,tag) value
vars(postcts,set_delay_cal_mode,tag) value
vars(postcts,set_analysis_mode,tag) value
vars(postcts,set_opt_mode,tag) value
vars(postcts,opt_design,tag) value
vars(postcts,save_design,tag) value
vars(postcts,report_power,tag) value
vars(postcts,verify_power_domain,tag) value
vars(postcts,run_clp,tag) value
vars(postcts_hold,set_distribute_host,tag) value
vars(postcts_hold,set_multi_cpu_usage,tag) value
vars(postcts_hold,initialize_step,tag) value
vars(postcts_hold,set_dont_use,tag) value
vars(postcts_hold,set_opt_mode,tag) value
vars(postcts_hold,opt_design,tag) value
vars(postcts_hold,save_design,tag) value
vars(postcts_hold,report_power,tag) value
vars(postcts_hold,verify_power_domain,tag) value
vars(postcts_hold,run_clp,tag) value
vars(route,set_distribute_host,tag) value
vars(route,set_multi_cpu_usage,tag) value
vars(route,initialize_step,tag) value
vars(route,set_nanoroute_mode,tag) value
vars(route,add_filler_cells,tag) value
vars(route,route_secondary_pg_nets,tag) value
vars(route,check_place,tag) value
vars(route,route_design,tag) value
vars(route,run_clock_eco,tag) value
vars(route,spread_wires,tag) value
vars(route,initialize_timing,tag) value
vars(route,time_design,tag) value
vars(route,save_design,tag) value
vars(route,report_power,tag) value
vars(route,verify_power_domain,tag) value
vars(route,run_clp,tag) value
vars(postroute,set_distribute_host,tag) value
vars(postroute,set_multi_cpu_usage,tag) value
vars(postroute,initialize_step,tag) value
vars(postroute,set_design_mode,tag) value
vars(postroute,set_extract_rc_mode,tag) value
vars(postroute,set_analysis_mode,tag) value
vars(postroute,set_delay_cal_mode,tag) value
vars(postroute,add_metalfill,tag) value
vars(postroute,delete_filler_cells,tag) value
vars(postroute,opt_design,tag) value
vars(postroute,add_filler_cells,tag) value
vars(postroute,trim_metalfill,tag) value
vars(postroute,save_design,tag) value
vars(postroute,report_power,tag) value
vars(postroute,verify_power_domain,tag) value
vars(postroute,run_clp,tag) value
vars(postroute_hold,set_distribute_host,tag) value
vars(postroute_hold,set_multi_cpu_usage,tag) value
vars(postroute_hold,initialize_step,tag) value
vars(postroute_hold,set_dont_use_mode,tag) value
vars(postroute_hold,set_opt_mode,tag) value
vars(postroute_hold,delete_filler_cells,tag) value
vars(postroute_hold,opt_design,tag) value
vars(postroute_hold,add_filler_cells,tag) value
vars(postroute_hold,trim_metalfill,tag) value
vars(postroute_hold,save_design,tag) value
vars(postroute_hold,report_power,tag) value
vars(postroute_hold,verify_power_domain,tag) value
vars(postroute_hold,run_clp,tag) value
vars(postroute_si_hold,set_distribute_host,tag) value
vars(postroute_si_hold,set_multi_cpu_usage,tag) value
vars(postroute_si_hold,initialize_step,tag) value
vars(postroute_si_hold,set_design_mode,tag) value
vars(postroute_si_hold,set_dont_use,tag) value
vars(postroute_si_hold,set_opt_mode,tag) value
vars(postroute_si_hold,set_extract_rc_mode,tag) value
vars(postroute_si_hold,set_si_mode,tag) value
vars(postroute_si_hold,set_delay_cal_mode,tag) value
vars(postroute_si_hold,set_analysis_mode,tag) value
vars(postroute_si_hold,add_metalfill,tag) value
vars(postroute_si_hold,delete_filler_cells,tag) value
vars(postroute_si_hold,opt_design,tag) value
vars(postroute_si_hold,add_filler_cells,tag) value
vars(postroute_si_hold,trim_metalfill,tag) value
vars(postroute_si_hold,save_design,tag) value
vars(postroute_si_hold,report_power,tag) value
vars(postroute_si_hold,verify_power_domain,tag) value
vars(postroute_si_hold,run_clp,tag) value
vars(postroute_si,set_distribute_host,tag) value
vars(postroute_si,set_multi_cpu_usage,tag) value
vars(postroute_si,initialize_step,tag) value
vars(postroute_si,set_design_mode,tag) value
vars(postroute_si,set_extract_rc_mode,tag) value
vars(postroute_si,set_si_mode,tag) value
vars(postroute_si,set_analysis_mode,tag) value
vars(postroute_si,set_delay_cal_mode,tag) value
vars(postroute_si,add_metalfill,tag) value
vars(postroute_si,delete_filler_cells,tag) value
vars(postroute_si,opt_design,tag) value
vars(postroute_si,add_filler_cells,tag) value
vars(postroute_si,trim_metalfill,tag) value
vars(postroute_si,save_design,tag) value
vars(postroute_si,report_power,tag) value
vars(postroute_si,verify_power_domain,tag) value
vars(postroute_si,run_clp,tag) value
vars(signoff,set_distribute_host,tag) value
vars(signoff,set_multi_cpu_usage,tag) value
vars(signoff,initialize_timing,tag) value
vars(signoff,initialize_step,tag) value
vars(signoff,set_analysis_mode,tag) value
vars(signoff,set_extract_rc_mode,tag) value
vars(signoff,extract_rc,tag) value
vars(signoff,dump_spef,tag) value
vars(signoff,time_design_setup,tag) value
vars(signoff,time_design_hold,tag) value
vars(signoff,stream_out,tag) value
vars(signoff,save_oa_design,tag) value
vars(signoff,create_ilm,tag) value
vars(signoff,summary_report,tag) value
vars(signoff,verify_connectivity,tag) value
vars(signoff,verify_geometry,tag) value
vars(signoff,verify_metal_density,tag) value
vars(signoff,verify_process_antenna,tag) value
vars(signoff,save_design,tag) value
vars(signoff,report_power,tag) value
vars(signoff,verify_power_domain,tag) value
vars(signoff,ru_clp,tag) value
vars(partition_list) value
vars(partition,initialize_timing,tag) value
vars(partition,load_cpf,tag) value
vars(partition,commit_cpf,tag) value
vars(partition,run_clp_init,tag) value
vars(partition,save_init_dbs,tag) value
vars(partition,set_budgeting_mode,tag) value
vars(partition,update_constraint_mode,tag) value
vars(partition,set_ptn_user_cns_file,tag) value
vars(partition,set_place_mode,tag) value
vars(partition,place_design,tag) value
vars(partition,save_place_dbs,tag) value
vars(partition,trial_route,tag) value
vars(partition,assign_ptn_pins,tag) value
vars(partition,check_pin_assignment,tag) value
vars(partition,report_unaligned_nets,tag) value
vars(partition,set_ptn_pin_status,tag) value
vars(partition,derive_timing_budget,tag) value
vars(partition,save_budget_dbs,tag) value
vars(partition,run_clp,tag) value
vars(partition,partition,tag) value
vars(partition,save_partition,tag) value
vars(assemble,assemble_design,tag) value
vars(assemble,specify_ilm,tag) value
vars(assemble,load_ilm_non_sdc_file,tag) value
vars(assemble,load_cpf,tag) value
vars(assemble,commit_cpf,tag) value
vars(assemble,initialize_timing,tag) value
vars(assemble,update_timing,tag) value
vars(assemble,pre_pac_verify_connectivity,tag) value
vars(assemble,pre_pac_verify_geometry,tag) value
vars(assemble,set_module_view,tag) value
vars(assemble,delete_filler_cells,tag) value
vars(assemble,opt_design,tag) value
vars(assemble,add_filler_cells,tag) value
vars(assemble,post_pac_verify_connectivity,tag) value
vars(assemble,post_pac_verify_geometry,tag) value
generateTracks
-cap_table $vars(rc_min,cap_table) \
-preRoute_res $vars(rc_min,pre_route_res_factor) \
-preRoute_cap $vars(rc_min,pre_route_cap_factor) \
-preRoute_clkres $vars(rc_min,pre_route_clk_res_factor) \
-preRoute_clkcap $vars(rc_min,pre_route_clk_cap_factor) \
-postRoute_res $vars(rc_min,post_route_res_factor) \
-postRoute_cap $vars(rc_min,post_route_cap_factor) \
-postRoute_clkres $vars(rc_min,post_route_clk_res_factor) \
-postRoute_clkcap $vars(rc_min,post_route_clk_cap_factor) \
-postRoute_xcap $vars(rc_min,post_route_xcap_factor) \
-T $vars(rc_min,T) \
-qx_tech_file $vars(rc_min,qx_tech_file)
-cap_table $vars(rc_max,cap_table) \
-preRoute_res $vars(rc_max,pre_route_res_factor) \
-preRoute_cap $vars(rc_max,pre_route_cap_factor) \
-preRoute_clkres $vars(rc_max,pre_route_clk_res_factor) \
-preRoute_clkcap $vars(rc_max,pre_route_clk_cap_factor) \
-postRoute_res $vars(rc_max,pre_route_res_factor) \
-postRoute_cap $vars(rc_max,pre_route_cap_factor) \
-postRoute_clkres $vars(rc_max,pre_route_clk_res_factor) \
-postRoute_clkcap $vars(rc_max,pre_route_clk_cap_factor) \
-postRoute_xcap $vars(rc_max,pre_route_xcap_factor) \
-T $vars(rc_max,T) \
-qx_tech_file $vars(rc_max,qx_tech_file)
create_library_set \
-name fast \
create_library_set \
-name slow \
-rc_corner rc_min
-rc_corner rc_max
-constraint_mode $vars(hold_view,constraint_mode) \
-delay_corner fast_min
-constraint_mode $vars(setup_view,constraint_mode) \
-delay_corner slow_max
# begin derate.tcl
set_timing_derate -clock \
-cell_delay \
-early \
set_timing_derate -clock \
-cell_delay \
-late \
# <end derate.tcl>
set_analysis_view \
setMaxRouteLayer 6
setDesignMode -process 90
-prefix WELLTAP \
-maxGap $vars(welltaps,max_gap) \
-inRowOffset $vars(welltaps,row_offset) \
-checkerboard
Variables affecting this step are listed under the "Place" section on the Example Settings for Each
Script page.
setDesignMode -process 90
-clkGateAware $vars(clock_gate_aware) \
-placeIoPins $vars(place_io_pins)
-powerEffort $vars(power_effort) \
-leakageToDynamicRatio medium$vars(leakage_to_dynamic_ratio) \
-clkGateAware $vars(clock_gate_aware) \
-criticalRange $vars(critical_range)
-maxDistance $vars(tie_cells,max_distance) \
addTieHiLo
setDesignMode -process 90
cleanupSpecifyClockTree
-powerEffort $vars(power_effort) \
-leakageToDynamicRatio medium$vars(leakage_to_dynamic_ratio) \
-clkGateAware $vars(clock_gate_aware) \
-criticalRange $vars(critical_range) \
-usefulSkew false
The variables affecting this step are listed under the "CTS" section on the Example Settings for
Each Script page.
setDesignMode -process 90
setNanoRouteMode \
-routeWithLithoDriven $vars(litho_driven_routing) \
-drouteMultiCutViaEffort $vars(multi_cut_effort)
-powerEffort $vars(power_effort) \
-leakageToDynamicRatio medium$vars(leakage_to_dynamic_ratio) \
-clkGateAware $vars(clock_gate_aware) \
-criticalRange $vars(critical_range) \
-usefulSkew false
setDesignMode -process 90
setNanoRouteMode \
-routeWithLithoDriven $vars(litho_driven_routing) \
-drouteMultiCutViaEffort $vars(multi_cut_effort)
The variables affecting this step are listed under the "PostCTS" section on the Example Settings for
Each Script page.
source FF/procs.tcl
setDistributeHost -local
See also,
Executing the Flow