Icc 2 Tim
Icc 2 Tim
Icc 2 Tim
Timing Analysis
User Guide
Version K-2015.06-SP4, December 2015
Copyright Notice and Proprietary Information
2015 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary
information that is the property of Synopsys, Inc. The software and documentation are furnished under a license
agreement and may be used or copied only in accordance with the terms of the license agreement. No part of the
software and documentation may be reproduced, transmitted, or translated, in any form or by any means, electronic,
mechanical, manual, optical, or otherwise, without prior written permission of Synopsys, Inc., or as expressly provided
by the license agreement.
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. Defining Clocks
Creating Real Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
Creating Virtual Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
v
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
Contents vi
IC Compiler II Timing Analysis User Guide Version K-2015.06-SP4
Chapter 1: Contents
Contents vii
1-vii
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
Contents viii
IC Compiler II Timing Analysis User Guide Version K-2015.06-SP4
7. Generating Reports
Reporting Timing Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2
Reporting the Logical DRC Violations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4
Reporting the QoR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6
Reporting the Delay of a Timing Arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-8
Reporting the Clock or Data Arrival Time at Pins or Ports . . . . . . . . . . . . . . . . . . . . 7-9
Checking the Timing Constraints and Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-9
Chapter 1: Contents
Contents ix
1-ix
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
Contents x
Preface
This preface includes the following sections:
About This User Guide
Customer Support
xi
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
Audience
This user guide is for design engineers who use the IC Compiler II tool to implement
designs.
To use the IC Compiler II tool, you need to be skilled in physical design and 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 the IC Compiler II tool, see the documentation on the
Synopsys SolvNet online support site 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
IC Validator
PrimeTime Suite
Preface
About This User Guide xii
IC Compiler II Timing Analysis User Guide Version K-2015.06-SP4
Release Notes
Information about new features, enhancements, changes, known limitations, and resolved
Synopsys Technical Action Requests (STARs) is available in the IC Compiler II Release
Notes on the SolvNet site.
To see the IC Compiler II Release Notes,
1. Go to the SolvNet Download Center located at the following address:
https://solvnet.synopsys.com/DownloadCenter
2. Select IC Compiler II, and then select a release in the list that appears.
Preface 1: Preface
Chapter
About This User Guide 1-xiii
xiii
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Preface
About This User Guide xiv
IC Compiler II Timing Analysis User Guide Version K-2015.06-SP4
Customer Support
Customer support is available through SolvNet online customer support and through
contacting the Synopsys Technical Support Center.
Accessing SolvNet
The SolvNet site includes a knowledge base of technical articles and answers to frequently
asked questions about Synopsys tools. The SolvNet site also gives you access to a wide
range of Synopsys online services including software downloads, documentation, and
technical support.
To access the SolvNet site, 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 sign up for an account.
If you need help using the SolvNet site, click HELP in the top-right menu bar.
Preface 1: Preface
Chapter
Customer Support 1-xv
xv
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
Preface
Customer Support xvi
1
Defining Modes, Corners, and Scenarios 1
A block might operate under several different conditions, such as different temperatures and
voltages, and might operate in several different functional modes. For timing analysis, each
set of conditions is represented by a corner and each functional mode is represented by a
mode. A scenario is a combination of a corner and mode used to perform timing analysis
and optimization.
Before you start working with a block, you must define the modes, corners, and scenarios
that are used for the block, and define the constraints associated with these modes, corners,
and scenarios. These tasks are described in the following topics:
Creating and Removing Modes
Querying Modes
Creating and Removing Corners
Querying Corners
Creating a Scenario
Setting the Active Analysis Types for a Scenario
Querying Scenarios
Removing Duplicate Scenarios, Modes, and Corners
IC Compiler II Timing Constraints
Setting Timing Constraints
1-1
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
If you define a mode-specific constraint before creating any modes, the tool creates a mode
named default and applies the constraint to this mode.
When you specify or modify mode-specific constraints, they apply only to the current mode.
To change the current mode to a specific mode, use the current_mode command, as
shown in the following example:
icc2_shell> current_mode mode1
To remove modes for the current block, use the remove_modes command. To remove all
modes, use the -all option. To remove specific modes, specify the modes using a Tcl list
or collection. When you remove a mode, all scenarios associated with that mode are also
removed.
For example, to remove the modes named mode1 and mode2, use the following command:
icc2_shell> remove_modes {mode1 mode2}
Querying Modes
To obtain
The current mode, use the current_mode command without any arguments.
For example,
icc2_shell> current_mode
{"mode1"}
Detailed information about one or more modes of the current block, use the
report_modes command.
The report includes the associated scenarios and their active analysis types, for each
mode.
The following example reports the detailed information for all modes for the current
block:
icc2_shell> report_modes
The following example reports the detailed information of the modes named mode1 and
mode2:
icc2_shell> report_modes {mode1 mode2}
See Also
Setting the Active Analysis Types for a Scenario
If you define a corner-specific constraint before creating any corners, the tool creates a
corner named default and applies the constraint to this corner.
When you specify or modify corner-specific constraints, they apply only to the current
corner. To change the current corner to a specific corner, use the current_corner
command, as shown in the following example:
icc2_shell> current_corner corner1
To remove corners for the current block, use the remove_corners command. To remove all
corners, use the -all option. To remove specific corners, specify the corners using a Tcl list
or collection. When you remove a corner, all scenarios associated with that corner are also
removed.
For example, to remove the corners named corner1 and corner2, use the following
command:
icc2_shell> remove_corners {corner1 corner2}
Querying Corners
To obtain
The current corner, use the current_corner command without any arguments.
For example,
icc2_shell> current_corner
{"corner1"}
The a list of corners defined for a block, use the get_corners command.
By default, the command returns a collection that contains all corners defined for the
current block (similar to the all_corners command). To get the corners for another
block, use the -design option.
You can restrict the set of corners returned by the command by filtering the corners
based on attribute values (-filter option), associated corners (-of_objects option),
or name patterns.
Detailed information about one or more corners of the current block, use the
report_corners command.
The report includes the associated scenarios and their active analysis types, for each
corner.
The following example reports the detailed information for all corners of the current
block:
icc2_shell> report_corners
The following example reports the detailed information for the corners named corner1
and corner2:
icc2_shell> report_corners {corner1 corner2}
Creating a Scenario
To create a timing scenario, use the create_scenario command. Each scenario must
have a unique name. By default, when you create a scenario, it combines the current mode
with the current corner. To specify the mode, use the -mode option. To specify the corner,
use the -corner option.
For example, to create a scenario named scenario1 that combines mode1 with corner1, use
the following command:
icc2_shell> create_scenario -mode mode1 -corner corner1 -name scenario1
When you create a scenario, by default, it is active, enabled for all analysis types, and
becomes the current scenario. In addition, its mode becomes the current mode and its
corner becomes the current corner.
To change the active status of a scenario, use the set_scenario_status -active
true|false command. To modify the active analysis types for the scenario, use the
set_scenario_status command.
To remove scenarios for the current block, use the remove_scenarios command. To
remove all scenarios, use the -all option. To remove specific scenarios, specify the
corners using a Tcl list or collection.
For example, to remove the scenarios named scenario1 and scenario,2 use the following
command:
icc2_shell> remove_scenarios {scenario1 scenario2}
See Also
Setting the Active Analysis Types for a Scenario
All -all
None -none
You can temporarily disable the individual analysis settings by using the -active false
option. When you use this option, all analysis is disabled for the specified scenarios;
however, the individual settings are retained in the design library. When you use the
-active true option, the individual settings take effect.
Querying Scenarios
To obtain
The current scenario, use the current_scenario command without any arguments.
For example:
icc2_shell> current_scenario
{"scenario1"}
icc2_shell> report_scenarios
The following example reports the detailed information for the scenarios named
scenario1 and scenario2:
icc2_shell> report_scenarios -scenarios {scenario1 scenario2}
When determining duplicate modes, the tool does not consider the annotated switching
activity. Therefore, reapply the switching activity after you run this command.
If you use of the set_block_to_top_map command to map modes, corners, and scenarios
at the block level to those at the top level, you must manually update this mapping after you
run the remove_duplicate_timing_contexts command. To determine the relationship
between the modes, corners, and scenarios at the top level and those at the block level, use
the report_block_to_top_map command.
Corner-specific constraints
Constraints that modify the calculated delay on an object are corner-specific constraints.
Corner-specific constraints include
Operating conditions
Port load capacitances
Parasitic information and scaling factors
Timing derating factors
Scenario-specific constraints
Constraints that have a delay value and refer to a modal object, such as a clock, are
scenario-specific. Scenario-specific constraints include
Input and output delays
Clock characteristics, such as clock latency, uncertainty, and transition
At a minimum, the scenario-specific constraints should contain an input delay or output
delay for each I/O port.
Netlist-specific constraints
Constraints that apply to all corners, modes, and scenarios are netlist-specific
constraints. Netlist-specific constraints include ideal network settings.
They can apply globally to all designs or locally to a specific design. For example, the
constraints set by the set_ideal_network command are netlist-specific.
Important:
If the SDC file does not contain unit settings, they are derived from the main logical
library. If the SDC file does contain unit settings, they must be consistent with those in the
main logical library.
To ensure efficiency and accuracy during block setup, use the following steps:
1. Split the block constraints into separate files as follows:
Mode-specific file for each mode
Corner-specific file for each corner
Scenario-specific file for each scenario
Global constraint file for the blocks
2. Define all modes, corners, and scenarios for the block.
3. Set the current mode, corner, or scenario appropriately, before you apply the
corresponding constraints.
When you load an SDC file or run an SDC command, depending on the constraint type,
the constraints only apply to the current scenario or its associated mode or corner.
For example, assume a block that has the following:
Two modes named M1 and M2
A corner named C
Two scenarios as follows:
A scenario named M1@C, which is the combination of mode M1 and corner C
A scenario named M2@C, which is the combination of mode M2 and corner C
The following example script shows how to create modes, corner, and scenarios and apply
the corresponding constraint and settings:
#Create all modes, corners, and scenarios
create_mode M1
create_mode M2
create_corner C
current_mode M1
read_sdc M1_mode.sdc
current_mode M2
read_sdc M2_mode.sdc
current_corner C
read_sdc C_corner.sdc;
## Apply TLU Plus settings, extraction options, and other settings
current_scenario M1@C
read_sdc M1@C_scenario.sdc
current_scenario M2@C
read_sdc M2@C_scenario.sdc
3. Read the best-case constraints from the BCWC SDC file by using the read_sdc
command.
By default, the IC Compiler II tool reads all constraints in the SDC file. To limit the
constraints to only the best-case constraints, set the
time.convert_constraint_from_bc_wc application option to bc_only before reading
the SDC file.
For example,
icc2_shell> set_app_options \
-name time.convert_constraint_from_bc_wc -value bc_only
icc2_shell> read_sdc bc_wc.sdc
5. Read the worst-case constraints from the BCWC SDC file by using the read_sdc
command.
To limit the constraints to only the worst-case constraints, set the
time.convert_constraint_from_bc_wc application option to wc_only before reading
the SDC file.
For example,
icc2_shell> set_app_options \
-name time.convert_constraint_from_bc_wc -value wc_only
icc2_shell> read_sdc bc_wc.sdc
The following example generates the timing constraints for all active scenarios and the
scenario-independent timing constraints from the Design Compiler tool:
dc_shell> write_timing_context -scenarios [get_scenarios -active true] \
-output BLK1_const
The following example imports the constraints generated by the Design Compiler tool into
the IC Compiler II tool:
icc2_shell> open_block BLK1
icc2_shell> source BLK1_const/top.tcl
2-1
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
The following commands create a clock on the port named CLK, and another clock named
CLK_1 with a rising edge at 1.0 and a falling edge at 2.0 on the same port:
icc2_shell> create_clock -period 5.0 [get_ports CLK]
icc2_shell> create_clock -period 4.0 -waveform {1.0 2.0} \
-name CLK_1 -add [get_ports CLK]
The following command create a clock named CLK_VIR that has a default waveform.
icc2_shell> create_clock -period 5.0 -name CLK_VIR
DIVIDE
D Q
SYSCLK
QN
FF1
SYSCLK
DIVIDE
The tool does not derive the behavior of the generated clock from the logic. You must
specify the behavior of the generated clock, in terms of the master clock, by using the
create_generated_clock command. When you do so, you must specify the following
information:
The source objects, ports, pins, or nets, on which to create the generated clock
The source of the master clock by using the -source option
How the frequency or the waveform of the generated clock is derived, by using one of the
following three methods:
To derive the generated clock frequency by dividing the master clock frequency, use
the -divide_by option and specify the division factor.
To derive the generated clock frequency by multiplying the master clock frequency,
use the -multiply_by option and specify the multiplication factor.
To derive the generated clock waveform based on specific edges of the master clock,
use the -edges option and specify the list of edges of the master clock to use.
Optionally, you can do the following:
Specify a name for the generated clock by using the -name option.
If you do not specify a name for the generated clock, the tool uses the name of the first
object in the list of source objects you specified.
Add multiple generated clocks on the same generated clock source object by using the
-add option.
When you do so, you must specify the master clocks for the additional generated clocks
by using the -master_clock option.
Consider only the combinational paths between the generated clock source and the
master clock source, when calculating the source latency of the generated clock, by
using the -combinational option.
During timing analysis, by default, the tool considers both the combinational and
sequential paths between the generated clock source and the master clock source.
For divide-by or multiply-by generated clocks created with the-divide_by or
-multiply_by option, invert the generated clock waveform by using the -invert option.
For multiply-by generated clocks created with the -multiply_by option, change the duty
cycle of the generated clock by using the -duty_cycle option.
For generated clocks derived from specific edges of the master clock with the -edges
option, delay or shift the selected master clock edges by using the -edge_shift option.
The following figure shows the waveforms for the master clock and generated clocks of this
example.
Figure 2-2 Waveforms of the Master Clock and Divide-by-Two Generated Clocks
CLKA
DIV2A
DIV2A_INV
The following example creates a generated clock named MULT2B that has twice the
frequency on the master clock named CLKB and a 75% active duty cycle.
icc2_shell> create_generated_clock -name MULT2B -duty_cycle 75 \
-source [get_ports CLKB] -multiply_by 2 \
[get_pins U29/GC]
The following figure shows the waveforms for the master clock and generated clock of this
example.
Figure 2-3 Waveform of the Master Clock and Multiply-by-Two Generated Clock
CLKB
MULT2B
The following example creates a master clock named CLKC and a generated clocks named
DIV3C that has a waveform based on the third, fifth, and ninth edge of the master clock and
each edge shifted by 2.2 time units.
icc2_shell> create_clock -period 2.2 -name CLKC [get_ports CLKC]
The following figure shows the waveforms for the master clock and generated clock of this
example.
Figure 2-4 Waveforms of the Master Clock and Divide-by-Three Generated Clock With Shifted
Edges
CLKC
DIV3C
Clock edge 1 2 3 4 5 6 7 8 9 10 11
Time 0.0 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 11.0
The following example creates a generated clock named CLKD and specifies that the tool
uses only combinational paths between the generated clock source and mater clock source,
when calculating the source latency for this generated clock:
icc2_shell> create_generated_clock -name CLKD_INV -divide_by 1 \
-combinational -source [get_ports CLKD] [get_pins U52/Y]}
The following figure shows the all available paths between the generated clock source and
mater clock source for this example.
CLKD
Combinational Path
CLKD_INV
TESTCLK
Uncertainty
This is the maximum variation in the clock arrival time at the register clock pins of the
same clock or different clocks.
The clock uncertainty has the following two components:
The clock jitter, which is the variation in the generation of successive edges of clock
at the source clock, with respect to an ideal clock waveform
The clock skew, which is the difference in clock arrival times resulting from different
propagation delays from the clock source of the block to the different register clock
pins.
This is applicable only before clock tree synthesis. After clock tree synthesis, the
clock skew is accounted for by the propagated clock network latency.
Transition time
This is the amount of time it takes for a signal to change from logic low to logic high (rise
time), or from logic high to logic low (fall time).
Current block
FF2
D Q
Origin of clock Network latency
Source latency
FF2
D Q
Clock
Uncertainty
Clock definition
point in the block
Period
Ideal
Latency
Clock at
register
Uncertainty
Rise transition Fall transition
Clock
source Source
latency
Setup
Early
Hold
Late
The dynamic variation component of the source latency, which is the component that
differs between successive clock cycles, by using the -dynamic option.
For designs with multiple scenarios, by default, the source latency applies only to the current
scenario. To specify the source latency for
All the scenarios of a specific modes, use the -modes option.
All the scenarios of specific corners and the current mode, use the -corners option.
All the scenarios of specific modes and corners, use the -modes and -corners options
Specific scenarios, use the -scenarios option.
When you use this option, you cannot use the -modes or -corners options.
The following commands specifies the source latency of the clock CLK1 with an external
clock network delay varying from 1.5 to 2.5 and having a dynamic component of 0.5:
icc2_shell> set_clock_latency 1.5 -source -early -dynamic 0.5 \
[get_clocks CLK1]
icc2_shell> set_clock_latency 2.5 -source -late -dynamic 0.5 \
[get_clocks CLK1]
To remove the source latency you specify with the set_clock_latency command, use the
remove_clock_latency command.
For designs with multiple scenarios, by default, the ideal clock latency applies only to the
current scenario. To specify the ideal clock network latency for
All the scenarios of a specific modes, use the -modes option.
All the scenarios of specific corners and the current mode, use the -corners option.
All the scenarios of specific modes and corners, use the -modes and -corners options
Specific scenarios, use the -scenarios option.
When you use this option, you cannot use the -modes or -corners options.
The following example sets the expected rise latency to 1.2 and the fall latency to 0.9 for the
clock names CLK1 for the current design:
icc2_shell> set_clock_latency -rise 1.2 [get_clocks CLK1]
icc2_shell> set_clock_latency -fall 0.9 [get_clocks CLK1]
To remove the ideal network latency you specify with the set_clock_latency command,
use the remove_clock_latency command.
FF1 FF2
CLK D Q D Q
FF2
CLK CLK CLK
D Q
CLK1 CLK2
CLK
Interclock uncertainty
Simple clock uncertainty
For example, to set a simple setup uncertainty of 0.21 and a hold uncertainty of 0.33 for all
paths leading to endpoints clocked by the clock named CLK1, use the following commands:
icc2_shell> set_clock_uncertainty -setup 0.21 [get_clocks CLK1]
icc2_shell> set_clock_uncertainty -hold 0.33 [get_clocks CLK1]
To set an interclock uncertainty of 2 between clocks named CLKA and CLKB, for both setup
and hold, use the following commands:
icc2_shell> set_clock_uncertainty 2 -from [get_clocks CLKA] \
-to [get_clocks CLKB]
icc2_shell> set_clock_uncertainty 2 -from [get_clocks CLKB] \
-to [get_clocks CLKA]
The tool uses the transition times you specify for all register clock pins in the transitive fanout
of clocks you specify.
For example, for the current scenario, to specify a transition time of 0.64 at the clock pins of
all the registers of the clock named CLK1, use the following command:
icc2_shell> set_clock_transition 0.64 [get_clocks CLK1]
Clock-to-data pin
D Q D Q
Logic
CLK
You can use the following command to identify the clock-to-data pins in your block:
icc2_shell> get_pins -filter "pin_is_clock_to_data==true"
If a propagated clock reaches a clock-to-data pin, the tool uses the propagated clock arrival
time as the data arrival time and the propagated clock transition time as the data transition
time at the pin.
When an ideal clock reaches a clock-to-data pin, by default, the tool does not use the ideal
clock latency as the data arrival time and the ideal clock transition time as the data transition
time at the pin. To use the ideal clock latency and transition time at the clock-to-data pin, set
the time.enable_clock_to_data_analysis application option to true.
When you perform IC Compiler II clock tree synthesis, the tool automatically changes all
clocks to propagated. To manually set a clock as a propagated clock, use the following
steps:
1. Remove the ideal clock transitions, which you set previously with the
set_clock_transition command, by using the remove_clock_transition
command.
For example,
icc2_shell> remove_clock_transition CLKA
2. Remove the ideal network latency, which you set previously with the
set_clock_latency command, by using the remove_clock_latency command.
For example,
icc2_shell> remove_clock_latency CLKA
However, you still need to keep the clock source latency you specified with the
set_clock_latency -source command.
3. Modify the clock uncertainty to model clock jitter but not clock skew by respecifying only
the clock jitter using the set_clock_uncertainty command.
For example,
icc2_shell> set_clock_uncertainty 0.1 CLKA
Unateness of Clocks
A clock signal is
Positive unate if a rising edge at the clock source can only cause a rising edge at the
register clock pin, and a falling edge at the clock source can only cause a falling edge at
the register clock pin.
Negative unate if a rising edge at the clock source can only cause a falling edge at the
register clock pin, and a falling edge at the clock source can only cause a rising edge at
the register clock pin. In other words, the clock signal is inverted.
Non-unate if the clock sense is ambiguous as a result of non-unate timing arcs in the
clock path. For example, a clock that passes through an XOR gate is not unate. The
clock sense could be either positive or negative, depending on the state of the other input
to the XOR gate.
The following figure shows examples of clock logic that result in unate and non-unate clock
signals.
Figure 2-10 Unate and Non-Unate Clock Signals
Negative unate
Positive unate CLK
CLK
Positive unate
CLK
Gated clock
EN
CLK
XOR Non-unate
CTRL
Positive sense
CLK
AND Non-unate
Negative sense
Pulse generator
To propagate only the negative sense of the clock beyond a specific point, use the
-negative option.
You can also use the set_clock_sense command to stop a clock from propagating beyond
a specific point as follows:
To stop a clock from propagating beyond a specific point, but allow it to propagate as
data, if applicable, use the -logical_stop_propagation option.
To stop a clock from propagating beyond a specific point, both as clock and data, use the
-stop_propagation option.
The following example prevents the tool from propagating all clocks, both as clock and data,
beyond the pin named U32/z:
icc2_shell> set_clock_sense -stop_propagation [get_pins U32/z]
Specifying the generated clock as a pulse clock using repeated edge digits ensures correct
checking of delays between the source clock and the pulse clock.
Consider the pulse clock circuit shown in the following figure:
Figure 2-11 Pulse Clock Specified as a Generated Clock
CLK
U21 CLKP
CLKB
CLK
CLKB
CLKP
0 1 2 3 4 5 6 7 8
Edge number 1 of the source triggers both the rising and falling edges of the pulse clock.
The pulse width is determined by the delay of the inverter.
To specify the generated pulse clock CLKP as a generated clock:
icc2_shell> create_generated_clock -name CLKP -source CLK \
-edges {1 1 3} [get_pins U21/z]
High pulse that is fall triggered, use the -pulse fall_triggered_high_pulse option
setting.
Low pulse that is fall triggered, use the -pulse fall_triggered_low_pulse option
setting.
The pulse clock is not defined as a separate clock domain. Instead, only the specified sense
of the source clock is propagated downstream beyond the specified point in the clock
network.
The following command specified that the clock at the output of the cell named U21 is a
pulse that rises and falls on the rising edge of the source clock:
prompt> set_clock_sense -pulse rise_triggered_high_pulse \
[get_pins U21/z]
When you use the set_clock_groups command, you must specify the following
information:
The relationship between the clock groups as one of the following:
Physically exclusive by using the -physically_exclusive option
The tool assumes that these clock groups do not coexist in the design. Therefore, it
does not check for timing paths between theses clock groups and does not perform
crosstalk analysis between the nets of the clock groups.
Logically exclusive by using the -logically_exclusive option
The tool assumes that there is no phase relationship between these clock groups.
Therefore, it does not check the timing paths between the clocks. However, it
performs crosstalk analysis between the nets of the clock groups.
Asynchronous by using the -asynchronous option
The tool assumes that there is no phase relationship between these clock groups.
Therefore, it does not check the timing paths between the clocks. However, it
performs crosstalk analysis between the nets of the clock groups using infinite arrival
time windows.
One or more clock groups by using the -group option one or more times
If you specify the -group option
One time, the tool assumes the specified relationship between the clocks in that
group and all other clocks in the design.
Two or more times, tool assumes the specified relationship between each pair of
clock groups.
Optionally, you can
Specify a name for the clock grouping by using the -name option
If you do not specify a name, the tool derives a unique name for each grouping.
Enable timing analysis between specific clocks of asynchronous grouping, specified with
the -asynchronous option, by using -allow_paths option.
To remove clock grouping declarations made with the set_clock_groups command, use
the remove_clock_groups command.
For example, to specify that clock CK1 is physically exclusive with respect to all other clocks
in the design, use the following command:
icc2_shell> set_clock_groups -physically_exclusive -group {CK1}
To specify that clocks CK2 and CK3 are logically exclusive with clocks CK4 and CK5, use
the following command:
icc2_shell> set_clock_groups -logically_exclusive \
-group {CK2 CK3} -group {CK4 CK5}
To specify that clocks CK6, CK7, and CK8 are asynchronous with respect to each other, use
the following command:
icc2_shell> set_clock_groups -asynchronous \
-group {CK6} -group {CK7} -group {CK8}
Clock grouping information specified with the set_clock_groups command by using the
-groups option
For example, to generate a report on the clocks that have a period less than or equal to 15.0,
use the following command:
icc2_shell> report_clock [get_clocks -filter "period <= 15.0" *]
...
Attributes:
d - dont_touch_network
f - fix_hold
p - propagated_clock
G - generated_clock
Removing Clocks
To remove a
Real or virtual clock created with the create_clock command, use the remove_clock
command.
Generated clock created with the create_generated_clock command, use the
remove_generated_clock command.
3-1
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
The following figure shows an example of a design and its timing paths.
Figure 3-1 Timing Path Types
CLK
Logic
Path 4
Each path starts at a data launch point, passes through some combinational logic, and ends
at a data capture point:
Path 1 starts at an input port and ends at the data input of a sequential element.
Path 2 starts at the clock pin of a sequential element and ends at the data input of a
sequential element.
Path 3 starts at the clock pin of a sequential element and ends at an output port.
Path 4 starts at an input port and ends at an output port.
Each path in the design has an associated timing slack. The slack is a time value that can
be positive, zero, or negative. The single path having the worst slack is called the critical
path. This is the path that has the most negative slack, or if there are no timing violations,
the one with the smallest slack among all paths in the design.
The tool organizes timing paths into groups, and performs timing analysis and optimization
separately for each group. By default, there is one path group for each clock in the design.
All timing paths clocked by a given clock at the path endpoint belong to the path group for
that clock.
The tool also creates a path group called **default** (including the asterisks). The **default**
group contains any paths that cannot be categorized by the clock used at the path endpoint,
such as feedthrough and asynchronous paths.
All timing paths within a path group are optimized for timing together, starting with the critical
path.
All path groups have the same weight by default, and paths within a group are optimized
and reported separately from other path groups. Within each path group, the tool optimizes
and improves the timing of the critical path until another paths in the group becomes more
critical.
The tool works on all critical paths within the range specified by the -critical_path
option, starting from the most critical path.
The following example creates a path group named slct that has weight of 2.5, a critical
range of 5, and consisting of all the timing paths starting from the register named slct_reg. It
then adds the timing paths starting from the input port named slct_nxt to this path group.
However, it removes the paths that start at the input port named slct_nxt and go through
both the pins named U29/A and U54/Y from this group and returns these paths to their
default path group.
icc2_shell> group_path -name slct -weight 2.5 -critical_range 5 \
-from [get_cells slct_reg]
icc2_shell> group_path -name slct -from [get_port slct_nxt]
icc2_shell> group_path -default [get_port slct_nxt] \
-through [get_pin U29/A] -through [get_pin U54/Y]
To report path group information, use the report_path_group command and to remove
path groups, use the remove_path_group command.
Path Delay Analysis for the Same Launch and Capture Clock
By default, the tool checks for data arrival at the next capture clock edge following the launch
event. For a single-clock design, launch occurs on a clock edge and capture occurs at the
next clock edge.
The following figure shows how the tool determines the setup and hold constraints for a path
that is launched and captured by the same clock, which has a period of 10.
Figure 3-2 Setup and Hold Analysis for the Same Launch and Capture Clock
Launch delay
FF1 FF2
D Q Combinational D Q
logic
CLK
Capture delay
Clock at launch
flip-flop (FF1)
Setup
Hold
Clock at capture
flip-flop (FF2)
0 10 20 30
When calculating the delays along the launch and capture paths, the tool includes the
delays due to the effects of the clock network, such as clock source latency, network latency,
and clock uncertainty.
Launch delay
FF1 FF2
D Q Combinational D Q
logic
CLK1
Capture delay
CLK2
The clocks in this example, CLK1 and CLK2, are created with the following commands:
icc2_shell> create_clock -period 10 -waveform {0 5} CLK1
icc2_shell> create_clock -period 25 -waveform {5 12.5} CLK2
Figure 3-4 Setup Analysis for Different Launch and Capture Clock
Clock at launch
flip-flop (CLK1)
Setup 1
Setup 2
Clock at capture
flip-flop (CLK2)
0 5 10 15 20 25 30 35 40 45 50
The source clock edge at time=30 occurs at the same time as the capture edge, not earlier,
so it is not considered the corresponding launch edge.
Setup 1 allows less time between launch and capture. Therefore, it is the more restrictive
constraint and determines the maximum allowed delay for the path, which is 5 for this
example.
Figure 3-5 Hold Analysis for Different Launch and Capture Clock
Setup 1 Setup 2
launch edge launch edge
Clock at launch
flop (CLK1)
Hold 1a Hold 2b
Hold 1b Hold 2a
Setup 1 Setup 2
capture edge capture edge
0 5 10 15 20 25 30 35 40 45 50
For each setup relationship, the tool performs two different hold checks:
The data launched by the setup launch edge must not be captured by the previous
capture edge.
The data launched by the next launch edge must not be captured by the setup capture
edge.
For the setup relationship labeled Setup 1, the corresponding two hold checks are labeled
Hold1a and Hold1b. Similarly, for the setup relationship labeled Setup 2, the two hold checks
are labeled Hold2a and Hold2b.
Of these hold checks, the most restrictive is the one where the capture edge occurs latest
relative to the launch edge, which is Hold 2b. Therefore, Hold 2b determines the minimum
allowed delay for this path, which is 0.
Input delay
BlockA
Path 1
CLK
Logic
To constrain the input port A, use the set_input_delay command and specify
The clock that launches the data at the external sequential device
The delay for the data to arrive at the input port after it is launched
In the following figure, the data leaving the output port named Z of the block named BlockA
is captured by an external sequential device.
Figure 3-7 External Output Delay
Output delay
BlockA
Path 3
CLK
CLK
Logic
To constrain the output port Z, use the set_output_delay command and specify
The clock that captures the data at the external sequential device
The delay for the data to arrive at the external sequential device after it leaves port Z
For a more accurate timing analysis, specify a related clock by using one of the following two
methods:
Specify the -clock option with the name of the reference clock
When you specify the -clock option, by default, the tool
Assumes the input or output delay is relative to the rising edge of the clock. To specify
that the delay is relative to its falling edge, use the -clock_fall option with the
-clock option.
Adds the source and network latencies specified for the reference clock to the launch
or capture path associated with the input or output delay.
To specify that the source and network latencies of the reference clock are already
included in the input or output delay, use the -source_latency_included and
-network_latency_included options. If the reference clock is a propagated clock,
the -network_latency_included option is ignored.
Specify the -reference_pin option with a pin or port on the reference clock network
When you specify the -reference_pin option, by default, the tool
Uses all the clocks that reach the reference pin to constrain the ports. To select a
specific clock, use the -clock option with the -reference_pin option.
Adds the source and network latencies specified for the for any ideal clocks that
reach the reference pin, to the corresponding launch or capture path associated with
the input or output delay,
However, for any propagated clocks that reach the reference pin, tool adds the
source delay specified for that clock and the propagated clock network delay up to the
reference pin to the corresponding launch or capture path associated with the input
or output delay.
If you do not specify a relative clock, the tool derives a new clock based on the clocks of the
current block.
When you use the set_input_delay or set_output_delay command, you can specify
that the delay:
Is only for a rise or fall transition by using the -rise or -fall option.
By default, the tool uses the delay for both the rise and fall transition at the input or output
port.
Is only for the longest or shortest path by using the -max or -min option.
By default, the tool uses the delay is for both the longest and shortest paths.
Is with respect to a level-sensitive latch by using the -level_sensitive option.
By default, the tool assumes the timing paths associated with the input or output delay
are launched or captured by an edge-sensitive flip-flop.
Should not overwrite any existing input or output delay settings by using the -add_delay
option.
Use this option to specify different input or output delays with respect to different
reference clocks, for the same port.
For designs with multiple scenarios, by default, the input or output delay applies only to the
current scenario. To specify the input or output delay for
All the scenarios of specific modes, use the -modes option.
All the scenarios of specific corners and the current mode, use the -corners option.
All the scenarios of specific modes and corners, use the -modes and -corners options
Specific scenarios, use the -scenarios option.
When you use this option, you cannot use the -modes or -corners options.
The following figure shows the external paths for one input and output of a block, and the
delays associate with those external paths.
Figure 3-8 External Delays for an Input and Output Port
4.3
Block
4.5
OUT1 Logic
CLK1 IN1
Logic OUT2
CLK1
2.3 IN2 OUT3
CLK2
The following commands constrain the input named IN1 by setting an input delay of 4.5 with
respect to the clock named CLK1 and an input delay of 2.3 with respect to the clock named
CLK2:
icc2_shell> set_input_delay 4.5 -clock CLK1 [get_port IN1]
icc2_shell> set_input_delay 2.3 -clock CLK2 [get_port IN1] \
-add_delay
The following command constrains the output named OUT1 by setting an output delay of 4.3
with respect to the clock named CLK1:
icc2_shell> set_input_delay 4.3 -clock CLK1 [get_port OUT1]
AND2 Block_A
A
Z I1
B
To prevent this delay from being counted twice, estimate the load-dependent delay of the
driving cell, then subtract that amount from the input delay you specify on the port.
Instead, set in input delay on all inputs excluding the clock ports, as shown in the following
example:
icc2_shell>set_input_delay 2 -clock CLK \
[remove_from_collection [all_inputs] [get_port CLK]]
Use the set_clock_latency command with the -source option to define the actual source
latency, if any.
Each timing exception command can apply to a single path or to a group of related paths,
such as all paths from one clock domain to another, or all paths that pass through a specified
point in the design.
To report all the timing exceptions that have been applied to a design, use the
report_exceptions command.
To restore a path to its default before timing exceptions were applied, use the reset_path
command or the -reset_path option of each timing exception command.
To define timing paths as false paths, use the set_false_path command. When you do so,
you must specify the paths you want to set as a false paths by using one or more of the
following methods:
Specify the startpoint of the path by using the -from, -rise_from, or -fall_from option
Valid startpoints are
Clocks
If you specify a clock, timing paths starting from all the sequential cells and primary
ports constrained by that clock are set as false paths.
Sequential cells
Clock pins of a sequential cells
Data pins of a latches
Input or inout ports
Pins with an input delay settings
Specify one or more throughpoints of the path by using the -through, -rise_through,
or -fall_through option one or more times
Valid throughpoints are
Pins
Ports
Cells
Nets
If all paths going through a pin are false paths, using the set_disable_timing to
disable a timing arc of that pin is more efficient than using the set_false_path
-through command.
Specify the endpoint of the path by using the -to, -rise_to, or -fall_to option
Valid endpoints are
Clocks
If you specify a clock, timing paths ending at all the sequential cells and primary ports
constrained by that clock are set as false paths.
Sequential cells
Data pins of a sequential cells
Output or inout ports
The following example shows how to set all timing paths between two clocks, ck1 and ck2,
as false paths:
icc2_shell> set_false_path -from [get_clocks ck1] \
-to [get_clocks ck2]
icc2_shell> set_false_path -from [get_clocks ck2] \
-to [get_clocks ck1]
For this example, an alternative is to use the set_clock_groups command to exclude all
paths between clocks ck1 and ck2 from timing analysis.
To remove a maximum or minimum path delay setting, use the -reset_path option of the
set_max_delay or set_min_delay command or use the reset_path command.
The following example sets a maximum path delay between registers REGA and REGB to
12 and minimum path delay to 2:
icc2_shell> set_max_delay 12.0 \
-from [get_cells REGA] -to [get_cells REGB]
icc2_shell> set_min_delay 2.0 \
-from [get_cells REGA] -to [get_cells REGB]
This command specifies that the path takes two clock cycles, establishing the new setup
relationship as shown in the following figure. The second capture edge following the launch
edge becomes the applicable edge for the end of the path.
Figure 3-10 Multicycle Path Setup
CLKReg4
CLKReg5
Changing the setup relationship implicitly changes the hold relationship as well because all
hold relationships are based on the valid setup relationships. The tool verifies that the data
launched by the setup launch edge is not captured by the previous capture edge. The new
hold relationship is shown in the following figure.
CLKReg4
Hold Setup
CLKReg5
The hold relationship shown in this figure is probably not the correct relationship for the
design. If Reg4 does not need to hold the data beyond the first clock edge, you need to
specify a multicycle hold timing exception, as shown by the following commands:
icc2_shell> set_multicycle_path -setup 2 \
-from [get_cells Reg4] -to [get_cells Reg5]
icc2_shell> set_multicycle_path -hold 1 \
-from [get_cells Reg4] -to [get_cells Reg5]
The following figure shows the setup and hold relationships set correctly with these two
set_multicycle_path commands. The second set_multicycle_path command moves
the capture edge of the hold relationship backward by one clock cycle, from the dashed-line
arrow to the solid-line arrow.
Figure 3-12 Multicycle Path Hold Set Correctly
CLKReg4
Hold Setup
CLKReg5
Cells
Nets
Specify the endpoint of the path by using the -to, -rise_to, or -fall_to option.
Valid endpoints are
Clocks
If you specify a clock, timing paths ending at all the sequential cells and primary
ports constrained by that clock are set as false paths.
Sequential cells
Data pins of a sequential cells
Output or inout ports
Pins with an output delay settings
Optionally, you can limit the path margin setting to
Setup or hold analysis only by using the -setup or -hold options.
By default, it applies to both setup and hold analysis.
Rise or fall analysis only by using the -rise or -fall options.
By default, it applies to both rise and fall analysis.
For example, consider the circuit shown in the following figure. The three 16-bit registers are
clocked by three different clocks. Each register represents 16 flip-flops. Register REG2 is
only used for test purposes, so all paths from REG2 to REG3 are false paths during normal
operation of the circuit.
Figure 3-13 Multiplexed Register Paths
REG1
16
D Q
CLK1 REG3
16
0
D Q
1
REG2 CLK3
16
D Q
CLK2
TEST_ENABLE
To ignore the timing from REG2 to REG3, you can use any of the following methods:
Use case analysis to consider the case when the test enable signal is 0.
Set an exclusive relationship between the CLK1 and CLK2 clock domains.
Declare the paths between clock domains CLK2 and CLK3 to be false.
icc2_shell> set_false_path \
-from [get_clocks CLK2] -to [get_clocks CLK3]
This method is an efficient way to specify the false paths because the tool only needs to
keep track of the specified clock domains. It does not have to keep track of exceptions
on registers, pins, nets, and so on.
Declare the 16 individual paths from REG2 to REG3 to be false.
icc2_shell> set_false_path -from [get_pins REG2[0]/CP] \
-to [get_pins REG3[0]/D]
icc2_shell> set_false_path -from [get_pins REG2[1]/CP] \
-to [get_pins REG3[1]/D]
icc2_shell> ...
This method is less efficient because the tool must keep track of timing exceptions for 16
different paths.
Declare all paths from REG2 to REG3 to be false.
icc2_shell> set_false_path -from [get_pins REG2[*]/CP] \
-to [get_pins REG3[*]/D]
This method is even less efficient because the tool must keep track of paths from each
clock pin of REG2 to each data pin of REG3, a total of 256 paths.
Declare all paths from REG2 to be false.
icc2_shell> set_false_path -from [get_pins REG2[*]/CP]
This method is similar to the previous one. The tool must keep track of all paths
originating from each clock pin of REG2, a total of 256 paths.
In case of conflicts, the timing exception types have the following order of priority, from
highest to lowest:
1. set_false_path settings
2. set_max_delay and set_min_delay settings
3. set_multicycle_path settings
For example, if you declare a path to be false and also set its maximum delay to some value,
the false path declaration has priority. The maximum delay setting is ignored.
Here are some possible path specification combinations, listed in order of priority from
highest to lowest, according to the preceding priority rules:
1. -from pin -to pin
2. -from pin -to clock
3. -from pin
4. -from clock -to pin
5. -to pin
6. -from clock -to clock
7. -from clock
8. -to clock
The first command sets the maximum delay of all paths starting from CLK1. However, the
second command is more specific, so it overrides the first command for paths starting at
CLK1 and ending at CLK2.
For a timing path that begins at Reg24 cell, which is clocked by clkB clock, and ends at
Reg32 cell, which is clocked by clkD clock, only the following exception is applicable:
icc2_shell> set_multicycle_path 3 -from [get_pins Reg24/CK]
However, for a timing path that begins at Reg24 cell, which is clocked by clkB clock, and
ends at cell Reg11 cell, which is clocked by clkC clock, the following two exceptions are
applicable:
icc2_shell> set_false_path \
-from [get_clocks clkB] -to [get_clocks clkC]
icc2_shell> set_multicycle_path 3 -from [get_pins Reg24/CK]
In this case, the set_false_path command has priority over the set_multicycle_path
command, so the tool uses the false-path exception for this path.
For a timing path that begins at Reg61 cell, which is clocked by clkA clock, and ends at
Reg53 cell, which is clocked by clkC clock, the following two exceptions are applicable:
icc2_shell> set_multicycle_path 2 \
-from [get_clocks clkA] -to [get_clocks clkC]
icc2_shell> set_multicycle_path 3 -to [get_pins Reg53/D]
In this case, there are two set_multicycle_path commands with different path
specifications, so the tool uses the more specific path specification, which is the multicycle
path setting to the D pin of the Reg53 cell.
A logic transition, either rising or falling, the tool eliminates certain paths by limiting the
transitions considered during analysis.
To do so, use the set_case_analysis rising or set_case_analysis falling
command, as shown in the following example:
icc2_shell> set_case_analysis rising [get_ports RESET]
In addition, the tool treats the following as case analysis values also:
Cell pins that are connected to tie-high or tie-low cells
Cell pins that are unconnected, which the tool ties to constant values
You can control case analysis by using the following commands or application option
settings:
Propagate case analysis values through clock-gating cells by setting the
time.case_analysis_propagate_through_icg application option to true.
By default, the tool stops propagating case analysis values at clock-gating cells.
Propagate case analysis values through sequential cells by setting the
time.case_analysis_sequential_propagation application option to always.
By default, this application option is set to never and the tool stops propagating case
analysis values at sequential cells.
Disable the propagation of logic constants except for those set with the
set_case_analysis command by setting the
time.disable_case_analysis_ti_hi_lo application option to true.
By default, the tool propagates all logic constants.
Disable the propagation of all case analysis values by setting the
time.disable_case_analysis application option to true.
By default, the tool propagates all case analysis values.
Remove specific case analysis values by using the remove_case_analysis command.
To report
Case analysis values, use the report_case_analysis command.
Timing arcs that have been disabled by various causes, including case analysis, use the
report_disable_timing command.
The following example disables the timing path going through pins B and Z of the multiplexer
named U15 shown in Figure 3-14 by specifying a case analysis setting of 0 on the input port
named TEST_EN:
icc2_shell> set_case_analysis 0 [get_ports TEST_EN]
Z
B
B to Z timing arc is disabled
Sel
TEST_E
0
When you disable the timing arcs of a cell or cell pin, the tool applies a size-only attribute
setting on the corresponding cell, which prevents that cell from being removed during
optimization. However, it can be resized during optimization.
To report all timing arcs that are disabled in a block, including those disabled by the
set_disable_timing command, use the report_disable_timing command.
You can define such checks by using the set_data_check command, or they can be
defined in the reference library as nonsequential constraints. You should use data checks
only in situations such as those described previously. Data checks should not be considered
a replacement for ordinary sequential checking.
The following figure shows a simple example of a cell that has a nonsequential constraint.
The cell has two data inputs, D1 and D2. The rising edge of D2 is the active edge that might
be used to latch data at D1. Pin D1 is called the constrained pin and pin D2 is called the
related pin.
Figure 3-15 Simple Data Check Example
D1
Constrained pin D1
D2
Hold
Related pin Setup
D2
In this example, the signal at D1 must be stable for a certain setup time before the active
edge. It must also be stable for a certain hold time after the active edge. If these
nonsequential constraints are not already defined for the library cell, you can define them in
the tool with the set_data_check command.
Data checks are nonsequential, so they do not break timing paths. In the following figure, the
data check between pins D1 and D2 does not interrupt the timing paths shown by the
dashed-line arrows. If you define the signal at D2 as a clock, the check is sequential and the
paths is terminated at D1.
Figure 3-16 Timing Paths Not Broken by Data Checks
D Q
ff1
D1
Combinational D Q
D2 Data
check ff3
D Q
ff2
In a data check, signals arriving at a constrained pin or related pin can come from different
clock domains. The tool checks the signal paths separately and puts them into different
clock groups, just like in ordinary sequential checks.
To specify a pin or port as the related pin, use the -from, -rise_from, or -fall_from
option.
To specify a pin or port as the constrained pin, use the -to, -rise_to, or -fall_to
option.
To specify that the data check value be for setup only or hold only, use the -setup option
or -hold option. Otherwise, the value applies to both setup and hold.
To specify the name of a single clock that launches the signal for the related pin, use the
-clock option.
To remove data checks set with the set_data_check command, use the
remove_data_check command.
D1
Constrained pin D1
D2
Hold
Related pin Setup
D2
In the following figure, the data checks apply to both rising and falling edges on the related
pin.
Figure 3-18 Data Checks on Rising and Falling Edges
D1
D1
Constrained pin
D2 Setup Hold
Related pin
D2
You can define a no-change data check by specifying only a setup check from the rising
edge and a hold check from the falling edge, by using the following commands:
icc2_shell> set_data_check -rise_from D2 -to D1 -setup 3.5
icc2_shell> set_data_check -fall_from D2 -to D1 -hold 3.0
The tool interprets this as a no-change check on a positive-going pulse. The resulting timing
check is shown in the following figure.
Figure 3-19 No-Change Data Check
D1
Constrained pin D1
D2
Setup Hold
Related pin
D2
non_seq_setup_falling
non_seq_hold_rising
non_seq_hold_falling
For more information on defining nonsequential constraints in the library, see the Library
Compiler documentation.
Using nonsequential constraints defined in the library cell results in a more accurate
analysis than using the set_data_check command because the setup and hold times can
be made sensitive to the slew of the constrained pin and the related pin. The
set_data_check command is not sensitive to slew.
The remove_data_check command does not remove data checks defined in library cells.
D Q D Q
CLOCK
GATE GATED_CLOCK
CLOCK
No-change
interval
GATE
Clipped clock pulse
GATED_CLOCK
GATED_CLOCK
To control the transition of the gating signal, you can specify a set and hold margin with
respect to the clock by using the for the set_clock_gating_check command.
The following figure shows a clock gating check performed on a gating element that is an
AND or NAND gate.
D Q D Q
CLOCK
GATE GATED_CLOCK
No-change interval
CLOCK
GATE
The following figure, shows a clock gating check performed on a gating element that is an
OR or NOR gate.
Figure 3-22 Clock Gating Checks for OR and NOR Gates
D Q D Q
N_CLOCK
GATE GATED_CLOCK
No-change interval
N_CLOCK
GATE
Constraints both the rising and falling edges of the gating signal.
To control only the rising or falling edge, use the -rise or -fall options.
Determines whether to use the high or low level of the clock to constrain the gating
signal, based on the gating logic.
If the gating cell is:
An AND or NAND gate, the tool performs the check on the high level of the clock.
An OR or NOR gates, the tool performs the check on the high level of the clock
Any other gate, the tool does not perform the check, unless you specify which level of
the clock to use.
To specify which level of the clock to perform the check, use the -high or -low. option.
The tool handles clock-gating checks like other timing constraints and tries to adjust the
delays of the logic driving the gating inputs to avoid setup and hold violations. During
optimization, the tool can only size cells with clock-gating checks.
Clock-gating checks can be performed only between a clock signal and a nonclock signal,
not between two clock signals or between two nonclock signals.
To remove clock-gating checks, use the remove_clock_gating_check command.
You can disable clock-gating checks on specific cells and pins by using the
set_disable_clock_gating_check command to list the cells and pins you want the tool to
ignore. To cancel the effect of this command, use the
remove_disable_clock_gating_check command.
The following example shows how to specify a setup requirement of 0.2 and a hold
requirement of 0.4 on all gates in the clock network of CLK1.
icc2_shell> set_clock_gating_check -setup 0.2 -hold 0.4 CLK1
4-1
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
In general, use only one method to specify the operating conditions for a block. If you must
use both methods, for example, to set operating voltages for a multivoltage design that
override the operating conditions set by the SDC file, use the set_operating_conditions
command first, and then use the individual commands to override the specific values.
See Also
IC Compiler II Library Preparation User Guide
To guide the IC Compiler II tool to use a specific characterization point for a corner, use the
set_process_label command to specify its process label for a corner, as shown in the
following example:
icc2_shell> create_corner c_fast
icc2_shell> set_process_label corners c_fast fast
In addition to the report_pvt command, you can access information on the PVT values
used for the current block by querying the timing attributes shown in the following table.
Table 4-1 Operating Condition Attributes
ck ck
CLK
For a hold check, the tool uses minimum delays for the launch clock path and datapath and
maximum delays for the capture clock path.
Figure 4-2 On-Chip Variation for Hold Analysis
ck ck
CLK
The following table shows the clock arrival times, delays, operating conditions, and derating
factors used for setup checks and for hold analysis.
Table 4-2 Timing Parameters Used for Setup and Hold Analysis
Analysis type Launch clock path Data path Capture clock path
Setup Late clock, maximum Maximum delay, late Early clock, minimum
delay in clock path, derating, maximum delay in clock path, early
late derating, operating condition derating, minimum
worst-case operating operating condition
condition
Table 4-2 Timing Parameters Used for Setup and Hold Analysis (Continued)
Analysis type Launch clock path Data path Capture clock path
Hold Early clock, minimum Minimum delay, early Late clock, maximum
delay in clock path, derating, minimum delay in clock path, late
early derating, operating condition derating, maximum
best-case operating operating condition
condition
During timing analysis, the tool simultaneously considers the minimum and maximum
values specified for the following design parameters:
Input and output external delays
Port wire load models
Port fanout number
Net capacitance
Net resistance
Net wire load model
Clock latency
Clock transition time
Input port driving cell
The following example reduces all minimum delays by 10 percent and increases all
maximum delays by 20 percent for the current corner:
icc2_shell> set_timing_derate -early 0.9 -late 1.2
To report the derating factors, use the report_timing_derate command. By default, the
command reports the derating factors for all corners. To report the derating factors for
specific corners, use the -corners option.
To reset the derating factors to 1.0, use the reset_timing_derate command. By default,
the command resets the derating factors for the current corner for the current block and all
its cell instances. To reset the derating factors for specific corners, use the -corners option.
To reset the derating factors for specific objects, specify the objects.
Introduction to AOCV
Advanced on-chip variation (AOCV) is an optional method for improving accuracy by using
varying derating factors for different paths based on the path depth or physical distance
spans. A path that has more levels of logic or covers a greater physical distance tends to
have less total variation because the random variations from gate to gate tend to cancel
each other out. Accordingly, AOCV applies higher derating values to short paths and lower
derating values to long paths.
This method is less pessimistic than a conventional OCV analysis, which relies on constant
derating factors that do not consider path-specific metrics. The improved timing accuracy
affects both timing reports and design optimization.
You can change the default behavior of AOCV analysis by using the following application
option settings:
Limit AOCV analysis to the clock network only by setting the
time.aocvm_enable_clock_network_only application option to true.
By default, AOCV analysis is performed for both the clock and data networks.
Change how path depth is calculated during AOCV analysis by using the
time.aocvm_analysis_mode application option, which has the following three settings:
separate_launch_capture_depth
This setting, which is the default, specifies the tool to use both the clock and data
network object and calculates a separate depth for capture and launch paths.
combined_launch_capture_depth
This setting specifies the tool to use both the clock and data network object and
calculates a combined depth for the entire path, considering both the capture and
launch paths.
separate_data_and_clock_metrics
This setting specifies the tool to calculate a separate depth for the clock and data
paths.
Consider physical distance, in addition to the gate counts, by setting the
time.ocvm_enable_distance_analysis application option to true.
By default, the tool does not consider the physical distance of the path.
Use only cell distance and depth metrics for deriving both cell and net AOCV derates by
setting the time.aocvm_enable_single_path_metrics application option to true.
Ignore OCV derates, which are specified with the set_timing_derate command, when
AOCV derates are available by setting the time.ocvm_precedence_compatibility
application option to true.
By default, the tool considers both OCV and AOCV derate settings based on the
following priority, from the highest to the lowest:
1. OCV derate setting on the leaf cell
2. AOCV derate setting on the library cell
3. OCV derate setting on the library cell
4. AOCV derate setting on the hierarchical cell
5. OCV derate setting on the hierarchical cell
6. AOCV derate setting on the design
7. OCV derate setting on the design
Both library-based and file-based AOCV data can be generated by the Synopsys
SiliconSmart characterization tool. For details, see the SiliconSmart ACE User Guide,
available on SolvNet.
You can use both library-based and file-based AOCV derating data at the same time, and
the following priority is used to resolve any conflicts, starting from the highest to the lowest:
1. File-based AOCV derate setting on the library cell
2. File-based AOCV derate setting on the hierarchical cell
3. File-based AOCV derate setting on the design
4. Library-based AOCV derate setting on the library cell or on the library
A depth adjustment factor at the library cell or cell instance level by using the
set_aocvm_coefficient command.
By default, the tool considers all cells to have a depth of one, when calculating the total
depth (levels of logic) of a timing path. You can increase or decrease the depth for a
specific library cell by using this command. The following example increase the depth of
a library cell named MGX16 to 1.5:
icc2_shell> set_aocvm_coefficient 1.5 [get_lib_cells lib_fast/MGX16]
To remove some or all AOCV derating values from objects in the design, use the
remove_ocvm command.
The following table shows the syntax definition for the AOCV file format.
Table 4-3 AOCV File Format Syntax
object_spec string
table A set of N x M floating-point values. There are also the following special
cases:
If N==0, the table is of size M.
If M==0, the table is of size N.
If M==0 and N==0, the table is of size 1.
Linear interpolation is used to determine points that have not been
defined in the table. The tool does not extrapolate beyond the lowest or
highest values specified in the table.
The object_spec definition specifies the object name. You can optionally use an
expression that is evaluated based on the attributes of the object, similar to using the
regexp Tcl command within commands that create collections. You can use any of the
options of the related collection command in the patterns field. For example, if the
object_type is lib_cell, you can use any of the arguments of the related
get_lib_cells command in the patterns field.
To add a comment in any location within the file, use double forward slashes (//).
The following example of an AOCV file sets an early AOCV table for clock nets in the whole
design:
version 1.0
object_type: design
rf_type: rise fall
delay_type: cell net
derate_type: early
path_type: clock
object_spec: top
depth: 0 1 2 3
distance: 100 200
table: 0.87 0.93 0.95 0.96 \
0.83 0.85 0.87 0.90
The following example of an AOCV file sets a late AOCV table for clock paths, for all
hierarchical cells with an operating condition voltage of 1.2 V:
version 1.0
object_type: cell
rf_type: rise
delay_type: cell
derate_type: late
path_type: clock
object_spec: * -filter (voltage_max==1.2 && is_hierarchical==true)
depth: 1 2 3
distance: 100 1000
table: 1.21 1.11 1.09 \
1.23 1.16 1.14
The following figure graphically compares conventional min-max delay with POCV statistical
delay.
Figure 4-3 Comparison of Min-Max Delay and POCV Statistical Delay
probability
probability
POCV
statistical delay
nominal delay
delay, ps
After the tool determines the delay distribution of each timing arc, it propagates them
statistically through timing paths to calculate each arrival time, required time, and slack
value as a total nominal value plus a cumulative variation.
To determine the cumulative delay of a path, the tool statistically combines the delay
distribution of each stage. This is more accurate than simply adding the worst-case value
from each stage. The resulting delay and slack values are more realistic and less
pessimistic than values calculated by simple min-max addition.
By default, the final slack reported by the report_timing command is the slack at three
standard deviations ( 3 ) less than the nominal slack:
reported_slack = nominal_slack ( 3 )
You can change the sigma multiplier from 3.0 to a larger or smaller value to tighten or loosen
the timing constraint.
Both library-based and file-based POCV data can be generated by the Synopsys
SiliconSmart characterization tool. For details, see the SiliconSmart ACE User Guide,
available on SolvNet.
You can use both library-based and file-based POCV derating data at the same time, and
the following priority is used to resolve any conflicts, starting from the highest to the lowest:
1. File-based POCV derate setting on the library cell
2. File-based POCV derate setting on the hierarchical cell
3. File-based POCV derate setting on the design
4. Library-based POCV derate setting on the library cell or on the library
version 4.0 (on-chip variation data file version number; must be 4.0 or later)
The following example sets the POCV coefficient for falling transitions on the lib28/invx2
library cell:
version: 4.0
ocvm_type: pocvm
object_type: lib_cell
rf_type rise: fall
delay_type : cell
derate_type: early
object_spec: lib28/invx2
coefficient: 0.05
The object_spec definition specifies the object name. You can optionally use an
expression that is evaluated based on the attributes of the object, similar to using the
regexp Tcl command within commands that create collections. You can use any of the
options of the related collection command in the patterns field. For example, if the
object_type is lib_cell, you can use any of the arguments of the related
get_lib_cells command in the patterns field.
To add a comment in any location within the file, use double forward slashes (//).
The following example sets the POCV coefficient for early delays in the whole design:
version: 4.0
ovcm_type: pocv
object_type: design
rf_type: rise fall
delay_type: cell net
derate_type: early
object_spec: // Leave object_spec blank if object_type is design
coefficient: 0.05
The following example sets the POCV coefficient for late delays for all hierarchical cells with
an operating condition voltage of 1.2 V:
version 1.0
ovcm_type: pocv
object_type: cell
rf_type: rise
delay_type: cell
derate_type: late
object_spec: * -filter (voltage_max==1.2 && is_hierarchical==true)
coefficient: 0.07
2. (Optional) If you use LVF libraries with constraint variation data, enable the use of
constraint variation during POCV analysis by using the
time.pocvm_enable_constraint_variation application option.
3. (Optional) If you have distance-based derate tables, enable the use of distance-based
derates during POCV analysis by using the time.ocvm_enable_distance_analysis
application option.
icc2_shell> set_app_options -name \
time.ocvm_enable_distance_analysis -value true
4. Read in the POCV coefficient data files by using the read_ocvm command.
icc2_shell> read_ocvm coefs.pocv
The tool supports POCV data file version 4.0. If an object has both a coefficient and LVF
data, the coefficient data takes higher precedence.
5. (Optional) Apply an additional guard band by using the set_timing_derate
-pocvm_guardband command.
icc2_shell> set_timing_derate -cell_delay -pocvm_guardband -early 0.98
icc2_shell> set_timing_derate -cell_delay -pocvm_guardband -late 1.03
Applying a guard band increases the POCV derating effect, which makes timing checks
more restrictive.
6. Report the design objects that are annotated with POCV coefficients by using the
report_ocvm -type pocvm command.
icc2_shell> report_ocvm -type pocvm -nosplit
When you use the -variation option, the tool prints the statistical information (mean
and sigma) in the timing report.
output in the shared clock segment is called the common point, which is the output of U1 in
this case.
Figure 4-4 Clock Reconvergence Pessimism Example
Reg1 Reg2
Maximum Delay
d q Combinational d
logic
Minimum Delay
ck ck
CLK U1 U2
Common point
Common portion
During setup analysis, for the common portion, the tool uses the maximum delay for the
launch path and the minimum delay capture path, resulting in clock reconvergence
pessimism
Pessimism can also be introduced on paths that fan out from a clock source to the data pin
of a sequential device and a portion of the clock path is shared by the launch and capture
paths, as shown in the following figure.
Figure 4-5 Timing Path Fanout From Clock Source to Data Pin
Launch Path
Reg1
U3
D Q
CLK U1
U2
Capture Path
Common portion
Common point
The amount of CRP reported by the report_crpr command can be slightly different from
the amount reported by the report_timing command. For computational efficiency, the
report_timing command merges multiple points for CRPR calculations when the CRP
differences between adjacent points are too small.
5-1
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
If you use both methods, the drive resistance and input transition derived based on the
driving cell specified with the set_driving_cell command replace the values specified
with the set_drive and set_input_transition commands.
To report the driving cell or the drive resistance and input transition on ports, use the
report_ports -drive command.
An output pin of the library cell to drive the port by using the -pin option.
If the library cell you specify has multiple output pins and you do not use this option, the
tool randomly picks an output pin of the cell to drive the port being constrained.
An input pin of the driving cell for selecting a timing arc to calculate the drive
characteristics by using the -from_pin option.
If you do use this option, the tool randomly picks an input pin of the driving cell.
An input rise and fall transition at the input of the driving cell for calculating the drive
characteristics by using the -input_transition_rise and -input_transition_fall
options.
By default, the tool uses zero transition at the input of the driving cell.
That the tool should not scale the drive characteristics based on the operating conditions
of the block by using the -dont_scale option.
By default, the tool scales the drive characteristics based on the operating conditions of
the block.
That the tool should not apply the design rules of the driving cell on the port being
constrained by using the -no_design_rule option.
By default, the tool applies the design rules of the driving cell on the port being
constrained.
A value to multiply the calculated transition for the port being constrained by using the
-multiply_by option.
For designs with multiple scenarios, by default, the driving cell you specify applies only to
the current scenario. To specify a driving cell for
All the scenarios of specific modes, use the -modes option.
All the scenarios of specific corners and the current mode, use the -corners option.
All the scenarios of specific modes and corners, use the -modes and -corners options
Specific scenarios, use the -scenarios option.
When you use this option, you cannot use the -modes or -corners options.
The following constrains the port named I2 by specifying a library cell of type AND2 as the
driving cell, selecting the timing arc from its input pin named A, and specifying a rise and fall
transition of 0.5 for this input pin:
icc2_shell> set_driving_cell [get_ports I2] \
-lib_cell AND2 -from_pin A \
-input_transition_rise 0.5 -input_transition_fall 0.5
Figure 5-1 Specifying Input Pin and Input Transition for the Driving Cell
AND2 Block_A
Rise transition at input A = 0.5
A
Fall transition at input A = 0.5 Z I1
B
The following example sets the rise and fall drives of ports A, B, and C to 2.0
icc2_shell> set_drive 2.0 {A B C}
Using the set_driving_cell command is the more accurate method for specifying the
drive characteristics of an input or inout port. However, if you cannot specify a driving cell,
specify the external drive characteristics by using the set_drive and
set_input_transition commands.
The following example sets the rise and fall input transition of ports A, B, and C to 0.5
icc2_shell> set_input_transition 0.5 {A B C}
Using the set_driving_cell command is the more accurate method for specifying the
drive characteristics of an input or inout port. However, if you cannot specify a driving cell,
specify the external drive characteristics by using the set_drive and
set_input_transition commands.
A separate capacitance for early and late analysis by using the -min and -max options.
By default, the capacitance applies to both early and late analysis.
That the capacitance should be treated as a wire load by using the -wire_load option
or both a wire load and a pin load by using the -wire_load and -pin_load options.
By default, the tool treats the capacitance as a pin load.
The following example sets a capacitance of 3.5 on all inputs and 5 on all outputs.
icc2_shell> set_load 3.5 [all_inputs]
icc2_shell> set_load 5 [all_outputs]
The size_only attribute is set on the cell that contains or drives the source. This
guarantees that the ideal network source is not lost during a compile operation.
The tool automatically spreads the ideal network property to the nets, cells, and pins in the
transitive fanout of the source object, according to certain propagation rules.
The tool propagates the ideal network property and stops when it reaches
A sequential cell.
A point beyond which there is no forward timing arc, such as an output port or a disabled
timing arc.
An object that is not ideal.
The tool considers the following objects to be ideal
A pin that it is one of the following:
A pin specified in the object list of the set_ideal_network command
A driver pin and its cell is ideal
A load pin attached to an ideal net
A net that has all its driving pins as ideal.
A combinational cell that has one of the following characteristics:
All its input pins are ideal
An input pin is attached to a constant net and all other input pins are ideal.
An object with the case analysis attribute is not treated as constant.
If an ideal network overlaps a clock network, the clock timing information, including clock
latency and transition values, overrides the ideal timing for the clock portion of the
overlapped networks.
For the circuit in the following figure, assume you specified pin U1/Z as the source of the
ideal network. The tool propagates the ideal network property along the nets, cells, and pins
in the transitive fanout of pin U1/Z and stops at the sequential cell named REG1. In addition,
the tool propagates a dont_touch attribute is propagated to these nets, cells, and pins. and
sets a size_only attribute on the driver of the ideal network source, cell IV1.
N1 N2 N3 REG1
U1 U2 D Q
CLK
N1 N2 N3 REG1
U1 U2
U3 D Q
P1
CLK
Non-ideal input
Ideal network source
N4 REG2
U4 N5 D Q
U5
CLK
ideal network sources. That is, the ideal network property is applied to the global driver pins
or ports of the specified net. This ensures that the ideal network property is not lost even if
the net is optimized away.
To prevent the ideal network from being propagated through logic gates, use the
-no_propagate option.
To remove an ideal network setting and restore cells, nets, and pins in the ideal network to
their nonideal state, use the remove_ideal_network command.
report_net
This command reports net information; ideal nets are indicated by I.
set_ideal_transition
Note:
The timing of ideal networks is updated whenever you execute either of these
commands.
You can use these commands to set the ideal latency and ideal transition on the source pin
of an ideal net or network and on any nonsource pin of an ideal network. The specified
values override any library cell values or net delay values. For ideal networks, the ideal
latency and transition values are propagated from the source pins to the network boundary
pins.
The total ideal latency at any given point of an ideal network is the sum of the source pin
ideal latency and all the ideal latencies of the leaf cell pins along the path to the given point.
The ideal transition values specified at the various source and leaf cell pins are independent
and noncumulative. The transition for an unspecified input pin is the ideal transition of the
closest pin with a specified ideal transition value. This rule applies to boundary pins as well.
The set_input_delay command is applicable to ideal networks. This delay is treated as
the off-block latency or source latency.
You can remove ideal latency and ideal transition values by using the following commands:
remove_ideal_latency
remove_ideal_transition
6-1
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
For example, to read in a TLUPlus file named my.tlup using a layer mapping file named
my.layermap and store it in the current library with a parasitic technology model name of
para1, use the following command:
icc2_shell> read_parasitic_tech -tlup my.tlup \
-layermap my.layermap -name para1
To specify the TLUPlus file used for late delay calculations, use the -late_spec
option.
To specify the temperature used for late delay calculations, use the
-late_temperature option.
To specify the library name that contains the parasitic specification, use the
-library option.
By default, the tool looks for the TLUPlus files in the current library.
You can specify only one early and one late parasitic technology model per corner.
However, you can change these settings at any time during the design flow, such as
changing to non-emulation TLUPlus files after inserting metal fill.
To specify the TLUPlus files with the -early_spec and -late_spec options, use the
parasitic technology model name assigned by the read_parasitic_tech command.
For example, to use the TLUPlus file that has a parasitic technology model name of
para1 for early delay calculations for the current corner, use the following command:
icc2_shell> set_parasitic_parameters -early_spec para1
via_layers
tf_via_layer_name1 ITF_via_layer_name1
...
tf_via_layer_namen ITF_via_layer_namen
To include comments in the layer mapping file, start the line with an asterisk (*) or pound
sign (#).
For example, to increase the capacitance values for maximum delay calculations by 10
percent and decrease the capacitance values for minimum delay calculations by 5 percent
for the current corner, use the following command:
icc2_shell> set_extraction_options \
-late_cap_scale 1.1 -early_cap_scale 0.95
When you use the write_parasitics command, you must specify an output file name by
using the -output option. This tool generates a SPEF file for each corner. The names of
these SPEF files are derived based on the output file name you specify and the technology
name, temperature, and the scaling factors specified by the set_extraction_options
command. The tool also generates a file named XX.spef_scenario that lists the scenarios
associated with each of the output SPEF files.
By default, the write_parasitics command
Maps the net names to numbers and uses these numbers when writing the parasitic
information for the nets.
This reduces the file size. To override the mapping of net names, use the
-no_name_mapping option.
When you run the write_parasitics command, if the parasitic information is out-of-date,
the tool performs extraction. However, if you use the -hier option, the tool does not check
if extraction has been performed for the lower-level blocks. Therefore, run the
update_timing command before you use the write_parasitics command with the
-hier option.
Back-Annotating Parasitics
You can read net parasitic data generated by an external tool in SPEF format, and use it
during delay calculation during timing analysis. To do so, use the read_parasitics
command and specify a SPEF file for each corner by using the -corner_spef option one or
more times. If several corners share the same SPEF file, you can list multiple corners in one
-corner_spef option setting.
By default, the parasitics in the SPEF file is applied to the top-level block. To read SPEF for
lower-level blocks, use the -block option. When you use this option, the corners you specify
with the -corner_spef option must be defined at the top level.
After the read_parasitics command is executed, the tool prints the number of nets that
are not annotated. The tool performs extraction for any nets that are not annotated by the
SPEF files.
7-1
IC Compiler II
IC Compiler II Timing
Timing Analysis
Analysis User
User Guide
Guide K-2015.06-SP4
Version K-2015.06-SP4
To report maximum and minimum timing information for a scenario, you must enable the
scenario for setup and hold analysis.
You can further limit the report to
Specific path groups by using the -groups option
Specific paths
Starting from specific points by using the -from, -rise_from, or -fall_from option
Ending at specific points by using the -to, -rise_to, or -fall_to option
Going through specific points by using the -through, -rise_through, or
-fall_through option
A specific number of paths or paths per endpoint by using the -max_paths or -nworst
option
Paths that have a slack less than a specified value by using the -slack_lesser_than
option.
Print additional information about the timing paths or its objects by using the following
options:
Nets by using the -nets option
Pin locations by using the -physical option
Attributes by using the -attributes option
Input pins by using the -input_pins option
Transition times by using the -transition_time option
Capacitances by using the -capacitance option
Attributes
b - black-box (unknown)
s - size_only
d - dont_touch
u - dont_use
g - generic
h - hierarchical
i - ideal
n - noncombinational
E - extracted timing model
Q - Quick timing model
The default report shows the startpoint, endpoint, path group, path type, the incremental and
cumulative time delay values along the data and clock paths, the data required time at the
path endpoint, and the timing slack for the path.
Weighted
Group (max_delay/setup) Cost Weight Cost Scenario
--------------------------------------------------------------------
...
pci_clk 0.44 1.00 0.44 wc_scenario
FEEDTHROUGH 0.00 1.00 0.00 wc_scenario
REGIN 0.00 1.00 0.00 wc_scenario
REGOUT 0.24 1.00 0.24 wc_scenario
...
pci_clk 0.00 1.00 0.00 bc_scenario
FEEDTHROUGH 0.00 1.00 0.00 bc_scenario
REGIN 0.00 1.00 0.00 bc_scenario
REGOUT 0.00 1.00 0.00 bc_scenario
--------------------------------------------------------------------
max_delay/setup 0.68
Constraint Cost
-----------------------------------------------------
min_delay/hold 1.13 (VIOLATED)
max_delay/setup 0.68 (VIOLATED)
max_transition 417.69 (VIOLATED)
max_capacitance 189895.48 (VIOLATED)
min_capacitance 100.52 (VIOLATED)
1
Scenario 'bc_scenario'
Timing Path Group 'pci_clk'
----------------------------------------
Worst Hold Violation: -0.15
Total Hold Violation: -8.79
No. of Hold Violations: 283
----------------------------------------
...
Scenario 'wc_scenario'
Timing Path Group 'pci_clk'
----------------------------------------
Levels of Logic: 55
Critical Path Length: 2.79
Critical Path Slack: 0.03
Critical Path Clk Period: 3.00
Total Negative Slack: 0.00
No. of Violating Paths: 0
----------------------------------------
...
Cell Count
----------------------------------------
Hierarchical Cell Count: 694
Leaf Cell Count: 116919
Buf/Inv Cell Count: 17031
CT Buf/Inv Cell Count: 0
----------------------------------------
Area
----------------------------------------
Combinational Area: 8365846.92
Noncombinational Area: 571218.74
Net Area: 0
Net XLength: 0
Net YLength: 0
----------------------------------------
Cell Area: 8937065.66
Design Area: 8937065.66
Net Length: 0
Design Rules
----------------------------------------
Total Number of Nets: 142890
Nets with Violations: 273
Max Trans Violations: 12
Max Cap Violations: 262
----------------------------------------
In the Cell Count section, the report shows the number of macros in the block. To qualify as
a macro cell, a cell must not be hierarchical and must have the is_macro_cell attribute set
on its library cell.
Cell arc:
Lib: /usr/libs/mylib.ndm:mylib_lvt
Cell: u0_3/p0/mul0/m0_U1_INT_SUMR_reg_1_ (FD1_LVT)
From-pin: CLK To-pin: QN
Sense: rising_edge
For the arrival window, the tool reports the clock name, the edge type that launches the path,
and the minimum and maximum rise and fall arrival times at the pin. If data launched from
multiple clocks arrive at a pin, the tool reports a separate arrival window for the data
launched by each clock.
To obtain the arrival time of a clock signal at a pin or port on the clock network, query the
clock_arrival_window attribute by using the get_attribute command as shown in the
following example:
icc2_shell> get_attribute [get_pins CT_BUF_7/Y] clock_arrival_window
{{{SYS_CLK} pos_edge {min_r_f 1.03046 --} {max_r_f 1.03067 --}}}
For the clock arrival window, the tool reports the clock name, the active edge type, and the
minimum and maximum rise or fall arrival times at the clock pin, based on the active edge of
the clock. If multiple clocks or multiple active edges of the same clock arrive at the pin, the
tool reports a separate arrival window for each clock or clock edge.
gated_clock Yes Issues a warning about any gated clocks that do not reach register
clock pins.
generated_clock Yes Checks the generated clock network and issues a warning for any
of the following conditions:
Generated clocks with no path to the master clock
Generated clocks with no path to the master clock that meets the
sense relationship specified
Multiple generated clocks that form a loop
Generated clocks that are not expanded
Generated clocks that have no period specified
By default, this command performs the timing checks for all active scenarios. To perform the
timing checks for
All scenarios associated with specific modes, use the -modes option.
All scenarios associated with specific corners, use the -corners option.
Specific scenarios, use the -scenarios option.
You can also perform the timing checks by using the check_design -checks timing
command, as shown in the following example:
icc2_shell> check_design -checks timing
****************************************
Report : check_design
Options: { timing }
Design : TOP
Version: K-2015.06
Date : Fri May 8 14:02:43 2015
****************************************
Running atomic-check 'timing'
*** EMS Message summary ***
-----------------------------------------------------------------------
Rule Type Count Message
------------------------------------------------------------------------
TCK-002 Warn 3 The register clock pin '%pin' has no fanin clocks.
------------------------------------------------------------------------
Total 7 EMS messages : 0 errors, 3 warnings, 0 info.
------------------------------------------------------------------------
*** Non-EMS message summary ***
------------------------------------------------------------------------
Total 0 non-EMS messages : 0 errors, 0 warnings, 0 info.
------------------------------------------------------------------------
Info: EMS database is saved to file 'check_design.ems'