Fusion CM Timing
Fusion CM Timing
Fusion CM Timing
User Guide
Version S-2021.06, June 2021
Copyright and Proprietary Information Notice
© 2021 Synopsys, Inc. This Synopsys software and all associated documentation are proprietary to Synopsys, Inc.
and may only be used pursuant to the terms and conditions of a written license agreement with Synopsys, Inc. All
other use, reproduction, modification, or distribution of the Synopsys software or the associated documentation is
strictly prohibited.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader’s responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
https://www.synopsys.com/company/legal/trademarks-brands.html.
All other product or company names may be trademarks of their respective owners.
Free and Open-Source Licensing Notices
If applicable, Free and Open-Source Software (FOSS) licensing notices are available in the product installation.
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.
www.synopsys.com
Contents
New in This Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Related Products, Publications, and Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Customer Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2. Defining Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Creating Real Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Creating Virtual Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Creating Generated Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
Generated Clock Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Clock Network Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Specifying Clock Source Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Specifying Ideal Network Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Specifying Clock Uncertainty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3
Feedback
Contents
4
Feedback
Contents
5
Feedback
Contents
6
Feedback
Contents
7
Feedback
Contents
8
Feedback
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Courier bold Indicates user input—text you type verbatim—in examples, such
as
prompt> write_file top
Convention Description
Edit > Copy Indicates a path to a menu command, such as opening the Edit
menu and choosing Copy.
Customer Support
Customer support is available through SolvNetPlus.
Accessing SolvNetPlus
The SolvNetPlus site includes a knowledge base of technical articles and answers to
frequently asked questions about Synopsys tools. The SolvNetPlus site also gives you
access to a wide range of Synopsys online services including software downloads,
documentation, and technical support.
To access the SolvNetPlus site, go to the following address:
https://solvnetplus.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 SolvNetPlus site, click REGISTRATION HELP in the top-right
menu bar.
1
Defining Modes, Corners, and Scenarios
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
• Fusion Compiler Timing Constraints
• Setting Timing Constraints
• Converting an SDC File for Fusion Compiler Timing Analysis
• Importing Timing Constraints From the Design Compiler or IC Compiler Tool
• Removing SDC Constraints
To change the current mode to a specific mode, use the current_mode command, as
shown in the following example:
fc_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:
fc_shell> remove_modes {mode1 mode2}
Querying Modes
To obtain
• The current mode, use the current_mode command without any arguments.
For example,
fc_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:
fc_shell> report_modes
The following example reports the detailed information of the modes named mode1
and mode2:
fc_shell> report_modes {mode1 mode2}
See Also
• Setting the Active Analysis Types for a Scenario
To change the current corner to a specific corner, use the current_corner command, as
shown in the following example:
fc_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:
fc_shell> remove_corners {corner1 corner2}
Querying Corners
To obtain
• The current corner, use the current_corner command without any arguments.
For example,
fc_shell> current_corner
{"corner1"}
• The 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:
fc_shell> report_corners
The following example reports the detailed information for the corners named corner1
and corner2:
fc_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:
fc_shell> create_scenario -mode mode1 -corner corner1 -name \
scenario1
When you create a scenario, by default, it is active and it 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:
fc_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:
fc_shell> current_scenario
{"scenario1"}
The report includes the scenario name, its associated mode, its associated corner, and
its active analysis types, for each scenario.
By default, the command reports all scenarios for the current block.
To report
◦ Specific scenarios, use the -scenarios option.
◦ Scenarios associated with specific modes, use the -modes option.
◦ Scenarios associated with specific corners, use the -corners option.
The following example reports the detailed information for all scenarios of the current
block:
fc_shell> report_scenarios
The following example reports the detailed information for the scenarios named
scenario1 and scenario2:
fc_shell> report_scenarios -scenarios {scenario1 scenario2}
Caution:
If the SDC file does not contain unit settings, they are derived from the main
logic library. If the SDC file does contain unit settings, they must be consistent
with those in the main logic 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
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;
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 Fusion Compiler 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,
fc_shell> set_app_options \
-name time.convert_constraint_from_bc_wc -value bc_only
fc_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,
fc_shell> set_app_options \
-name time.convert_constraint_from_bc_wc -value wc_only
fc_shell> read_sdc bc_wc.sdc
By default, this command generates the timing constraints for all scenarios, both
active and inactive, and the scenario-independent timing constraints for the block. To
generate the timing constraints for specific scenarios, use the -scenarios option.
You must specify a name for the output by using the -output option. The output is a
directory that contains the Tcl scripts shown in the following table:
Table 2 Output of the write_timing_context -format icc2 Command
2. Create the corresponding modes, corners, and scenarios and apply the constraints in
the Fusion Compiler tool by sourcing the top.tcl script.
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 Fusion Compiler tool:
fc_shell> open_block BLK1
fc_shell> source BLK1_const/top.tcl
For example, to remove the mode-specific constraints from mode M1, corner-specific
constraints from the C1 and C2 corners, and the scenario-specific constraints from the
M1C1 and M1C2 scenarios, use the following command:
fc_shell> remove_sdc -modes M1 -corners {C1 C2} \
-scenarios {M1C1 M1C2}
• To remove the design-specific constraints that are not associated to any mode, corner,
or scenario, use the -design option.
• To include or exclude specific types of constraints from removal, use the -include or
-exclude option.
For example, to remove only the case analysis settings, use the following command:
fc_shell> remove_sdc -include case_analysis
To remove all the SDC constraints except for ideal network settings, use the following
command:
fc_shell> remove_sdc -exclude ideal_network
For a complete list of valid values for the -include and -exclude options, see the
man page for the remove_sdc command.
2
Defining Clocks
An essential part of timing analysis is to accurately specify clocks and clock effects, such
as latency and uncertainty. To specify, report, and analyze clocks see the following topics:
• Creating Real Clocks
• Creating Virtual Clocks
• Creating Generated Clocks
• Clock Network Effects
• Specifying Clock Source Latency
• Specifying Ideal Network Latency
• Specifying Clock Uncertainty
• Specifying Clock Jitter
• Specifying Ideal Clock Transition
• Controlling the Clock Marking Behavior
• Enabling Clock-to-Data Analysis for Ideal Clocks
• Unateness of Clocks
• Propagating a Specific Clock Sense
• Creating Pulse Clocks
• Setting and Reporting Minimum Pulse Width Constraints
• Checking the Minimum Period
• Defining the Relationship Between Clock Groups
• Reporting Clock Information
• Removing Clocks
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.
• Invert the waveform by using the -invert option when you create a divide-by or
multiply-by generated clock with the -divide_by or -multiply_by option.
• Use the inverted sense of the master clock by using the -preinvert option.
• Change the duty cycle by using the -duty_cycle option when you create a multiply-by
generated clock with the -multiply_by option.
• Delay or shift the selected master clock edges by using the -edge_shift option when
you create a generated clocks derived from specific edges of the master clock with the
-edges option.
The following figure shows the waveforms for the master clock and generated clocks of
this example.
CLKA
DIV2A
DIV2A_INV
The following example creates a generated clock named MULT2B that has twice the
frequency of the master clock named CLKB and a 75% active duty cycle.
fc_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.
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.
fc_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 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:
fc_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
• 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).
The following figure shows the timing effects of clock networks.
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 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 specify 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:
fc_shell> set_clock_latency 1.5 -source -early -dynamic 0.5 \
[get_clocks CLK1]
fc_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.
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:
fc_shell> set_clock_latency -rise 1.2 [get_clocks CLK1]
fc_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
D Q
FF1 FF2
CLK D Q D Q
FF2
CLK CLK CLK
D Q
CLK1 CLK2
CLK
Interclock uncertainty
Simple clock uncertainty
To set an interclock uncertainty of 2 between clocks named CLKA and CLKB, for both
setup and hold, use the following commands:
fc_shell> set_clock_uncertainty 2 -from [get_clocks CLKA] \
-to [get_clocks CLKB]
fc_shell> set_clock_uncertainty 2 -from [get_clocks CLKB] \
-to [get_clocks CLKA]
To determine the right type of clock jitter between a launch clock and capture clock, the
command traces the launch edge and capture edge to corresponding edges of the master
clock, as follows:
• If the corresponding edges of the master clock are multiple cycles apart, cycle jitter is
used.
• If they are not an integral number of cycles apart, duty-cycle jitter is used.
• If they are traced back to the same edge of the master clock, no clock jitter is used.
To get a report on the cycle jitter and duty-cycle jitter for the master clock and all clocks
generated from it, use the report_clock_jitter command.
To remove clock jitter settings from the master clock, use the remove_clock_jitter
command. After clock jitter is removed from the master clock, it is removed from the
generated clocks automatically.
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:
fc_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:
fc_shell> get_pins -filter "is_clock_used_as_data==true"
The process of identifying clock-network pins and clock-to-data pins is known as clock
marking. The clock marking behavior is slightly different between the Fusion Compiler
and PrimeTime tools. You can specify that the Fusion Compiler tool uses the same clock
marking behavior as the PrimeTime tool by setting the time.clock_marking application
option to primetime. The default is native.
For more information about the differences in the Fusion Compiler and PrimeTime clock
marking behavior, see the man page of the time.clock_marking application option.
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.
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
The following example propagates only the positive sense of the clock named CLK1 and
the negative sense of the clock named CLK2 beyond the cell pin named U29/z:
fc_shell> set_sense -positive \
-clocks [get_clocks CLK1] [get_pins U29/z]
fc_shell> set_sense -negative \
-clocks [get_clocks CLK2] [get_pins U29/z]
The following example prevents the tool from propagating all clocks, both as clock and
data, beyond the pin named U32/z:
fc_shell> set_sense -stop_propagation [get_pins U32/z]
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:
fc_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_sense -pulse rise_triggered_high_pulse \
[get_pins U21/z]
Library cell pins can have a minimum pulse width defined. In addition, you can
explicitly set the pulse width constraints for specific clocks or clock pins by using the
set_min_pulse_width command.
By default, the constraint is applied to both the high and low pulse of the clock. To specify
for only the high or low pulse, use the -high or -low option.
The following example sets a high and low minimum pulse width constraint of 0.6 and 1.0
for the clock signal at the reg1/CK pin:
set_min_pulse_width -high 0.6 reg1/CK
set_min_pulse_width -low 1.0 reg1/CK
The following example shows how the tool calculates and reports the minimum period
check with the report_min_period command.
fc_shell report_min_period -path_type full_clock uff2/CP
...
Pin: uff2/CP
Related clock: clk
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 these 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:
fc_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:
fc_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:
fc_shell> set_clock_groups -asynchronous \
-group {CK6} -group {CK7} -group {CK8}
CK1 0
D Q Logic D Q
CK2 1
U23
0
By default, the Fusion Compiler tool considers all combinations of launch and capture
clocks, such as data launched by CK1 and captured by CK2. However, for clocks
multiplexed as shown in the figure, only one of the three clocks can operate on the path at
any given time; they are exclusive clocks downstream from the MUX cells as long as the
MUX control signals remain static between launch and capture.
One method of specifying exclusive clocks is to set “exclusivity points” to mark the pins in
the design where only one clock at a time can be propagated, as shown in the following
figure. For complex clock MUX configurations, this method typically offers better simplicity,
accuracy, completeness, and turnaround time than other methods.
U23
0
You can set clock exclusivity points at specific pins in the design, or you can have the tool
automatically find and place these points at clock MUX output pins. The exclusivity setting
applies to checking of delay, minimum pulse width, and minimum period constraints.
Setting a clock exclusivity point allows only one clock at a time to be propagated through
the pin on which it is set. This enforces a physically exclusive relationship between the
different clocks in the transitive fanout of the pins. The clock exclusivity effect works
whether the time.enable_auto_mux_clock_exclusivity application option is set to
true or false.
With this application option set to true, the tool automatically finds mutiple clock signals
entering a MUX cell and places exclusivity points at the output of the MUX. This enforces
a physically exclusive relationship between the clocks in the transitive fanout of the MUX
cell, without affecting possible clock interactions in the transitive fanin to the MUX cell.
To disable this automatic inference at selected MUX cells in the design, use the following
command:
fc_shell> set_disable_auto_mux_clock_exclusivity MUX32/Z
Automatic detection of multiplexed clocks works only for MUX cells, as determined by
the cell’s is_mux_cell attribute. A multiplexing function built out of random logic is not
automatically detected, but you can still manually define an exclusivity point in such logic
by using the set_clock_exclusivity command. For example,
fc_shell> set_clock_exclusivity -type user_defined \
-inputs "OR1/A OR1/B" -output OR1/Z
For a non-MUX cell, you must specify the clock input pins and exclusivity output pin.
-type mux
-output MUX88/Z
This reports all exclusivity points, whether inferred globally by using the
time.enable_auto_mux_clock_exclusivity application option or explicitly by using the
set_clock_exclusivity command.
For example, to generate a report on the clocks that have a period less than or equal to
15.0, use the following command:
fc_shell> report_clocks [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_clocks command.
3
Constraining Timing Paths
A timing path is a point-to-point sequence through a design that starts at a register clock
pin or an input port, passes through combinational logic elements, and ends at a register
data input pin or an output port.
The following topics provide information about timing paths and tasks related to
constraining timing paths:
• Timing Paths and Path Groups
• Creating Path Groups
• Path Delay Analysis for the Same Launch and Capture Clock
• Path Delay Analysis for Different Launch and Capture Clocks
• Introduction to Input and Output Delays
• Setting Input and Output Delays for Ports
• Specifying Timing Exceptions
• Specifying False Path Exceptions
• Specifying Maximum and Minimum Path Delay Exceptions
• Specifying Multicycle Path Exceptions
• Specifying Path Timing Margin Exceptions
• Specifying Exceptions Efficiently
• Order of Precedence for Exceptions
• Disabling Timing Paths Within Lower-Level Blocks
• Using Case Analysis
• Disabling Timing Arcs
• Enabling Preset and Clear Timing
• Introduction to Data-to-Data Checks
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.
If multiple clocks arrive at the clock pin of a sequential cell, the tool constrains the cell with
respect to each clock.
To identify the timing paths, use one or more of the following methods:
• Specify the startpoint of the path by using the -from, -rise_from, or -fall_from
option
• Specify one or more throughpoints of the path by using the -through, -rise_through,
or -fall_through option one or more times
• Specify the endpoint of the path by using the -to, -rise_to, or -fall_to option
You can influence how optimization handles the path group as follows:
• Change the weight of the path group by using the -weight option.
• Specify a critical range to identify critical paths for optimization by using the
-critical_range option.
The tool works on all critical paths within the range specified by the -critical_range
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 contains 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.
fc_shell> group_path -name slct -weight 2.5 -critical_range 5 \
-from [get_cells slct_reg]
fc_shell> group_path -name slct -from [get_ports slct_nxt]
fc_shell> group_path -default [get_ports slct_nxt] \
-through [get_pins U29/A] -through [get_pins U54/Y]
To report path group information, use the report_path_groups command and to remove
path groups, use the remove_path_groups 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 15 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
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:
fc_shell> create_clock -period 10 -waveform {0 5} CLK1
fc_shell> create_clock -period 25 -waveform {5 12.5} CLK2
In the following figure, there are two launch and capture edge combinations that the tool
considers. They are
• The capture edge at time=5 and the nearest preceding launch edge is at time=0, which
is labeled Setup 1.
• The capture edge at time=30 and the nearest preceding launch edge is at time=20,
which is labeled Setup 2.
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.
Setup 1 Setup 2
launch edge launch edge
Clock at launch
flip-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.
data required times at output ports. Therefore, to constraint input and output ports, you
must specify this information.
In the following figure, the data arriving at the input port named A of the block named
BlockA is launched by an external sequential device.
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.
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.
To remove input or output delays from ports, use the remove_input_delay or
remove_output_delay command.
The following figure shows the external paths for one input and output of a block, and the
delays associate with those external paths.
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:
fc_shell> set_input_delay 4.5 -clock CLK1 [get_ports IN1]
fc_shell> set_input_delay 2.3 -clock CLK2 [get_ports 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:
fc_shell> set_input_delay 4.3 -clock CLK1 [get_ports 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:
fc_shell> set_input_delay 2 -clock CLK \
[remove_from_collection [all_inputs] [get_ports CLK]]
Use the set_clock_latency command with the -source option to define the actual
source latency, if any.
To restore a path to its default before timing exceptions were applied, use the
reset_paths command or the -reset_path option of each timing exception 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 sequential cells
◦ Output or inout ports
◦ Pins with an output delay settings
Optionally, you can limit the false-path setting to
• Setup or hold analysis only by using the -setup or -hold options.
By default, the false-path setting applies to both setup and hold analysis.
• Rise or fall analysis only by using the -rise or -fall options.
By default, the false-path setting applies to both rise and fall analysis.
To remove a false path setting, use the set_false_path -reset_path or reset_paths
command.
The following example shows how to set a very specific path, which starting from a
register clock pin, going through several pins, and ending at a register data pin, as a false
path:
fc_shell> set_false_path -from [get_pins reg2/CP] \
-through [get_pins U31/Z] -through [get_pins U15/Z] \
-to [get_pins reg7/D]
The following example shows how to set all timing paths between two clocks, ck1 and ck2,
as false paths:
fc_shell> set_false_path -from [get_clocks ck1] \
-to [get_clocks ck2]
fc_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.
▪ 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 sequential cells
▪ Output or inout ports
▪ Pins with an output delay settings
Optionally, you can limit the maximum or minimum path delay 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.
If the startpoint or endpoint of the path for which you applied the set_max_delay or
set_min_delay command is constrained by a clock, the tool uses the clock latencies of
the startpoint and endpoint during timing analysis. To ignore the clock latencies of the
startpoint and endpoint, use the -ignore_clock_latency option.
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_paths command.
The following example sets a maximum path delay between registers REGA and REGB to
12 and minimum path delay to 2:
fc_shell> set_max_delay 12.0 \
-from [get_cells REGA] -to [get_cells REGB]
fc_shell> set_min_delay 2.0 \
-from [get_cells REGA] -to [get_cells REGB]
▪ Sequential cells
▪ Data pins of sequential cells
▪ Output or inout ports
▪ Pins with an output delay settings
Optionally, you can limit the multicycle path setting to
• Setup or hold analysis only by using the -setup or -hold options.
By default, it applies to both setup and hold analysis.
The tool interprets the -setup and -hold values in the set_multicycle_path
command differently. The integer value for the -setup argument specifies the number
of clock cycles for the multicycle path. In the absence of a timing exception, the default
is 1. The integer value for the -hold argument specifies the number of clock cycles to
move the capture edge backward with respect to the default position, relative to the
valid setup relationship. The default is 0.
• Rise or fall analysis only by using the -rise or -fall options.
By default, it applies to both rise and fall analysis.
To remove a multicycle path setting, use the set_multicycle_path -reset_path or
reset_paths command.
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.
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.
CLK Reg4
Hold Setup
CLK Reg5
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:
fc_shell> set_multicycle_path -setup 2 \
-from [get_cells Reg4] -to [get_cells Reg5]
fc_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.
CLKReg4
Hold Setup
CLKReg5
• The path you want to constrain 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.
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.
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.
fc_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.
fc_shell> set_false_path -from [get_pins REG2[0]/CP] \
-to [get_pins REG3[0]/D]
fc_shell> set_false_path -from [get_pins REG2[1]/CP] \
-to [get_pins REG3[1]/D]
fc_shell> ...
This method is less efficient because the tool must keep track of timing exceptions for
16 different paths.
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.
fc_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.
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.
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:
fc_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:
fc_shell> set_false_path \
-from [get_clocks clkB] -to [get_clocks clkC]
fc_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:
fc_shell> set_multicycle_path 2 \
-from [get_clocks clkA] -to [get_clocks clkC]
fc_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:
fc_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.
U15
A
Z
B
B to Z timing arc is disabled
Sel
TEST_E
0
For example, the following commands disable all timing arcs to the output of library cell
named AND3 and the timing arc from pin A2 to pin ZN of the cell instance named U17:
fc_shell> set_disable_timing my_lib/AND3
fc_shell> set_disable_timing {U17} -from A2 -to ZN
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.
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.
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.
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:
fc_shell> set_data_check -rise_from D2 -to D1 -setup 3.5
fc_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.
D1
Constrained pin D1
D2
Setup Hold
Related pin
D2
Note:
This behavior is different from that of PrimeTime, which always honors
nonsequential arc checks.
In the logic library, the nonsequential constraints are defined for a cell by specifying a
related pin and by assigning the following timing_type attributes to the constrained pin:
• non_seq_setup_rising
• non_seq_setup_falling
• non_seq_hold_rising
• non_seq_hold_falling
For more information about defining nonsequential constraints in the logic 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
GAT E GAT ED_CLOCK
CLOCK
No-change
interval
GAT E
Clipped clock pulse
GAT ED_CLOCK
GAT ED_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 interva
l
CLOCK
GATE
The following figure, shows a clock gating check performed on a gating element that is an
OR or NOR gate.
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.
fc_shell> set_clock_gating_check -setup 0.2 -hold 0.4 CLK1
4
Specifying Operating Conditions
The operating conditions include the process, voltage, and temperature parameters under
which the chip operates. You can specify the operating conditions for a block and the tool
analyzes and optimizes the block under the conditions you specify.
By default, the tool uses on-chip variation (OCV) mode to perform timing analysis, which
models the effects of variation in operating conditions across the chip. In addition, the tool
supports advanced on-chip variation (AOCV), which is an optional method for improving
accuracy during timing analysis.
The following topics provide information on operating conditions, on-chip variation,
advanced on-chip variation, and other related concepts and tasks:
• Specifying the Operating Conditions
• Creating and Using Scaling Groups
• Using Process Labels for PVT Matching
• Reporting PVT Information
• On-Chip Variation Delay Analysis
• Specifying the Timing Derating Factors
• Introduction to AOCV
• Setting Up for AOCV Analysis
• Applying AOCV Data
• File-Based AOCV Data
• Verifying AOCV Data
• Introduction to Parametric On-Chip Variation Analysis
• Application Options and Commands for Parametric On-Chip Variation
• POCV Data Formats
• Converting AOCV Data to POCV Data
• Performing Parametric On-Chip Variation Analysis
See Also
• Library Manager User Guide
• To apply specific scaling groups to specific corners, use the -corners option.
If you do not specify this option, the current corner is used. The following example
applies the SG1 scaling groups to the C1 corner:
fc_shell> set_scaling_lib_group -corners C1 SG1
• To apply all or none of the scaling groups to specific corners, use the -all or -none
option with the -corners option.
The following example prevents the use of all scaling groups in the C2 corner:
fc_shell> set_scaling_lib_group -corners C2 -none
• To apply specific scaling groups for minimum or maximum delay analysis, use the -min
or -max option.
The report_corners command reports the scaling groups available in each corner.
To guide the Fusion Compiler tool to use a specific characterization point for a corner, use
the set_process_label command to specify the process label for a corner, as shown in
the following example:
fc_shell> create_corner c_fast
fc_shell> set_process_label -corners c_fast fast
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.
ck ck
CLK
The following table shows the clock arrival times, delays, operating conditions, and
derating used for setup checks and for hold analysis.
Table 4 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, late derating, maximum delay in clock path,
derating, worst-case operating condition early derating, minimum
operating condition operating condition
Hold Early clock, minimum Minimum delay, early Late clock, maximum delay
delay in clock path, early derating, minimum in clock path, late derating,
derating, best-case operating condition maximum 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
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:
• 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 derating
by setting the time.aocvm_enable_single_path_metrics application option to true.
• Ignore OCV derating factors, which are specified with the set_timing_derate
command, when AOCV derating factors 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 SolvNetPlus.
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
You can specify the following additional AOCV information:
• A guard band for AOCV derating factors by using the set_timing_derate
-aocvm_guardband command.
The following example specifies a guard band of 5 percent for early and late delays:
fc_shell> set_timing_derate -aocvm_guardband -early 0.95
fc_shell> set_timing_derate -aocvm_guardband -late 1.05
• 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 increases the depth
of a library cell named MGX16 to 1.5:
fc_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 5 AOCV File Format Syntax
ocvm_type aocvm
This field is supported only in version 4.0 or later.
To add a comment in any location within the file, use double forward slashes (//).
The following example AOCV data file sets derates values for the cells in the clock paths
of the design:
version 4.0
ocvm_type: aocvm
object_type: design
rf_type: rise fall
delay_type: cell
derate_type: late
path_type: clock
object_spec:
voltage: 1.2
depth: 1 2 3
distance: 100 1000
table: 1.21 1.11 1.09 \
1.23 1.16 1.14
For example, to get the AOCV derate data for the timing arc from pin A to pin Z of cell
U57, use the following command:
fc_shell> report_ocvm -type aocvm \
[get_timing_arcs -from U57/A -to U57/Z]
To get the AOCV derate data for the library cell liba/inv2x, use the following command:
fc_shell> report_ocvm -type aocvm \
[get_lib_cells liba/inv2x]
You can report the derate values used to calculate a specific cell or net delay arc by using
the -derate option with the report_delay_calculation command.
probability
probability
POCV
statistical delay
nominal delay
delay, ps
Command Description
Command Description
Library Manager tool. The LVF information is included in the cell libraries
and read into your Fusion Compiler session automatically.
• File-based POCV data
You read in a coefficient data file for a specific corner in plain text format using the
read_ocvm command. Coefficient files contain delay variation data, but do not support
transition or constraint variation data. The file applies a single coefficient value C for
each library cell, hierarchical cell, or design specified in the text file. The delay variation
σ is calculated as C * nominal_delay. All the timing arcs of a cell share the same
coefficient C, irrespective of input slew and output load.
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 SolvNetPlus.
version On-chip variation data file version number, which must be version 4.0 or later.
ocvm_type pocvm
To add a comment in any location within the file, use double forward slashes (//).
The following example POCV data file sets coefficients for the early cell and net delays in
the clock paths of the design:
version 4.0
ocvm_type: pocvm
object_type: design
rf_type: rise fall
delay_type: cell net
derate_type: early
path_type: clock
object_spec:
voltage: 1.2
coefficient: 0.5
1. Library-based POCV LVF data on the library cell or on the logic library
2. File-based POCV coefficient setting on the library cell
3. File-based POCV coefficient setting on the hierarchical cell
4. File-based POCV coefficient setting on the design
• lib_cell_in_file, the tool uses the following precedence:
3. (Optional) Change the number of standard deviations (σ) used to calculate the worst-
case values from statistical parameters during POCV analysis as follows:
• To change the value for the entire block, use the time.pocvm_corner_sigma
application option.
• To change the value for a specific corner, use the set_pocvm_corner_sigma
-corners command.
By default, timing analysis uses the values at 3 standard deviations (3σ) from the
mean. Increasing the number of standard deviations, tightens the timing requirement.
The following example changes the number of standard deviations to 3.5 for the
current block and 4 for the corner named corner1:
fc_shell> set_app_options -name time.pocvm_corner_sigma \
-value 3.5 -block [current_block]
fc_shell> set_pocvm_corner_sigma -corners corner1 4.0
4. (Optional) If you use LVF logic libraries with slew variation data, enable the use of
slew variation during POCV analysis by using the time.enable_slew_variation
application option.
5. (Optional) If you use LVF logic libraries with constraint variation data,
enable the use of constraint variation during POCV analysis by using the
time.enable_constraint_variation application option.
fc_shell> set_app_options -name \
time.enable_constraint_variation -value true
7. (Optional) If you have distance-based derate tables, enable the use of distance-based
derating during POCV analysis by using the time.ocvm_enable_distance_analysis
application option and read in the distance-based derate table for each corner.
fc_shell> set_app_options -name \
time.ocvm_enable_distance_analysis -value true
fc_shell> foreach_in_collection corner [all_corners] {
current_corner $corner
read_ocvm $corner.distance_derate.pocv
}
8. (Optional) If you have POCV coefficient data files, read them by using the read_ocvm
command.
fc_shell> read_ocvm coefs.pocv
If an object has both a file- and library-based POCV data, the file-based POCV data
takes higher precedence by default. You can change this precedence by using the
time.pocvm_precedence application option. For more information, see Precedence of
File- and Library-POCV Data.
9. (Optional) Apply an additional guard band by using the set_timing_derate
-pocvm_guardband command.
You can apply the guard band to cell delays, net delays, or cell timing checks by using
the -cell_delay, -net_delay, or -cell_check option, as shown in the following
example:
fc_shell> set_timing_derate -cell_delay -pocvm_guardband -early 0.98
fc_shell> set_timing_derate -cell_delay -pocvm_guardband -late 1.03
Applying a guard band increases the POCV derating effect, which makes timing
analysis more restrictive.
10. (Optional) Modify the variation calculated from coefficients or the variation in LVF by
using the set_timing_derate -pocvm_coefficient_scale_factor command.
You can apply the scale factor to cell delays, net delays, or cell timing checks by using
the -cell_delay, -net_delay, or -cell_check option, as shown in the following
example:
fc_shell> set_timing_derate -net_delay \
-pocvm_coefficient_scale_factor -early 0.86
fc_shell> set_timing_derate -net_delay \
-pocvm_coefficient_scale_factor -late 1.16
Applying coefficient scale factors alters the variation used in POCV analysis for the
specified design objects.
11. (Optional) For cell timing checks, adjust the mean (nominal) value by a factor
of the sigma (σ) value by using the set_timing_derate -cell_check
-pocvm_subtract_sigma_factor_from_nominal command.
When you do so, the tool adjusts the mean value of the constraint, but leaves the
sigma value unchanged. The following example subtracts 0.75σ from the mean value
for early cell timing checks during POCV analysis:
fc_shell> set_timing_derate -cell_check -early \
-pocvm_subtract_sigma_factor_from_nominal 0.75
This derate value can only be applied for cell timing checks and you
must enable constraint variation during POCV analysis by setting the
time.enable_constraint_variation application option to true.
This feature allows constraint variation to be computed as a linear sum, instead of the
default root-sum-squared. To do so,
a. Add a factor of sigma into the mean by specifying a negative value by using the
set_timing_derate -pocvm_subtract_sigma_factor_from_nominal command.
b. Remove the constraint sigma by setting a coefficient scale factor of zero by using
the set_timing_derate -pocvm_coefficient_scale_factor command.
For example,
fc_shell> set_timing_derate -cell_check -early \
-pocvm_subtract_sigma_factor_from_nominal -3.0
fc_shell> set_timing_derate -cell_check -early \
-pocvm_coefficient_scale_factor 0.0
14. (Optional) Report the design objects that are annotated with POCV coefficients by
using the report_ocvm -type pocvm command.
The following example reports the POCV coefficients for the cell instance named U21:
fc_shell> report_ocvm -type pocvm [get_cells U21]
The following example reports the LVF data for the library cell named liba/inv2x:
fc_shell> report_ocvm -type pocvm \
[get_lib_timing_arcs -from liba/inv2x/A -to liba/inv2x/Z]
You can report the derate values used to calculate a specific cell or net delay arc by
using the -derate option with the report_delay_calculation command.
15. Perform timing analysis by using the report_timing command.
fc_shell> report_timing -variation -derate
When you use the -variation option, the tool prints the statistical information (mean
and sigma) in the timing report.
Skewness
s Standard
deviation
Mean shift
Mean
Nominal
The statistical parameters for this distribution are the mean shift, standard deviation,
and skewness. In LVF modeling syntax, these parameters are specified by the following
attributes:
ocv_std_dev_*
ocv_mean_shift_*
ocv_skewness_*
For example, an ocv_std_dev_cell_rise table in the LVF model specifies the standard
deviation of the cell delay distribution as a function of input transition and output load.
To enable timing analysis using moment-based modeling data, set the application option:
fc_shell> set_app_options -name time.pocvm_enable_extended_moments \
-value true
In variation reports, the mean value reported for a parameter includes both the nominal
and the mean shift adjustment.
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.
Launch Path
Reg1
U3
D Q
CLK U1
U2
Capture Path
Common portion
Common point
5
Constraining Ports and Nets
Timing analysis and timing optimization depend on constraints that describe the
characteristics of the ports and nets in your blocks. The following topics describe these
constraints and the associated tasks:
• Specifying Drive Characteristics at Input and Inout Ports
• Setting a Driving Cell for Ports
• Setting Drive Resistance
• Setting an Input Transition Time
• Removing Drive Characteristics From Ports
• Specifying Port Load Capacitance
• Introduction to Ideal Networks
• Propagation of the Ideal Network Property
• Creating and Removing Ideal Networks
• Retrieving Ideal Objects
• Setting Ideal Latency and Ideal Transition Time
• Ignoring Net Delays During Timing Analysis
• 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:
fc_shell> set_driving_cell [get_ports I2] \
-lib_cell AND2 -from_pin A \
-input_transition_rise 0.5 -input_transition_fall 0.5
Figure 42 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
• 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 rise and fall drives of ports A, B, and C to 2.0
fc_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.
For designs with multiple scenarios, by default, the input transition applies only to the
current scenario. To specify an input transition 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 example sets the rise and fall input transition of ports A, B, and C to 0.5
fc_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.
When you use the set_load command to constrain a port, you must specify the following
information:
• The ports you are constraining
• The capacitance value.
Optionally, you can specify
• A separate capacitance for rise and fall transition by using the -rise and -fall
options.
By default, the capacitance applies to both rise and fall transitions.
• 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.
fc_shell> set_load 3.5 [all_inputs]
fc_shell> set_load 5 [all_outputs]
When you specify the source port or leaf-level pin of an ideal network, the nets, cells, and
pins in the transitive fanout of this source are treated as ideal objects. Ideal objects have
the following properties:
• They are marked as don’t touch.
• They are not affected by timing updates, delay optimization, or DRC fixing.
• They are assigned ideal timing properties: ideal latency, ideal transition time, and ideal
capacitance of zero. You can change the latency and transition values by using the
set_ideal_latency and set_ideal_transition commands, respectively.
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.
◦ 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.
Size-only cell
Don’t touch cell
N1 N2N3 REG1
U1 U2 DQ
CLK
N1 N2 N3 REG1
U1 U2
U3 D Q
P1
CLK
Non-ideal input
Ideal network source
REG2
N4 N5 Q
U4 U5 D
CLK
To report information about ports, pins, nets, and cells on ideal networks, use the
report_ideal_network command. 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.
This command returns pins that are ideal network sources. Additionally, if you use the
ideal_network_options == 1 filter, the command returns only the ideal network
source pins that were set by the set_ideal_network -no_propagate command.
• get_ports -filter "ideal_network_source == true"
This command returns ports that are ideal network sources. Additionally, if you use
the ideal_network_options == 1 filter, the command returns only the ideal network
source ports that were set by the set_ideal_network -no_propagate command.
• 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.
• remove_ideal_transition
6
Performing Parasitic Extraction
Accurate timing analysis depends on accurate RC (parasitic) information for nets. The
Fusion Compiler tool provides RC extraction capabilities at both preroute and postroute
stages. At the preroute stage, the Fusion Compiler tool always performs native TLUPlus
extraction. At the postroute stage, by default, the tool uses Fusion Signoff Extraction.
The tool can also perform native TLUPlus extraction or StarRC In-Design extraction. In
addition, the tool provides the capability of back-annotating detailed parasitic information.
The following topics describe the tasks related to extraction and back-annotation of
parasitics information.
• Performing TLUPlus Extraction
• Performing Fusion Signoff Extraction
• Performing StarRC In-Design Extraction
• Specifying the Parasitic Scaling Factors for Extraction
• Specifying Virtual Metal Fill for Extraction
• Enabling Coupling Capacitance Extraction for Detailed Routed Nets
• Disabling the Breaking of a Loop Structures in a Resistance Networks
• Writing Out the Extracted Parasitics
• Back-Annotating Parasitics
The Fusion Compiler tool uses TLUPlus files for the parasitic technology information
when performing native extraction. TLUPlus is a binary table that stores layer-specific RC
coefficients.
The TLUPlus models enable accurate RC extraction results by including the effects of
width, space, density, and temperature on the resistance coefficients. For details about
modeling these effects in the Interconnect Technology Format (ITF) file, see the StarRC
documentation.
For virtual route estimation, the Fusion Compiler tool calculates the RC coefficients by
applying averaging techniques to the layer-specific RC coefficients because layers are not
assigned at this stage of the design flow.
To associate parasitic information with a corner, you must
1. Read in the TLUPlus files by using the read_parasitic_tech command.
For more information, see Reading TLUPlus Files.
2. Associate the TLUPlus files with a corner by using the set_parasitic_parameters
command.
For more information, see Associating TLUPlus Files With Corners.
The tool automatically performs extraction when it updates the timing information.
You can update the timing information and perform extraction explicitly by running the
update_timing command.
You can read one or more TLUPlus files that are one of the following types:
• Emulation TLUPlus files, which are used before inserting metal fill
• Non-emulation TLUPlus files, which can be used before and after inserting metal fill
When using non-emulated TLUPlus files, metal impact on parasitics is considered
through real metal fill after metal fill insertion, or through virtual metal fill before metal fill
insertion.
You must also specify the TLUPlus file by using the -tlup option. If you specify the
TLUPlus files with a relative path or with no path, the Fusion Compiler tool uses the search
path defined with the search_path variable to locate the files.
If the layer names in the TLUPlus file do not match the layer names in the technology
file, you must define the mapping in a TLUPlus layer mapping file, which uses the syntax
described in TLUPlus Layer Mapping File. To specify the name of the layer mapping file,
use the -layermap option.
By default, the read_parasitic_tech command performs a basic check on the TLUPlus
file and the corresponding layer mapping files. To disable this basic check or to perform a
more advanced check, set the -sanity_check option to none or advanced.
After you read in a TLUPlus file, it is identified by its parasitic technology model name. By
default, the parasitic technology model name is the base name of the specified TLUPlus
file; however, you can specify a different name by using the -name option.
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 design library with a parasitic technology model
name of para1, use the following command:
fc_shell> read_parasitic_tech -tlup my.tlup \
-layermap my.layermap -name para1
Note:
The nxtgrd files generated with N-2017.12 or later version of the StarRC tool
contain TLUPlus models, and the read_parasitic_tech command can read
these files also.
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 (#).
• 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 design 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:
fc_shell> set_parasitic_parameters -early_spec para1
and it can be used with PrimeTime delay calculation to improve postroute correlation. This
feature is enabled with the extract.starrc_mode application option set to fusion_adv.
After ECO routing, you can perform incremental Fusion extraction, which reduces
extraction runtime by reusing RC data from the Galaxy Parasitic Database (GPD) for
unaffected partitions. To enable incremental Fusion extraction, set the following application
option before you route the design:
fc_shell> set_app_options -name extract.incremental_fusion -value 1
To set up a routed design for Fusion Signoff Extraction, perform the following steps before
you run the route_opt command:
1. Specify the configuration by using the set_starrc_in_design command, as
described in Specifying the Configuration for Fusion Signoff Extraction.
2. (Optional) Report the settings by using the report_starrc_in_design command.
3. (Optional) Define a multithreading configuration that applies to Fusion Signoff
Extraction by using the set_host_options -max_cores command.
For more information about the various settings you can specify for multicore
processing, see the “Configuring Multithreading” topic in the Fusion Compiler User
Guide.
The tool automatically performs extraction when it updates the timing information.
You can update the timing information and perform extraction by explicitly running the
update_timing command.
To use the parasitic information from the Fusion extraction, run the update_timing
-full command before you run the report_timing, report_qor, or write_parasitics
command.
The following is an example configuration file for running Fusion Signoff Extraction in the
implementation mode:
CORNER_GRD_FILE: corner_grd.mapping
MAPPING_FILE: star.mapping
Similar to the TLUPlus extraction, the Fusion Signoff Extraction honors extraction
settings from the set_extraction_options command. To achieve good correlation
with StarRC, you should check the Fusion Compiler and StarRC settings by running the
Fusion Compiler and StarRC correlation checker. Modify the Fusion Compiler settings
accordingly, using the set_extraction_options command.
To use the parasitic information from the StarRC extraction, run the update_timing
-full command before you run the report_timing, report_qor, or write_parasitics
command.
For more information about the StarRC tool, see the StarRC User Guide and Command
Reference.
In this mode, which is the default, the Fusion Compiler tool runs StarRC In-Design
extraction using the Fusion Compiler extraction settings.
• To run in signoff mode, specify the -mode starrc_centric option with the
set_starrc_in_design command.
In this mode, the Fusion Compiler tool runs StarRC In-Design extraction using the
StarRC extraction settings.
You must specify a configuration file for StarRC extraction by using the -config option
with the set_starrc_in_design command. The configuration file must contain the
following StarRC settings:
• SIGNOFF_IMAGE, which is the location of the StarRC executable
• CORNER_GRD_FILE, which is a file that lists each corner and the corresponding StarRC
nxtgrd file
• One of the following settings:
◦ MAPPING_FILE, which is a StarRC layer mapping file
Specify this setting when running StarRC In-Design extraction in the implementation
mode.
◦ COMMAND_FILE, which is a StarRC command file
Specify this setting when running StarRC In-Design extraction in the signoff mode.
The following is an example configuration file for running StarRC In-Design extraction in
the implementation mode:
SIGNOFF_IMAGE: /home/star_rcxt/bin/StarXtract
CORNER_GRD_FILE: corner_grd.mapping
MAPPING_FILE: star.mapping
The following is an example configuration file for running StarRC In-Design extraction in
the signoff mode:
SIGNOFF_IMAGE: /home/star_rcxt/bin/StarXtract
CORNER_GRD_FILE: corner_grd.mapping
COMMAND_FILE: star.cmd
The following table shows the extraction settings used from the StarRC command file
when running in the signoff mode, and the corresponding Fusion Compiler command and
application option settings used when running in the implementation mode.
Table 11 Corresponding Extraction Settings Used in the Signoff and Implementation
Modes
COUPLE_TO_GROUND extract.enable_coupling_cap
The following StarRC command file settings are ignored. Instead, they are derived from
the Fusion Compiler design environment:
• BLOCK
• NDM_DATABASE
• POWER_NETS
• SELECTED_CORNERS
• CORNERS_FILE
The following StarRC settings are fixed and therefore are not overridden by the
corresponding setting in the StarRC command file:
• REDUCTION: NO_EXTRA_LOOPS
• EXTRA_GEOMETRY_INFO: NODE
• NETLIST_FORMAT: GPD
• SHORT_PINS: MIXED
• SKIP_CELLS: *
• POWER_EXTRACT: NO
• NETLIST_TYPE: RCC
• NETLIST_SELECT_NETS: *
• REDUCTION: NO_EXTRA_LOOPS
• NETLIST_NODE_SECTION: YES
• NETLIST_CONNECT_OPENS: *
• SIMULTANEOUS_MULTI_CORNER: YES
The following settings in the StarRC command file are not supported:
• DEF_ATTRIBUTE_FROM_LEF
• DEF_USE_PINS
• LEF_FILE
• LEF_USE_OBS
• MACRO_DEF_FILE
• TOP_DEF_FILE
◦ Configuration file
◦ StarRC executable
◦ Layer mapping file
◦ Corner mapping file
• -effort medium checks the same paths and also writes the generated StarRC
command file to the Check_StarRC_moduleName_nnnnn subdirectory. You can use
this file to help debug result inconsistencies between the Fusion Compiler and StarRC
tools.
• -effort high checks the same paths, creates a StarRC command file, and then
invokes the StarRC tool using the command file. All StarRC output files go in the
Check_StarRC_moduleName_nnnnn subdirectory.
To reset a parasitic scaling factor, use the set_extraction_options command to set its
value to 1.0. To report the parasitic scaling factors, use the report_extraction_options
command.
The parasitic scaling factors that you specify with this command are saved with the block
when you save it in the design library by using the save_block command.
For example, to use grounded virtual metal fill, use the following command:
fc_shell> set_extraction_options \
-virtual_metalfill_extraction grounded
The virtual metal fill parameter file provides information about how metal fill is inserted.
The tool supports two types of virtual metal fill parameter files:
◦ Simplified, which defines only the metal fill width and metal fill spacing for each
metal layer
To specify the simplified virtual metal fill parameter file, use the
-virtual_metalfill_parameter_file option with the set_extraction_options
command.
For example, to use a simplified parameter file named vmf.param, use the following
command:
fc_shell> set_extraction_options \
-virtual_metalfill_parameter_file vmf.param
For example, to use a detailed parameter file named starrc_vmf.param, use the
following command:
fc_shell> set_extraction_options \
-virtual_metalfill_starrc_parameter_file starrc_vmf.param
The detailed parameter file is required for StarRC In-Design extraction, and is
supported by TLUPlus extraction and Fusion Signoff extraction.
▪ StarRC In-Design extraction and advanced-mode Fusion Signoff extraction use
all of the specified parameters to model the metal fill.
To enable advanced-mode Fusion Signoff extraction, set the
extract.fusion_strarrc_vmf application option to advanced.
Note:
Using all parameters from the detailed parameter file requires a
StarRC license.
▪ TLUPlus extraction and basic-mode Fusion Signoff extraction (which is the
default), use only the metal fill width and metal fill spacing parameters.
For more information about the detailed virtual metal fill parameter file, see the
StarRC User Guide and Command Reference .
The StarRC In-Design extraction converts the Fusion Compiler virtual metal
parameter file into the corresponding StarRC virtual metal fill commands for StarRC
virtual metal fill extraction as shown:
VIRTUAL_METAL_FILL_PARAMETER_FILE: starrc_vmf_parameter_file
METAL_FILL_POLYGON_HANDLING: IGNORE
VIRTUAL_METAL_FILL_POLYGON_HANDLING: IGNORE|FLOATING|GROUNDED
The TLUPlus Signoff extraction supports the StarRC virtual metal fill parameter file
format, reading only fill_width and net_fill_w_spacing parameters; all other
parameters are ignored.
The fill_width parameter specifies the width of the virtual metal fill shapes. The
net_fill_space parameter specifies the spacing between route and virtual metal fill
shapes.
GPD files can be used in the PrimeTime tool for timing analysis.
• 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.
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 are 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.
The following example applies:
• The TOP_CIC2.spef file for corners C1 and C2 and TOP_C3C4.spef file for corners C3
and C4 at the top level.
• The BLK_CIC2.spef file for corners C1 and C2 and BLK_C3C4.spef file for corners C3
and C4 at the block level.
fc_shell> read_parasitics -corner_spef {{C1 C2} TOP_C1C2.spef} \
-corner_spef {{C3 C4} TOP_C3C4.spef}
fc_shell> read_parasitics -block BLK \
-corner_spef {{C1 C2} BLK_C1C2.spef} \
-corner_spef {{C3 C4} BLK_C3C4.spef}
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.
In addition to SPEF format, you can also use the read_parasitics command to read
data in Galaxy Parasitics Database (GPD) format by using one of the following options:
• -gpd gpd_path specifies a path to the GPD file for RC annotation.
• -gpd_attach reads parasitics from the GPD attached in the current block.
By reading parasitics through the GPD or GPD attachment, you can avoid performing
extraction (through the update_timing command) when opening a block.
Note:
You must make sure that the input GPD has the same corners as the current
block.
7
Performing Analysis
The Fusion Compiler tool allows you to analyze and report a wide range of timing related
information about the design. The following topics describe how to control and perform
timing analysis:
• Controlling Delay Calculation
• Ignoring Net Delay During Timing Analysis
• Enabling Multiple-Input Switching Analysis
• Enabling Waveform Propagation Using CCS Models
• Identifying Infeasible Paths and Resolving the Infeasibility
• Reporting Timing Paths
• Performing Path-Based Analysis
• Reporting the Logical DRC Violations
• Generating a Global Summary of Timing Violations
• Reporting the QoR
• Generating and Analyzing a QoR Snapshot
• Reporting Cells With Large Delays
• Reporting the Delay of a Timing Arc
• Reporting the Clock or Data Arrival Time at Pins or Ports
• Checking the Timing Constraints and Settings
• Checking for Consistency in Timing Analysis or Extraction Settings
• Analyzing Timing Correlation Between the Fusion Compiler and PrimeTime Tools
When you enable this feature, by default, the tool considers the data arrival windows
of the input pins, checks for overlaps, and derives the actual coefficients based
on the coefficients specified for the library cells. You can ignore the data arrival
windows of input pins and use coefficients specified for the library cells by setting the
time.enable_multi_input_switching_timing_window_filter application option to
false.
Infeasible paths increase runtime because the tool continues to optimize these paths.
Therefore, identifying and resolving the infeasibility can prevent this possible runtime
increase.
• To identify the infeasible paths in the design, use the
compute_infeasible_path_overrides command.
• To identify the infeasible paths and generate a script containing timing exceptions that
resolve the infeasibility, use the compute_infeasible_path_overrides -output
command.
• To identify the infeasible paths and automatically apply timing exceptions
that resolve the infeasibility, use the compute_infeasible_path_overrides
-apply_override_constraints command.
The following example checks infeasible paths and generates the out.tcl file that contains
timing exceptions to resolve the infeasibility:
As shown in the following example, the out.tcl file contains path margins that are
generated by the command:
#check_infeasible_timing_paths
#################################
◦ From, through, or to specific pins, ports, nets, or cell instances by using the
-exclude option
◦ Rising at specific pins, ports, nets, or cell instances by using the -rise_exclude
option
◦ Falling at specific pins, ports, nets, or cell instances by using the -fall_exclude
option
Control the information that is printed about the timing paths or its objects by using the
following options:
• Include nets by using the -nets option
• Include pin locations by using the -physical option
• Include attributes by using the -attributes option
• Include input pins by using the -input_pins option
• Include hierarchical pins by using the -include_hierarchical_pins option
• Include transition times by using the -transition_time option
• Include capacitances by using the -capacitance option
• Include information about the dominant timing exceptions (false paths, multicycle
paths, and minimum and maximum delays) that apply to each timing path that is
printed by using the -exception option
Including information about the exceptions that apply to each timing path increases the
runtime.
• Include operating condition process, voltage, and temperature by using the -process,
-voltage, and -temperature options
• Include the mean and standard deviation of the statistical time increment for each path
element when parametric on-chip variation (POCV) analysis is enabled by using the
-variation option
• Exclude the transparency window for latch based designs by using the
-skip_transparency_window 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 valid values for this application option are point, incr, path, cap, fanout, trans,
derate, mean, and sensit.
Unconstrained paths have a slack value of infinity, and you can report unconstrained paths
only by using path filtering as shown in the following example:
fc_shell> report_timing [filter_collection \
[get_timing_paths -max_paths 200000 -to [all_outputs]] \
slack=="INFINITY"]
• report_global_timing
• report_qor
• get_timing_paths
Graph-based analysis is used to identify the appropriate timing paths, and then path-
based analysis used to report the timing of the selected paths.
• exhaustive
Path-based analysis is used exhaustively to identify and report the appropriate timing
paths, which might increase the runtime significantly. You can limit the number of paths
analyzed by using the time.pba_exhaustive_endpoint_path_limit application
option.
To specify that path-based analysis is used only for adjusting the timing derating values,
set the time.pba_derate_only_mode application option to true.
Setup violations
---------------------------------------------------------
Total reg->reg in->reg reg->out in->out
---------------------------------------------------------
WNS -20.34 -20.34 0.00 -1.19 -0.98
TNS -6887.98 -6882.84 0.00 -3.17 -1.96
NUM 398 392 0 4 2
---------------------------------------------------------
Hold violations
---------------------------------------------------------
Total reg->reg in->reg reg->out in->out
---------------------------------------------------------
WNS -3.55 -3.55 0.00 0.00 0.00
TNS -561.17 -561.17 0.00 0.00 0.00
NUM 418 418 0 0 0
---------------------------------------------------------
By default, the tool analyzes both setup and hold violations of all path groups in all active
corners, modes, and scenarios. You can limit the analysis by using the -delay_type,
-groups, -corners, -modes, and -scenarios options. For more information about these
options and other options available for changing the granularity of the report, see the man
page of the report_global_timing command.
By default, the command reports the QoR for all active scenarios. To report the QoR 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.
The following is an example of a report generated by the report_qor command.
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.
• Selectively retrieve, sort, and display the needed information from the snapshot with
the query_qor_snapshot command
• Remove the snapshot with the remove_qor_snapshot command
When you create a QoR snapshot with the create_qor_snapshot command, you must
specify a name for the snapshot by using the -name option. You use this name when you
report, query, or remove the snapshot.
By default, the tool creates the QoR snapshot for all scenarios of the block. To create it for
a specific scenario, use the -scenarios option, as shown in the following example:
fc_shell> create_qor_snapshot -name func1 -scenarios func1
**********************************************************************
Report : create_qor_snapshot (func1)
.......
.......
.......
Time unit : 1.00ns
Resistance unit : 1.00MOhm
Capacitance unit: 1.00fF
Voltage unit : 1.00V
Current unit : 1.00uA
Power unit : 1.00pW
Location : /home/my_work_dir/placement_stage/snapshot
**********************************************************************
No. of scenario = 1
s1 = func1
--------------------------------------------------
WNS of each timing group: s1
--------------------------------------------------
SD_DDR_CLK 1.07
SDRAM_CLK 0.06
PCI_CLK -1.76
SYS_2x_CLK 0.08
v_PCI_CLK -0.71
SYS_CLK 0.06
--------------------------------------------------
Setup WNS: -1.76
Setup TNS: -102.47
Number of setup violations: 95
Hold WNS: -0.50
Hold TNS: -27.81
Number of hold violations: 125
Number of max trans violations: 0
Number of max cap violations: 28
Number of min pulse width violations: 0
--------------------------------------------------
Area: 444776.034
Cell count: 53399
Buf/inv cell count: 7182
Std cell utilization: 0.50
CPU(s): 64
Mem(Mb): 649
Host name: syn_host
--------------------------------------------------
Histogram: s1
--------------------------------------------------
Max violations: 95
above ~ -0.7 --- 40
-0.6 ~ -0.7 --- 55
-0.5 ~ -0.6 --- 0
-0.4 ~ -0.5 --- 0
-0.3 ~ -0.4 --- 0
-0.2 ~ -0.3 --- 0
-0.1 ~ -0.2 --- 0
0 ~ -0.1 --- 0
--------------------------------------------------
Min violations: 125
-0.06 ~ above --- 0
-0.05 ~ -0.06 --- 0
-0.04 ~ -0.05 --- 0
-0.03 ~ -0.04 --- 3
-0.02 ~ -0.03 --- 4
-0.01 ~ -0.02 --- 20
0 ~ -0.01 --- 41
--------------------------------------------------
Snapshot (func1) is created and stored under
"/home/my_work_dir/placement_stage/snapshot" directory
By default, the snapshot is stored in a directory named snapshot in the current working
directory. To specify a different location, use the time.snapshot_storage_location
application option.
When you create, report, or query a QoR snapshot with the create_qor_snapshot,
report_qor_snapshot, or query_qor_snapshot command, you can display the results in
the GUI by using the -display option.
The following example analyzes a snapshot and displays the paths that have a worst
negative slack between –2.0 and –1.0:
fc_shell> query_qor_snapshot -name func1 -display \
-filters "-wns -2.0,-1.0"
The following example analyzes a snapshot and displays the paths that have more than
10 levels of logic:
fc_shell> query_qor_snapshot -name func1 -display \
-filters "-logic_level 10, "
cell delay larger than 30 percent of the path slack up to that cell. You can change this
percentage delay threshold by using the -delay_threshold option.
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:
fc_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.
The following is an example output of the check_timing command.
fc_shell> check_timing
Warning: The register clock pin 'F1/CLK' has no fanin clocks. (TCK-002)
Warning: The register clock pin 'F2/CLK' has no fanin clocks. (TCK-002)
Warning: The register clock pin 'F3/CLK' has no fanin clocks. (TCK-002)
Warning: The reported endpoint 'OUT' is unconstrained. Reason: 'no
check'. (TCK-001)
You can also perform the timing checks by using the check_design -checks timing
command, as shown in the following example:
fc_shell> check_design -checks timing
****************************************
Report : check_design
Options: { timing
g }
Design : TOP
.......
.......
****************************************
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'
The following is part of the output file generated for this example:
Error: The timing_crpr_threshold_ps PrimeTime setting should be set to 5.
(CORR-800)
Error: The time.crpr_remove_clock_to_data_crp Fusion Compiler setting
should be set to FALSE. (CORR-812)
Error: The time.enable_si(si_enable_analysis) setting is inconsistent
between Fusion Compiler and PrimeTime. The Fusion Compiler value is
true; the PrimeTime value is false. (CORR-803)
The following example sets up and checks the consistency between the Fusion Compiler
and StarRC settings.
fc_shell> set_consistency_settings_options \
-exec_path /global/SNPS_tools -tool starrc \
-script run_starrc.tc -corner max
fc_shell> check_consistency_settings -tool starrc \
-output starrc_consistency_check.rpt
• The percentage of violating timing endpoints that correlate within the specified
threshold.
• The average and standard deviation of the absolute difference between Fusion
Compiler and PrimeTime slack for all endpoints.
• The worst negative slack (WNS), total negative slack (TNS), number of violating
endpoints (NVE), and the unique number of violating endpoints for the both tools and
the difference.