Ctcug
Ctcug
Ctcug
Comments?
E-mail your comments about Synopsys
documentation to [email protected]
Copyright Notice and Proprietary Information
Copyright 2003 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary
information that is the property of Synopsys, Inc. The software and documentation are furnished under a license agreement and
may be used or copied only in accordance with the terms of the license agreement. No part of the software and documentation may
be reproduced, transmitted, or translated, in any form or by any means, electronic, mechanical, manual, optical, or otherwise,
without prior written permission of Synopsys, Inc., or as expressly provided by the license agreement.
Right to Copy Documentation
The license agreement with Synopsys permits licensee to make copies of the documentation for its internal use only.
Each copy shall include all copyrights, trademarks, service marks, and proprietary rights notices, if any. Licensee must
assign sequential numbers to all copies. These copies shall contain the following legend on the cover page:
“This document is duplicated with the permission of Synopsys, Inc., for the exclusive use of
__________________________________________ and its employees. This is copy number __________.”
SystemC is a trademark of the Open SystemC Initiative and is used under license.
AMBA is a trademark of ARM Limited. ARM is a registered trademark of ARM Limited.
All other product or company names may be trademarks of their respective owners.
ii
Contents
iii
Analyzing the Clock Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-9
Documenting Your Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10
Defining the Clock Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10
Specifying the Clock Tree Root . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
Using an Input Port As the Clock Tree Root . . . . . . . . . . . . . 2-12
Using an Output Pin As the Clock Root . . . . . . . . . . . . . . . . 2-13
Reporting the Clock Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-14
Verifying the Clock Tree Root . . . . . . . . . . . . . . . . . . . . . . . . 2-15
Determining the Default Clock Sinks . . . . . . . . . . . . . . . . . . . . . 2-17
Specifying Clock Tree Exceptions . . . . . . . . . . . . . . . . . . . . . . . 2-20
Excluding Clock Sinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-21
Defining Stop Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-22
Defining Float Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-23
Specifying the Clock Tree References . . . . . . . . . . . . . . . . . . . . 2-24
Setting Constraints for Clock Tree Synthesis. . . . . . . . . . . . . . . . . . 2-28
Optimization Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-28
Setting Operating Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-30
Setting Clock Tree Design Rule Constraints . . . . . . . . . . . . . . . 2-30
Setting Clock Tree Timing Constraints . . . . . . . . . . . . . . . . . . . . 2-34
Setting Clock Tree Buffering Constraints . . . . . . . . . . . . . . . . . . 2-35
Setting Clock Tree Routing Constraints . . . . . . . . . . . . . . . . . . . 2-38
Specifying Routing Layers . . . . . . . . . . . . . . . . . . . . . . . . . . 2-38
Specifying Routing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-39
Determining the RC Coefficients . . . . . . . . . . . . . . . . . . . . . 2-40
iv
Handling Specific Design Characteristics . . . . . . . . . . . . . . . . . . . . 2-42
Handling Hard Macro Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-42
Handling Existing Clock Trees . . . . . . . . . . . . . . . . . . . . . . . . . . 2-43
Locating Existing Clock Trees . . . . . . . . . . . . . . . . . . . . . . . 2-44
Preserving Portions of an Existing Clock Tree . . . . . . . . . . . 2-44
Removing Clock Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-46
Handling Non-Unate Gated Clocks . . . . . . . . . . . . . . . . . . . . . . 2-47
Handling Convergent Clock Trees . . . . . . . . . . . . . . . . . . . . . . . 2-48
Handling Overlapping Clock Paths . . . . . . . . . . . . . . . . . . . . . . 2-50
Balancing Multiple Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-52
Verifying the Clock Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-52
Synthesizing the Clock Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-53
Synthesizing High-Fanout Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-57
Analyzing the Clock Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-60
Fine-Tuning Clock Tree Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . 2-64
Controlling the Design Rule Optimization Effort . . . . . . . . . . . . 2-64
Controlling the Skew Optimization Effort . . . . . . . . . . . . . . . . . . 2-65
Using Selective Skew Balancing . . . . . . . . . . . . . . . . . . . . . . . . 2-66
Controlling Buffer Sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-67
Minimizing Movement of Critical Cells . . . . . . . . . . . . . . . . . . . . 2-67
Analyzing the Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-68
Performing Detail Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-70
Analyzing Routability Before Detail Routing . . . . . . . . . . . . . . . 2-70
Performing Detail Routing With a Stand-Alone Router . . . . . . . 2-71
Analyzing the Post-Route Design . . . . . . . . . . . . . . . . . . . . . . . 2-72
v
3. Hierarchical Clock Tree Synthesis
Overview of Interface Logic Models . . . . . . . . . . . . . . . . . . . . . . . . 3-2
Creating the Interface Logic Models . . . . . . . . . . . . . . . . . . . . . . . . 3-4
Preparing the Block for Modeling. . . . . . . . . . . . . . . . . . . . . . . . 3-5
Identifying the Interface Logic . . . . . . . . . . . . . . . . . . . . . . . . . . 3-5
Extracting the Interface Logic Model . . . . . . . . . . . . . . . . . . . . . 3-6
Identifying Obstructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8
Deriving Keepouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8
Defining Keepouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-9
Reporting Keepouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-9
Preparing for Top-Level Clock Tree Synthesis . . . . . . . . . . . . . . . . . 3-10
Running Top-Level Clock Tree Synthesis . . . . . . . . . . . . . . . . . . . . 3-11
vi
Viewing Clock Trees in the Physical Compiler GUI . . . . . . . . . . . . . 4-21
Viewing the Clock Trees in Visual Mode . . . . . . . . . . . . . . . . . . 4-23
Viewing the Clock Tree Hierarchy . . . . . . . . . . . . . . . . . . . . . . . 4-28
Glossary
Index
vii
viii
Preface FIX ME!
ix
What’s New in This Release
This section describes the enhancements included in Physical
Compiler clock tree synthesis version U-2003.06-PCE3.0. Unless
otherwise noted, you can find additional information about these
changes later in this book.
Enhancements
Physical Compiler clock tree synthesis version U-2003.06-PCE3.0
includes the following enhancements:
x
• Ability to retime clock trees after clock tree synthesis
In previous releases, the timing information for synthesized clock
trees was based on the back-annotation data. The new
retime_clock_tree command enables you to retime the
synthesized clock trees in the current environment.
xi
About This Guide
The Physical Compiler Clock Tree Synthesis User Guide describes
the methodology for performing clock tree synthesis using the
Physical Compiler Expert tool.
Audience
This user guide is for engineers who run clock tree synthesis within
Physical Compiler. You need to be familiar with
xii
Related Publications
For additional information about Physical Compiler clock tree
synthesis, see
• Astro
• Design Compiler
• Physical Compiler
xiii
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
xiv
Customer Support
Customer support is available through SolvNet online customer
support and through contacting the Synopsys Technical Support
Center.
Accessing SolvNet
SolvNet includes an electronic knowledge base of technical articles
and answers to frequently asked questions about Synopsys tools.
SolvNet also gives you access to a wide range of Synopsys online
services including software downloads, documentation on the Web,
and “Enter a Call With the Support Center.”
To access SolvNet,
xv
Contacting the Synopsys Technical Support Center
If you have problems, questions, or suggestions, you can contact the
Synopsys Technical Support Center in the following ways:
• Open a call to your local support center from the Web by going to
http://solvnet.synopsys.com (Synopsys user name and
password required), then clicking “Enter a Call With the Support
Center.”
• Send an e-mail message to [email protected].
• Telephone your local support center.
- Call (800) 245-8005 from within the continental United States.
- Call (650) 584-4200 from Canada.
- Find other local support center telephone numbers at
http://www.synopsys.com/support/support_ctr.
xvi
1
Introduction to Physical Compiler Clock Tree
Synthesis 1
Performing clock tree synthesis within the Physical Compiler tool is
an integral part of the Synopsys RTL-to-placed-gates methodology.
Built on top of a common synthesis, placement, and timing
infrastructure, Physical Compiler clock tree synthesis uses
proprietary technologies to extend the Physical Compiler
capabilities, achieving the best clock tree synthesis quality of results
(QOR) with fewer iterations.
Introduction to Physical Compiler Clock Tree Synthesis: Benefits of Using Physical Compiler Clock Tree
1-2
• User control of the clock tree synthesis process
Physical Compiler clock tree synthesis allows you to guide the
following aspects of clock tree synthesis:
Introduction to Physical Compiler Clock Tree Synthesis: Benefits of Using Physical Compiler Clock Tree
1-3
• Ease of use
Because Physical Compiler clock tree synthesis is built into
Physical Compiler, the design flow and methodology are
efficient. Physical Compiler clock tree synthesis
Introduction to Physical Compiler Clock Tree Synthesis: Benefits of Using Physical Compiler Clock Tree
1-4
• Faster turnaround time
Turnaround time is the elapsed time between starting the
synthesis step and obtaining a netlist that meets requirements.
Using an integrated tool set reduces turnaround time.
Product Overview
To use Physical Compiler clock tree synthesis, you must
• Produces clock trees that are optimized for skew and insertion
delay while preserving critical path timing
• Considers physical information (back-annotates parasitics and
wire delays)
• Recognizes placement and layer-specific routing blockages
Design planning
RTL
Physical Compiler
unified synthesis
and
placement
Constraints Within
psyn_shell
Physical Compiler
clock tree synthesis
Placed design
To router
When you are satisfied with the results, save your design.
Figure 1-2 on page 1-10 shows the clock tree synthesis flow.
no
Analyze design
# analyze results
report_clock_tree -clock CLK -level_info -settings
report_constraint
report_timing
get_clock_tree_delays Returns raw data about the clock tree delays. This
command is best used as input to a script that
manipulates the reported data.
Introduction to Physical Compiler Clock Tree Synthesis: Commands Specific to Clock Tree Synthesis
1-12
Table 1-1 Summary of Commands Specific to Clock Tree
Synthesis (Continued)
Command Description
set_clock_tree_exceptions Defines float pins, stop pins, exclude pins, and don’t
touch subtree pins.
set_clock_tree_options Defines the clock tree, including the clock root, the
design rule constraints, buffering constraints, and
routing constraints. Also traces the net and determines
the default set of clock sinks.
Introduction to Physical Compiler Clock Tree Synthesis: Commands Specific to Clock Tree Synthesis
1-13
Introduction to Physical Compiler Clock Tree Synthesis: Commands Specific to Clock Tree Synthesis
1-14
2
Running Clock Tree Synthesis 2
You use Physical Compiler to perform clock tree synthesis as
described in these sections:
To see the trip-point values set in the technology library, run the
report_lib command. If your technology library uses 100/0
trip points, disable the library trip points and use user-defined trip
points instead. To disable the library trip points, set the
lib_thresholds_per_lib variable to false (the default value
is true). To set user-defined trip points, set the following variables:
- rc_slew_lower_threshold_pct_rise
- rc_slew_lower_threshold_pct_fall
- rc_slew_upper_threshold_pct_rise
- rc_slew_upper_threshold_pct_fall
If your library does not contain trip points and you do not specify
user-defined values, Physical Compiler uses the default trip-point
values of 80/20.
- field_oxide_thickness
- field_oxide_permittivity
- avg_lateral_oxide_thickness
- lateral_oxide
- avg_lateral_oxide_permittivity
- oxide_thickness
- oxide_permittivity
- metal_thickness
- metal_resistivity
• Link report
Link the design to the logical and physical technology libraries
specified by the link_library and physical_library
variables.
psyn_shell-t> check_legality
• Routing congestion
Determine the routability of the design by using the
report_congestion command and the Physical Compiler
GUI congestion map.
- Set the clock source latency as the external clock delay (the
clock latency)
psyn_shell-t> set_clock_latency -source delay my_clk
- Include the clock source latency when specifying the input and
output delays
psyn_shell-t> set_input_delay -clock my_clk \
delay ports
psyn_shell-t> set_output_delay -clock my_clk \
delay ports
• Timing
psyn_shell-t> report_timing > my_design_prects.tim
• Constraints
psyn_shell-t> report_constraints > my_design_prects.cstr
Save the results. You will compare these reports with the reports you
generate after running clock tree synthesis.
You must specify the clock tree root. Physical Compiler uses timing
arcs to trace the network from the clock tree root to the clock pins of
sequential elements to determine the default set of clock sinks. You
can modify this default set of clock sinks to meet your requirements.
Note:
The set_clock_tree_options command creates a clock
tree object. Clock tree objects are independent of the clock
objects created by the create_clock command.
If the cell has a single timing arc to the clock root, you need only
specify the pin name to define the clock tree.
For example, to define a clock tree, CLK1, that uses output pin Z of
instance U1 as its root, enter
psyn_shell-t> set_clock_tree_options \
-root [get_pins U1/Z] -clock_tree_name CLK1
If the cell has multiple timing arcs to the clock root, Physical Compiler
selects a timing arc for you and generates a warning message.
However, to get the best results, you should identify the controlling
input by specifying the -timing_arc option.
For example, if output Z of clock gating cell U1 drives the root of clock
tree CLK1 (and the clock input is input U1/A), enter
psyn_shell-t> set_clock_tree_options \
-root [get_pins U1/Z] -clock_tree_name CLK1 \
-timing_arc [get_pins U1/A]
Therefore, before running clock tree synthesis, verify that your clock
tree root does not have any of the following violations:
- The clock tree root is a top-level port and the transition time
(assuming zero internal load) violates the maximum transition
time design rule.
- The clock tree root is a leaf-cell pin and the transition time
(assuming a minimum load) violates the maximum transition
time design rule.
• Maximum insertion delay violation
This error occurs when the clock tree root is a leaf-cell pin and
the insertion delay (assuming a minimum load) violates the
maximum insertion delay constraint.
• Replace the root cell with a logical equivalent cell that has a
higher drive strength.
• Verify that the constraint on the library model of the root cell is
feasible.
• Verify that the constraint for the design and for clock tree
synthesis is reasonable. Do not try to control constraint priority by
setting the constraint to zero—use the
set_clock_tree_options -priority command instead.
• If the root cell has high input transition times, determine the
cause and fix them.
Methods for fixing high input transition times include (but are not
limited to)
• At least one valid path exists from the input pin on the clock path
to the output pin. Physical Compiler considers the following types
of paths to be valid:
- A combinational timing path
The following types of timing arcs create noncombinational
timing paths: clock posedge, clock negedge, three-state
enable, three-state disable, and all timing check arcs. All other
types of timing arcs create combinational timing paths.
- A sequential timing path (clock posedge or clock negedge)
when the output pin is the source of a generated clock
Combinational timing paths have priority over generated clocks.
If a cell has both types of paths, Physical Compiler traces through
the combinational path and ignores the generated clock.
When the tracing stops because one of the other conditions is not
met, Physical Compiler creates an implicit exclude pin (for
information about exclude pins, see “Excluding Clock Sinks” on
page 2-21). The types of pins that become implicit exclude pins
include
Note:
Implicit exclude pins are not stored in the design database.
To override an inferred exclude pin (and use the pin as a clock sink),
define the pin as a stop pin. For information about defining stop pins,
see “Defining Stop Pins” on page 2-22.
• Exclude pins
Exclude pins are clock tree endpoints that are not included in the
set of clock sinks. Physical Compiler does not use exclude pins
in clock tree timing (skew and insertion delay) calculations and
optimizations.
• Stop pins
Stop pins are clock tree endpoints that you explicitly specify.
Physical Compiler treats the specified pin as a clock sink, adding
clock instances and calculating insertion delay up to this pin.
Physical Compiler does not trace beyond the stop pin. Any
insertion delay between the specified pin and a default clock sink
is ignored.
• Float pins
Float pins are clock pins that have special insertion delay
requirements. Physical Compiler adds the float pin insertion
delay (positive or negative) to the calculated insertion delay up to
this pin.
Implicit
Physical Compiler creates implicit exclude pins during clock tree
tracing. For more information about implicit exclude pins, see
“Determining the Default Clock Sinks” on page 2-17.
Explicit
You create explicit exclude pins by using the
set_clock_tree_exceptions -exclude_pins command
to specify excluded pins.
Physical Compiler identifies explicit exclude pins by setting the
ct_is_exclude_pin attribute on the specified pins.
When you create an explicit exclude pin, the pin you specify as
the exclude pin does not need to be a clock sink. If the pin is not
a clock sink, the tree branches that fan out from the specified pin
are excluded.
For example, to exclude clock sink U2/CLK, enter
psyn_shell-t> set_clock_tree_exceptions \
-exclude_pins [get_pins U2/CLK]
psyn_shell-t> set_clock_tree_exceptions \
-exclude_pins [get_pins U2/A]
CLK
A n1
B
U2
During clock tree synthesis, exclude pins (both implicit and explicit)
are typically connected at the last level of the clock tree. Although
Physical Compiler does not perform skew or insertion delay
optimization beyond the exclude pin (net n1 in Figure 2-1), it does
trace beyond this pin and fixes design rule constraint violations that
occur beyond the exclude pin.
psyn_shell-t> set_clock_tree_exceptions \
-stop_pins [get_pins U2/A]
You can specify either a positive or a negative value for the float pin
insertion delay. If you specify a positive insertion delay for a float pin,
Physical Compiler decreases the external insertion delay to that pin
by connecting the float pin closer to the clock root. If you specify a
negative insertion delay for a float pin, Physical Compiler increases
the external insertion delay to that pin by adding extra buffers.
To define a float pin and its timing characteristics, use the following
options of the set_clock_tree_exceptions command:
• -float_pins
• -float_pin_max_delay
• -float_pin_min_delay
ct_floatpin_clock_tree_name
Boolean value that indicates whether the pin is a float pin.
ct_floatpin_min_del
Minimum insertion delay of the float pin.
ct_floatpin_max_del
Maximum insertion delay of the float pin.
For example, to decrease the insertion delay to register U1, enter
psyn_shell-t> set_clock_tree_exceptions \
-float_pin [get_pins U1/CLK] \
-float_pin_max_delay 0.10 \
-float_pin_min_delay 0.10
Note:
For best results, specify the intended clock buffers and inverters.
Do not rely on the default set of buffers and inverters.
You can specify the reference list for a specific clock tree (use the
-clock_tree option) or for all clock trees (omit the -clock_tree
option). To specify the reference list for a specific clock tree, you must
define the clock tree before you run the
set_clock_tree_references -clock_tree command. If the
specified clock tree is not defined, the tool generates the CTS-110
warning message and ignores the specified reference list.
For example, to create a reference list for clock tree CLK1, enter
psyn_shell-t> set_clock_tree_references \
-references {clk1a6 clk1a9 clk1a15 clk1a27}
For more control, you can select a specific reference from a clock
tree’s reference list to use on each level of the clock tree. To specify
a level-specific reference, use the set_clock_tree_options
-reference_per_level reference_list command. The
reference_list argument is a list of references that specifies one
reference per level. You can use an asterisk (*) to indicate that
Physical Compiler should select a reference from the clock tree’s
reference list for a specific level. Physical Compiler uses the
Note:
The -reference_per_level option is supported only for
ungated and one-level gated clocks.
For example, assume that you require the clk1a9 reference on the
last and second-to-last levels of the clock tree, and you want Physical
Compiler to select the reference for all other levels of the clock tree.
To specify this requirement, enter
1. Level-specific reference
2. Clock tree-specific reference list
3. Global reference list
4. Default reference list
The report generated by the report_clock_tree -settings
command shows the references that are available for clock tree
synthesis. Example 2-2 shows the portion of a clock tree report that
contains this information. In addition to listing the available
references, the report shows the design rule constraint settings used
for these references during clock tree synthesis. For information
about interpreting and validating these values, see “Setting Clock
Tree Design Rule Constraints” on page 2-30.
Optimization Priorities
By default, Physical Compiler prioritizes the clock tree synthesis
optimization goals as follows:
1. Design rules
a. Meet maximum capacitance constraint
b. Meet maximum transition time constraint
c. Meet maximum fanout constraint
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-28
2. Clock tree timing and buffering
a. Meet maximum skew constraint
b. Meet maximum insertion delay constraint
c. Minimize instance area
d. Minimize instance count
Note:
Although the other constraints discussed in the following
pages affect the clock tree synthesis results, they are not
considered optimization goals, so they are not listed here.
During clock tree synthesis, Physical Compiler can synthesize
several versions of the clock trees and use the clock tree timing
and buffering priorities to select the implementation that best
meets your requirements. This capability is called iterative
optimization and is automatically done for any clock tree with up
to 2000 sinks.
If meeting the skew constraint is not your highest priority, use the
set_clock_tree_options -priority command to specify
your highest priority goal. Note that to change the optimization
priority, you must also set the
cts_iterative_optimization variable to true. For more
information about this variable, see “Fine-Tuning Clock Tree
Synthesis” on page 2-64.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-29
Table 2-1 Constraint Priority Keywords
Keyword Clock tree optimization goal
For more information about this command, see the man page.
• Maximum capacitance
• Maximum transition time
• Maximum fanout
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-30
You can set these design rule constraints in the logical library, on the
design, on the clock trees, or on the clock references. Physical
Compiler determines the design rule constraints for clock tree
synthesis in the following order:
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-31
Table 2-2 Default Design Rule Constraints for Clock Tree Synthesis
Constraint Default
Maximum capacitance 1 pF
The values reported for the design, the clock trees, and the clock tree
root are the clock tree synthesis constraints. For each reference,
both the logic synthesis and clock tree synthesis constraints are
listed. The first line for a reference (without -library-) shows the
design rule constraints that are used for clock tree synthesis. The
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-32
second line (with -library-) shows the design rule constraints that are
used for logic synthesis. An asterisk in the first line indicates that the
design rule constraint is specific to clock tree synthesis (a value
specified in a set_clock_tree_options or
set_clock_tree_references command, or a default value set
by Physical Compiler).
Review these values. If any of the values are incorrect for clock tree
synthesis, you can override them by using the -max_capacitance,
-max_transition, and -max_fanout options of the
set_clock_tree_references or set_clock_tree_options
command.
Note:
The report_constraint command does not account for clock
tree synthesis design rule constraints; only the synthesis design
rule constraints are considered in their results.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-33
Setting Clock Tree Timing Constraints
You can specify the following clock tree timing constraints for a clock
tree:
• Maximum skew
During optimization, Physical Compiler computes the skew value
by comparing the arrival times of all clock signals in a clock
domain, including those that do not communicate through data
paths (global skew).
1. Maximum skew
2. Maximum insertion delay
You can change the priority by using the
set_clock_tree_options -priority delay command.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-34
Physical Compiler checks the minimum insertion delay after
synthesizing the initial clock tree based on the constraints listed in
“Optimization Priorities” on page 2-28. If the synthesized clock tree
does not meet the specified minimum insertion delay, Physical
Compiler inserts buffers at the clock root to fix the violation.
psyn_shell-t> set_clock_tree_options \
-root [get_port CLK] -number_of_levels 4
Note:
If the clock reference list contains only inverters, Physical
Compiler might adjust the maximum number of levels to
maintain the correct logic and polarity.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-35
• The minimum number of instances per level (for ungated clocks
only)
Use the set_clock_tree_options
-number_of_instances_per_level cnt_list command
to specify this constraint. The last number in the list specifies the
minimum number of instances in the last level (closest to the
clock sinks), the preceding number specifies the minimum
number of instances for the next-to-last level, and so on. For
example, to specify 8 instances at the last level, 4 instances at
the second-to-last level, 2 instances at the third-to-last level, and
1 instance at the fourth-to-last level, enter
psyn_shell-t> set_clock_tree_options \
-root [get_port CLK] \
-number_of_instances_per_level {1 2 4 8}
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-36
-fanout_limit_for_route_only_clock_net cnt
command to specify the minimum fanout required for Physical
Compiler to insert instances after a driver.
Also by default, Physical Compiler inserts instances into the
clock tree wherever they are required. To prevent Physical
Compiler from inserting clock tree instances in fast paths, use
the set_clock_tree_options
-delay_limit_for_route_only_clock_net delay
command to specify the minimum delay required for Physical
Compiler to insert instances in a path. If you are using a 0.18
micron technology, a typical minimum delay value is between
0.4 and 0.5 ns. To buffer more nets, use a minimum value of
0.3 ns.
- Explicitly specifying the unbuffered nets
The only nets that you can explicitly specify as unbuffered are
nets that directly drive a clock sink. To prevent Physical
Compiler from buffering this type of net, use the
set_clock_tree_exceptions
-global_route_only_subtrees pins command to
specify the output pin that drives the net.
Caution!
If you specify this exception for a net that does not directly drive
a clock sink, Physical Compiler does not generate a warning
message; however, the tool ignores the exception and buffers
the net.
To control buffering on these nets, specify minimum buffering
requirements, as described on page 2-36.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-37
Setting Clock Tree Routing Constraints
Physical Compiler allows you to specify two types of clock tree
routing constraints:
psyn_shell-t> set_clock_tree_options \
-clock_tree_name CLK1 -root [get_ports CLK1] \
-layer_list {metal4 metal5}
Note:
Physical Compiler ignores absolute user-defined RC coefficients
when you specify the routing layers; however, it applies
user-defined RC scaling factors.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-38
Specifying Routing Rules
If you do not specify which routing rule (wire type) to use for clock
tree synthesis, Physical Compiler uses the default routing rule
(default wires) to route the clock trees. To reduce the wire delays in
the clock trees, you can use wide wires instead. Wide wires are
represented by nondefault routing rules.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-39
To see which nets have nondefault routing rules, run the
report_net_routing_rules command.
psyn_shell-t> report_net_routing_rules \
[get_nets * -filter "@has_cts_ba==true"]
Note:
“Preparing the Libraries” on page 2-3 provides the complete list
of extraction parameters required to perform extraction-based
RC computation.
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-40
To indicate that RC computation is based on extraction parameters,
Physical Compiler generates the following message:
If you want to use extracted RCs and you do not see this message,
check for the following conditions:
Running Clock Tree Synthesis: Setting Constraints for Clock Tree Synthesis
2-41
Handling Specific Design Characteristics
There are several design styles that might require special
considerations during clock tree synthesis. These design styles
include
If you do not have a timing model for the hard macro cell, use float
pins to specify the timing characteristics of the clock trees internal to
the hard macro. You define the timing characteristics by specifying
Caution!
Do not define float pins if you have a timing model for the hard
macro cell. Doing so can cause invalid timing information and can
create timing violations in your design.
For example, assume that you do not have a timing model for a RAM.
Timing analysis shows that the delay of the precompiled clock tree
from the RAM_block/CLK port to the earliest sink is 0.33 ns, and the
delay to the latest endpoint is 0.52 ns.
psyn_shell-t> set_clock_tree_exceptions \
-float_pin [get_pins RAM_block/CLK] \
-float_pin_max_delay 0.52 \
-float_pin_min_delay 0.33
Preexisting cells form a clock tree when they meet both of the
following conditions:
Note:
The report_transitive_fanout command does not take
into account the exceptions specified by the
set_clock_tree_exceptions command. Its results might
differ from those in the clock tree report.
• The number of levels reported by the report_clock_tree
-clock_tree clk_tree -level_info is two or greater.
There are two types of don’t touch subtrees: implicit and explicit.
Before you use this exception, ensure that the nets in the subtree are
routed and that back-annotation is applied to the nets. If some nets
in the transitive fanout were not properly buffered and
back-annotated when they were inserted or completed using a
third-party tool, the post-layout correlation of clock tree delays will
probably be very poor. Best practice is to run the
compile_clock_tree command on the subtree root; this does all
the necessary steps: global preroute, delay estimation,
back-annotation, and preservation of the data.
Important:
The nets in the subtree must have the has_cts_ba attribute set.
If this attribute is not set, the compile_clock_tree command
generates an error message and exits.
Note:
Clock tree synthesis does not honor the dont_touch attribute.
If you apply a dont_touch attribute to a clock tree net or cell and
do not apply the dont_touch_subtrees exception, the clock
tree might be modified.
Note:
Use the remove_clock_tree command before resynthesizing
the clock trees only when you want to keep some of the inserted
trees but resynthesize others. If you want to resynthesize all clock
For example, suppose your design has the gating logic shown in
Figure 2-2.
To force the XOR gate (U0) into functional mode for timing analysis,
enter the following command:
Convergence cell
CK CK
Primary clock root
CK CK CK
MUX_A
A Z
CLK CK
B
CK
CK
CK
CK
CK
Convergent
clock subtree
Note:
You must either allow Physical Compiler to automatically detect
and synthesize all convergent clock paths in your design or you
must manually compile all convergent clock paths in the design.
You cannot mix these two methods within a single
compile_clock_tree run.
CLKA
MUX_A
CLKB
Overlap cell
In the first pass, perform clock tree synthesis on each clock to get the
best individual results.
Rerun clock tree synthesis, using your original design from Physical
Compiler as input.
psyn_shell-t> compile_clock_tree
When you synthesize the clock trees, usually you sequence the
clocks so that the clock with the largest number of sinks or with the
tightest constraints is first. You can determine which clock has the
most sinks from the clock tree report.
In the first pass, Physical Compiler uses only the buffers and
inverters included in the clock reference list to build the clock
trees. For information about specifying the clock reference list,
see “Specifying the Clock Tree References” on page 2-24.
After placing the clock tree cells, Physical Compiler legalizes the
placement of these cells. Physical Compiler legalizes the
placement of the non-clock-tree cells after completing clock tree
synthesis (see step 10).
7. Marks the clock root, nets, cells, gating cells, and sinks as
dont_touch, dont_touch_network, and
dont_touch_placement
Note:
Physical Compiler places these attributes on all clock tree
objects, including those in don’t touch subtrees.
If you plan to do an incremental physical optimization on the clock
tree, you can prevent these attributes from being placed on the
clock tree objects. Table 2-3 lists the compile_clock_tree
options you can use for this purpose.
dont_touch -no_dont_touch
dont_touch_network -no_dont_touch_network
dont_touch_placement -no_dont_touch_placement
1. Checks for design rule violations on the root (step 1 in the clock
tree synthesis process)
2. Synthesizes and balances the buffer trees (step 2 in the clock
tree synthesis process)
3. Places and legalizes the buffers and inverters (step 3 in the clock
tree synthesis process)
During high-fanout net synthesis, Physical Compiler does not put
dont_touch and dont_touch_placement attributes on the
newly added buffers.
• Maximum skew
• Maximum insertion delay
• Wire length (and routing layers used)
• Design rule constraint violations
• Number of levels in each clock tree
• Number and area of clock instances (buffers and inverters)
Use the Physical Compiler GUI visual analysis mode to verify the
clock instance placement.
If these items are correct, you can fine-tune the clock tree synthesis
process and resynthesize the clock trees. Physical Compiler
provides the following methods to fine-tune the clock tree synthesis
process:
To resynthesize all clock trees, rerun clock tree synthesis using your
original design from Physical Compiler as input, as described in
“Reading Your Design” on page 2-6.
medium (default) Use medium effort for your initial clock tree synthesis run.
high Use high effort if medium effort does not result in suitable
DRC QOR. Using high effort improves the DRC QOR, but
might increase the number of buffers in the clock tree.
medium (default) Use medium effort for your initial clock tree synthesis run.
high Use high effort if medium effort does not result in suitable
QOR.
ultra Use ultra effort if you require further skew improvements than
the high effort results provide; however, ultra effort can result
in longer clock nets.
Note:
For best results, you must set the clock uncertainty to realistic
values before starting clock tree synthesis. For more information
about clock uncertainty, see “Validating Your Clocks” on
page 2-8.
Note:
This technique works only for gated clocks. It does not affect
results for ungated clocks.
Note:
Critical cell data is not stored in the design database.
• report_constraint
• report_timing
Use the reports to check the following parameters:
psyn_shell-t> optimize_placement
When you are satisfied with the results, save your design.
When you perform detail routing, you should first route the clock
trees, then route the rest of the design. To perform detail routing,
export the design database to a stand-alone router (either Astro or a
third-party router).
After routing, read the post-route design back into Physical Compiler
to perform post-route analysis.
The write_def command updates the USE CLOCK (on clock nets)
and SOURCE TIMING (on inserted clock instances) constructs in
the DEF file.
1. Read the post-route design (in PDEF format) back into Physical
Compiler.
2. Extract the parasitics.
Use the extract_rc command to extract the RC information
from the global routed design.
3-1
Overview of Interface Logic Models
This section provides an overview of interface logic models. For
detailed information about using interface logic models with Physical
Compiler, see the chapter about interface logic models in the
Physical Compiler User Guide, Volume 1.
• The logic between the input ports and the first register
• The logic between the last register and the output ports
• The logic from the clock input port to the clock pins of the
interface registers
• The logic that loads the nets along the clock path to an interface
register (these elements are called side-load cells)
• The logic on purely combinational paths
An interface logic model does not contain logic from register-to-
register paths within the block.
Data Data
out
in
Clock
To reduce the model size, you can exclude certain ports and their
fanout or fanin logic from the model.
For a more detailed model, you can include the following logic in the
interface logic model:
• All macro cells, even those that are not on interface timing paths
Macro cells include both cells that are defined as macro cells in
the physical library and large black box cells.
1. Read and link the placed and legalized .db file for the block you
are modeling. The .db file must contain placement data and
constraints. Use the read_db and link commands.
2. Identify all clocks by using the appropriate commands, for
example, create_clock or create_generated_clock.
psyn_shell-t> identify_interface_logic
To reduce the model size, you can exclude ports from the interface
logic model. Ports that are commonly excluded include
• All macro cells, including those that are not on interface timing
paths (-keep_macros option)
• The boundary cells connected to ignored ports
(-keep_boundary_cells option)
Note:
To ensure that you generate a context-independent model, do
not specify “what if” constraints such as set_case_analysis
and set_disable_timing at the time of interface logic model
generation.
extract_ilm -verbose Reports statistics for the original design and the
interface logic model.
By default, Physical Compiler derives the keepouts when you run the
extract_ilm command. If the derived keepouts are not sufficient,
you can explicitly define the keepouts for the block. The following
sections describe these methods.
Deriving Keepouts
The extract_ilm command automatically derives the keepouts
for rectangular interface logic blocks.
Note:
You can derive keepouts automatically only for rectangular
interface logic blocks.
When you use derived keepouts, keep the following points in mind:
Defining Keepouts
Define the keepouts instead of using the derived keepouts in the
following cases:
• create_placement_keepout
• create_wiring_keepout
For detailed information about creating keepouts, see the Physical
Compiler User Guide, Volume 1.
• set_inverted_placement_keepout
• set_inverted_wiring_keepout
Reporting Keepouts
You can use the report_placement_keepout and
report_wiring_keeput commands to report on the keepouts
defined for the current design. Inverted keepouts are indicated with
an I before the keepout name.
Hierarchical Clock Tree Synthesis: Preparing for Top-Level Clock Tree Synthesis
3-10
In addition to adjusting the locations of the interface logic model
cells, the propagate_ilm command propagates the keepout
and delay information from the interface logic models to the
top-level design. By default, the propagate_ilm command
does not propagate delay information for the boundary cells. For
clock tree synthesis, include this information by specifying the
-include_all_boundary_cell_delays option.
Top-level
subtree
clk
clk_in
…
clk_out …
U1
…
TOP
For information about defining stop pins, see “Defining Stop Pins”
on page 2-22.
Note:
Remember that Physical Compiler does not optimize global
chip skew when you use interface logic models to run top-level
clock tree synthesis. Physical Compiler optimizes the skew
relevant to the top-level register interfaces.
Note:
Because the result is intended to be packed into an associative
array, the order in which each clock tree and each collection is
returned is not guaranteed.
psyn_shell-t> get_clock_tree_objects
CLK {all _sel10}
psyn_shell-t> array set clk_trees[get_clock_tree_objects]
Information: Defining new variable 'clk_trees(CLK)'. (CMD-041)
psyn_shell-t> array set clk_objs $clk_trees(CLK)
Information: Defining new variable ’clk_objs(all)’. (CMD-041)
psyn_shell-t> filter_collection $clk_objs(all) {@object_class == "net"}
{"CLK", "CTS_L0I11934_Y", "CTS_L1I11935_Y", "CTS_L1I11936_Y",
"CTS_L2I11937_Y"...}
Note:
When you enter array set commands, you might get many
CMD-041 (defining new variable) information messages. If you
do these manipulations for many clock trees, use the
suppress_message command to disable message CMD-041.
Table 4-1 describes the collection types and their associated option
names.
• ct_is_compiled
This Boolean attribute specifies whether or not the clock tree has
been compiled.
• ct_num_levels
This integer attribute specifies the number of levels in the clock
tree. The number of levels is computed as the number of levels
plus one level for the clock sinks.
• name
This string attribute contains the clock tree name, as defined by
the set_clock_tree_options command.
psyn_shell-t> get_clock_tree_attributes
ct_is_compiled -compiled
ct_num_levels -num_levels
name -name
Because you can apply the command to more than one clock tree in
one invocation, the result is an associative list that has this form:
clock_tree1 attribute_list_for_clock_tree1
clock_tree2 attribute_list_for_clock_tree2
...
Note:
Because the result is intended to be packed into an associative
array, the order in which each clock tree and each attribute is
returned is not guaranteed.
• How to update the clock tree timing after clock tree synthesis
• How to access the clock tree timing information by using clock
instance attributes
• How to generate clock tree reports
Limitation:
In the current release, the retime_clock_tree command
recognizes only global-routed nets. Any detail-routed nets are
considered to be unrouted.
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-7
Accessing Clock Tree Delay Information
Each instance in the clock tree has attributes associated with it that
allow you to access delay- and netlist-related information about the
instance. Table 4-3 lists each of these attributes and their
descriptions.
is_leaf Boolean Specifies whether the current instance drives other clock
tree instances in its fanout. The value is 1 if the current
instance does not drive other clock tree instances.
parent integer The identifier of the clock tree instance that drives the
current instance.
children list of integers List of the identifiers of the clock tree instances driven by the
current instance.
input string The name of the input pin of the current instance that is
connected to the clock tree.
output string The name of the output pin of the current instance that is
connected to the clock tree.
path_pol Boolean Specifies whether the logic between the input of the clock
tree root and the input of the current cell inverts the clock
signal. The value is 1 if the signal is not inverted.
in_rc float The RC delay from the driving output pin of the parent
instance to the input pin of the current instance.
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-8
Table 4-3 Clock Tree Instance Attributes (Continued)
Attribute Type Description
prop_r float The delay through the current instance associated with a
rising input transition on the clock tree root.
prop_f float The delay through the current instance associated with a
falling input transition on the clock tree root.
load float The lumped capacitance driven by the selected output of the
current instance.
iftrans float The input transition resulting from a falling input transition on
the clock tree root.
irtrans float The input transition resulting from a rising input transition on
the clock tree root.
oftrans float The output transition resulting from a falling input transition
on the clock tree root.
ortrans float The output transition resulting from a rising input transition
on the clock tree root.
early_fwd_r float The shortest (early) path delay between the output of the
current instance and any of the sink pins that it drives (on a
rising input transition at the clock tree root).
early_fwd_f float The shortest (early) path delay between the output of the
current instance and any of the sink pins that it drives (on a
falling input transition at the clock tree root).
late_fwd_r float The longest (late) path delay between the output of the
current instance and any of the sink pins that it drives (on a
rising input transition at the clock tree root).
late_fwd_f float The longest (late) path delay between the output of the
current instance and any of the sink pins that it drives (on a
falling input transition at the clock tree root).
end_efwd_r string The sink pin on which the early rise path is encountered.
end_efwd_f string The sink pin on which the early fall path is encountered.
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-9
Table 4-3 Clock Tree Instance Attributes (Continued)
Attribute Type Description
end_lfwd_r string The sink pin on which the late rise path is encountered.
end_lfwd_f string The sink pin on which the late fall path is encountered.
element1 attribute_list_for_element1
element2 attribute_list_for_element2
...
Note:
Because the result is intended to be packed into an associative
array, the order in which each clock tree instance and each
attribute is returned is not guaranteed.
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-10
Generating Clock Tree Reports
Use the report_clock_tree command to generate clock tree
reports. This command generates several different types of reports,
based on the specified options.
Note:
Always use report_clock_tree, rather than
report_timing -from clk, to evaluate the clock tree QOR.
The insertion delay values might differ between the two reports.
• By default, the report is generated for all clock trees in the design.
To restrict the report to specific clock trees, use the
-clock_trees option.
• Only those timing numbers that are relevant to the active edge of
the clock are reported.
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-11
The following sections describe the various clock tree reports.
By default, the clock tree report displays the maximum global skew.
In many cases, local skew (the difference in arrival times of the clock
signal at sequentially adjacent registers) is a better measure of
quality of the clock tree than global skew (the difference in arrival
times of the clock signal among all registers in a clock domain). To
report both maximum local skew and maximum global skew, set the
cts_use_local_skew variable to true.
Note:
This variable affects reporting only. During clock tree synthesis,
Physical Compiler minimizes only global skew.
Example 4-1 shows a default clock tree report that reports global
skew. Example 4-2 on page 4-22 shows a default clock tree report
that reports both local and global skew.
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-12
Example 4-1 Default Clock Tree Report (Global Skew Only)
****************************************
Report : Physical Compiler Clock Tree
Design : my_design
Version: U-2003.06-PCE3.0
Date : Tue Jun 10 23:10:41 2003
****************************************
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-13
Example 4-2 Default Clock Tree Report (Both Local and Global Skew)
****************************************
Report : Physical Compiler Clock Tree
Design : my_design
Version: U-2003.06-PCE3.0
Date : Tue Jun 10 23:10:41 2003
****************************************
Example 4-3 shows a clock tree settings report (without the default
report information).
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-14
Example 4-3 Clock Tree Settings Report
Settings for Clock Tree CLK {
Prefix : non set
Max Delay Constraint : non set
Min Delay Constraint : non set
Max Skew Constraint : non set
number_of_levels : non set
number_of_instances_per_level: non set
reference_per_level : non set
Clock Tree Nets Routing Rule : "<default>"
fanout_limit_for_route_only : non set
delay_limit_for_route_only : non set
priority : non set
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-15
Example 4-4 Clock Tree Exceptions Report
Exceptions Specified on Clock Tree CLK
Stop Pin : U1/A
Exclude Pin : REG7/CP
Float Pin : REGEN/GN {
Early Delay : 0.80000
Late Delay : 1.00000
Input Capacitance : 0.35000
}
Dont-Touch Pin (Inferred) : U2/A
Dont-Touch Pin (Inferred) : MUX1/D2
Dont-Touch Pin (Inferred) : MUX1/D3
Exclude Pin (Inferred) : MUX2/D0
Exclude Pin (Inferred) : MUX3/B
Exclude Pin (Inferred) : MUX4/B
Exclude Pin (Inferred) : MUX5/B
Exclude Pin (Inferred) : MUX6/B
}
Note:
This report does not list the design rule constraint settings. To
see the design rule constraint settings, generate a clock tree
settings report.
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-16
Example 4-5 shows a clock tree design rule violations report.
+------------+------------+------------+------------+--------+--------+------+
|input pin |input pin |preexisting |preexisting |required|actual |actual|
| |net |driver |driver net | |(rise) |(fall)|
+------------+------------+------------+------------+--------+--------+------+
|CLK |CLK | | |0.500000|44.28865| N/A|
|C | | | | | | |
|TS_L0I4279/A|CLK |CLK |CLK |0.500000|44.28865| N/A|
|C |C | | | | | |
|TS_L1I4280/A|TS_L0I4279_Y|CLK |CLK |0.500000|1.360769| N/A|
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-17
Example 4-6 Clock Tree Levels Report
-----------------------------------------------------------------------------
Level 0 Level 1 Level 2 Level 3 Level 4 Level 5
-----------------------------------------------------------------------------
No of Buffers 0 1 2 4 35 0
Buffer Used N/A clk1a27 clk1a15 clk1a15 clk1a15 N/A
No of Preexist. Cells 0 0 0 0 0 0
No of Sinks 0 0 0 0 0 712
No MaxFanout Viol. 0 0 0 0 0 0
Min driven cap 0.02815 0.05598 0.06137 0.19223 0.06122 N/A
Max driven cap 0.02815 0.05598 0.07026 0.20389 0.11033 N/A
No MaxCap Violators 0 0 0 0 0 0
No of ndrule nets 0 0 0 0 0 0
Min Rise Prop delay 0.00000 0.44340 0.21743 0.32128 0.27334 N/A
Min Fall Prop delay N/A N/A N/A N/A N/A N/A
Max Rise Prop delay 0.00000 0.44340 0.22398 0.33337 0.31117 N/A
Max Fall Prop delay N/A N/A N/A N/A N/A N/A
Min Rise Transition 0.00000 0.00011 0.02490 0.03190 0.07508 0.03437
Min Fall Transition N/A N/A N/A N/A N/A N/A
Max Rise Transition 0.00000 0.00011 0.02490 0.03481 0.07901 0.04897
Max Fall Transition N/A N/A N/A N/A N/A N/A
No MaxSlew Violators 0 0 0 0 0 0
Early Rise-Rise arrival 0.00000 0.00031 0.44395 0.66168 0.98355 1.25843
Late Rise-Rise arrival 0.00000 0.00031 0.44398 0.66850 1.00473 1.31370
Early Rise-Fall arrival N/A N/A N/A N/A N/A N/A
Late Rise-Fall arrival N/A N/A N/A N/A N/A N/A
Early Fall-Rise arrival N/A N/A N/A N/A N/A N/A
Late Fall-Rise arrival N/A N/A N/A N/A N/A N/A
Early Fall-Fall arrival 0.00000 N/A N/A N/A N/A N/A
Late Fall-Fall arrival 0.00000 N/A N/A N/A N/A N/A
In some cases the labels in the levels report differ from the
terminology used in this book. The following definitions describe
these differences.
No of Buffers
Number of instances, including both buffers and inverters
Buffer Used
Reference used
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-18
ndrule nets
Nets that use a nondefault routing rule
MaxSlew
Maximum transition time
arrival
Insertion delay
Note:
This report does not include the default clock tree report.
The report contains a block of data for each level of the clock tree.
The first line in the block describes the driving pin or cell for that level.
The objects composing that level are indented under the driving
object. The report structure for a level looks like the following:
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-19
driving_element
object1
object2
...
objectn
...
Analyzing Clock Tree Synthesis Results: Analyzing Clock Tree Timing Information
4-20
Viewing Clock Trees in the Physical Compiler GUI
This section describes the clock tree analysis capabilities of the
Physical Compiler GUI. For general information about the Physical
Compiler GUI, see the Physical Compiler User Guide. For detailed
information about the GUI, see the Physical Compiler GUI online
Help system.
% psyn_gui
• View the clock trees in visual mode (CTS > Configure Visual
Mode)
This mode is useful for analyzing the clock tree structure after
clock tree synthesis. Analyzing the structure enables you to
identify possible sources for clock tree timing problems, such as
a restrictive floorplan or the use of nonoptimal references.
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-21
When you are viewing clock trees in visual mode, opening a clock
tree hierarchy view window or executing a clock tree command,
such as get_clock_tree_objects or
report_clock_tree, causes Physical Compiler to exit visual
mode.
• View the hierarchy of the clock trees (CTS > New Clock Tree
Hierarchy View)
This mode is useful for analyzing complex clock tree structures
before or after clock tree synthesis.
When you are viewing clock trees in the clock tree hierarchy view,
invoking visual mode or executing a clock tree command, such as
get_clock_tree_objects or report_clock_tree,
causes Physical Compiler to close the clock tree hierarchy view
window.
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-22
Viewing the Clock Trees in Visual Mode
Before you can view the clock trees in visual mode, the layout view
must be active. To activate the layout view, either click in the layout
view window or click the layout view tab. Figure
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-23
To view the clock trees in visual mode,
2. Select the clock tree levels or cell types that you want displayed.
Table 4-4 describes the clock tree display choices.You must
select at least one level or cell type. To select more than one
display choice, hold down the Shift key.
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-24
Table 4-4 Clock Tree Display Choices
Partition name Description
Note:
If you have not yet synthesized the clock tree, the clock nets
are always displayed as flylines.
4. Click OK.
The Physical Compiler GUI displays the selected clock tree levels
and cell types in the layout view window.
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-25
The Visibility-Selection panel controls which objects are
displayed in the layout view window. By default, the following
clock tree objects are displayed:
- Cells
- Nets
- Ports
You can control which clock tree objects (cells, pins, or ports) are
displayed by changing the settings in the Visibility-Selection
panel. Clock tree nets are always displayed in visual mode—they
are not controlled by the Visibility-Selection panel.
To turn off the display of objects that are not in the clock tree,
deselect the Gray check box (next to the Update button in the
lower-left corner of the layout view window).
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-26
Figure 4-4 Displaying Clock Tree Levels With Nets as Global Preroutes
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-27
Figure 4-6 Displaying Clock Trees
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-28
Figure 4-7 Clock Tree Hierarchy View
The left pane of the window shows the hierarchical view of the clock
tree. The pane contains two columns: the Clock Tree column shows
the instance names at each level of the clock tree, and the Reference
column shows the reference associated with each instance. You can
resize the columns as needed. In the Clock Tree column, clock tree
instances added by Physical Compiler clock tree synthesis have the
notation NEW under the gate symbol.
The right pane of the window provides information about the fanout
of the selected clock tree object (if no object is selected, the right
pane displays information about the last selected clock tree object).
The right pane displays the following information for each cell (you
might have to use the scroll bar or resize the columns to see all of the
information):
• Cell name
• Cell type
• Clock tree exceptions set on the cell
• Fanout
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-29
• Input pin on the clock path
• Maximum input transition time
• Output pin on the clock path
• Maximum output transition time
• Maximum capacitance constraint
• Maximum fanout constraint
• Output net on the clock path
If you move the pointer to a clock tree object in the left pane, the
Physical Compiler GUI displays information about that object (as
shown in Figure 4-8).
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-30
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-31
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-32
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-33
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-34
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-35
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-36
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-37
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-38
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-39
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-40
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-41
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-42
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-43
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-44
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-45
Analyzing Clock Tree Synthesis Results: Viewing Clock Trees in the Physical Compiler GUI
4-46
Glossary GL
arrival time
The delay of the clock tree to a particular level.
Arrival time for level 1
Arrival time for level 2
GL-1
clock skew
The delta between the minimum insertion delay and the maximum
insertion delay of the clock sinks. Clock skew is constrained and
measured on a clock tree object.
clock tree object
The clock tree object is created by the
set_clock_tree_options command. It identifies the clock tree
root for Physical Compiler clock tree synthesis.
clock uncertainty
The predicted delta between the minimum insertion delay and the
maximum insertion delay of the clock sinks. Clock uncertainty is
defined for a clock object.
design rule constraints
Design rule constraints differ between the logical and physical
domains.
• logical domain: Design rule constraints specify timing
requirements that the synthesized tree must meet before further
optimization for skew and insertion delay, for example, fanout,
transition time, and capacitance.
• physical domain: Design rule constraints specify physical
requirements, such as wire spacing.
end pin
See sink.
exclude pin
A sink of a clock tree that is not considered when the clock is
buffered.
GL-2
float pin
A user-specified definition for the internal clock characteristics for
hard macros; describes the insertion delay seen from the float pin to
the sinks internal to the macro.
Hard IP
clk
A B
float
Float pin
Insertion delay = A + B
where
A is clock tree inserted
B is specified in set_clock_tree_exceptions
gated clock
A clock network that contains preexisting cells on the clock path.
hold time
The time that a signal on the data pin must remain stable after the
active clock edge; creates a minimum delay requirement for paths
leading to the data pin of the cell. Hold time is specified in the
technology library and applies to sequential cells. Hold time can be
scaled by operating conditions if the library contains scaling factors
for hold.
insertion delay
Minimum insertion delay is the shortest delay to any sink in the
design. Maximum insertion delay is the largest delay to any sink in
the design. Insertion delay is constrained and measured on a clock
tree object.
Stop pin
clk
stop
Insertion delay
GL-3
level
A single level equals one component, which can be a buffer,
inverter, multiplexer, or other logic gate. Two levels equate to two or
more components connected sequentially.
1 Level 2 Level 3 Level
root pin
The startpoint of the clock tree. Can be an output pin of a cell or an
input port of the design. Also called source.
GL-4
setup time
The time that data must remain stable before the active clock edge;
creates a maximum delay requirement for paths leading to the data
pin of the cell. Hold time is specified in the technology library and
applies to sequential cells. Setup time can be scaled by operating
conditions if the library contains scaling factors for setup.
sink
A clock tree termination pin; sometimes called end pin.
skew
See clock skew; called clock uncertainty in Design Compiler.
local skew—skew within a block
global skew—skew at the chip level
source
The startpoint of the clock tree. A clock tree can have a single
source. Also called root pin.
stage
See level.
stop pin
Modified sink of a clock tree (a pin that would not otherwise be
treated as a sink).
transition delay
Transition time of the cell’s output pin.
ungated clock
A clock network that contains no logic on the clock path (even
buffers or inverters).
GL-5
GL-6
Index
A setting 2-30
viewing 2-32
arrival time
cascaded gated clock
defined GL-1
defined GL-1
reporting 4-17
See also gated clock
attributes
check_legality command 2-7
ct_floatpin_clock_tree_name 2-24
clock latency
ct_floatpin_max_del 2-24
defined GL-1
ct_floatpin_min_del 2-24
network 2-8
ct_is_dont_touch_subtree 2-45
source 2-8
ct_is_exclude_pin 2-21
ct_is_snps_added 2-56 clock net, routing without buffering
by delay 2-37
ct_is_stop_pin 2-22
by fanout 2-36
has_cts_ba 2-45, 2-55
specifying 2-37
clock network
B errors 2-20
tracing 2-17
buffering constraints, setting 2-35
clock object
buffers
compared to clock tree object 2-11
resetting 2-25
defined GL-1
sizing 2-67
specifying 2-24 clock path
convergent 2-48
viewing 2-26
overlapping 2-51
clock root
C constraint violations on 2-15
defined 2-10
capacitance constraint, maximum
specifying 2-11
IN-1
clock sink example 4-28
default clock tree objects
tracing rules 2-17 accessing 4-2
viewing 2-18 creating 2-11
defined 2-10 defined 4-2
excluding 2-21 naming 2-11
noncritical 2-66 clock tree references
stop pin 2-22 resetting 2-25
clock source specifying 2-24
See clock root viewing 2-26
clock tree clock tree report
defining 2-11 default 4-12
removing 2-46 design rule violations 4-16
reporting 4-11 exceptions 4-15
synthesizing 2-53 generating 4-11
viewing 4-21 levels 4-17
clock tree constraints settings 4-14
buffering 2-35 structure 4-19
design rule 2-30 verbose 4-19
operating conditions 2-30 clock tree structure
routing 2-38 actual, reporting 4-19
timing settings, reporting 4-14
defined 2-34 specifying 2-10
maximum insertion delay 2-34 clock tree timing
maximum skew 2-34 default computation 4-7
minimum insertion delay 2-34 updating 4-7
priority 2-34
CMD-041 message 4-3
clock tree definition
commands
creating 2-11
check_legality 2-7
removing 2-11
compile_clock_tree 2-53
reporting 4-14
compile_physical 2-6
clock tree exception
extract_ilm 3-6
don’t touch subtrees 2-44
extract_rc 2-70, 2-72
exclude pins 2-21
get_clock_tree_delay 4-10
float pins 2-42
get_clock_tree_objects 4-2
route-only nets 2-37
identify_interface_logic 3-5
stop pins 2-22
optimize_placement 2-68
clock tree hierarchy view physopt 2-6, 2-8
defined 4-28 -incremental 2-69
displaying 4-28 propagate_ilm 3-10
IN-2
report_congestion 2-7 convergent clock path
reset_clock_tree_references 2-25 defined 2-9
route_global 2-70 synthesizing 2-48
set_clock_latency 2-8 critical cell costing 2-67
set_clock_tree_exceptions ct_floatpin_clock_tree_name attribute 2-24
-dont_touch_subtrees 2-44 ct_floatpin_max_del attribute 2-24
-exclude_pins 2-21
ct_floatpin_min_del attribute 2-24
float pin options 2-23, 2-42
ct_is_dont_touch_subtree attribute 2-45
-global_route_only_subtrees 2-37
-stop_pins 2-22 ct_is_exclude_pin attribute 2-21
set_clock_tree_options 2-11 ct_is_snps_added attribute 2-56
set_clock_tree_references 2-24 ct_is_stop_pin attribute 2-22
set_congestion_options 2-8 cts_cell_costing variable 2-67
set_delay_estimation_options 2-4 cts_iterative_optimization variable 2-29
set_disable_timing 2-18 cts_no_implicit_exclude_pins variable 2-19
set_input_delay 2-8 cts_skip_high_fanout_default_settings
set_operating_conditions 2-30 variable 2-59
set_output_delay 2-8 cts_use_all_buffers_for_refinement variable
write_def 2-71 2-54
compile_clock_tree command 2-53 cts_use_auto_convergence_subtrees variable
-clock_trees 2-53 2-49
-drc_effort 2-64 cts_use_local_skew variable, variables
-no_clock_attributes 2-56 cts_use_local_skew 4-12
-no_dont_touch 2-56
-no_dont_touch_network 2-56
-no_dont_touch_placement 2-56 D
-size_gates 2-67 data requirements 1-5
-skew_effort 2-65 DEF
compile_physical command 2-6 generating 2-71
congestion SOURCE TIMING construct 2-71
fixing 2-8 USE CLOCK construct 2-71
reporting 2-7 design rule constraints
constraints optimization effort 2-64
clock tree timing 2-34 priority 2-31
maximum insertion delay 2-34 setting 2-30
maximum skew 2-34 viewing 2-32
minimum insertion delay 2-34 violations on clock root 2-15
maximum capacitance 2-30 detail routing
maximum fanout 2-30 analyzing design after 2-72
maximum transition time 2-30 analyzing design before 2-70
third-party tool 2-71
IN-3
don’t touch subtree
attribute 2-45
F
fanout constraint, maximum
defined 2-44
setting 2-30
explicit 2-45
viewing 2-32
implicit 2-45
interface logic models 3-12 float pin
attributes 2-24
reporting 4-15
defined 2-20, 2-42
DRC
See design rule constraints reporting 4-15
setting 2-42
uses
E controlling arrival time 2-23
modelling hard macros 2-42
effort level
design rule optimization 2-64
skew optimization 2-65 G
exceptions for clock tree synthesis
gated clock
don’t touch subtree 2-44
cascaded, defined GL-1
exclude pin 2-21
defined GL-3
float pin 2-42
multilevel, defined GL-4
route-only net 2-37
unsupported constraints 2-26, 2-35, 2-36
stop pin 2-22
generated clock, tracing through 2-18
exclude pin
attribute 2-21 get_clock_tree_delays command 4-10
defined 2-20 get_clock_tree_objects command 4-2
explicit global routing
defined 2-21
specifying 2-21
implicit
defined 2-19
listing 2-19
overriding 2-19
preventing 2-19
reporting 4-15
extract_ilm command 3-6
extract_rc command 2-70, 2-72
extract2plib utility 2-5
extraction parameters
in RC computations 2-40
required in physical library 2-4
IN-4
I defined 4-12
identify_interface_logic command 3-5
input delay, specifying 2-8 M
insertion delay maximum capacitance
maximum setting 2-30
clock network latency 2-8 violation on clock tree root 2-15
specifying 2-34
maximum fanout, setting 2-30
minimum, specifying 2-34
maximum insertion delay
interclock skew, balancing 2-52
setting 2-34
interface logic model violation on clock tree root 2-15
adding logic to 3-6
maximum skew, setting 2-34
creating 3-4
maximum transition time
defined 3-2
setting 2-30
don’t touch subtrees 3-12
violation on clock tree root 2-15
extracting 3-6
keepouts messages, CMD-041 4-3
defining 3-9 minimum conditions, specifying 2-4
deriving 3-8 minimum insertion delay, setting 2-34
reporting 3-9 minimum scaling factor, setting 2-4
reading 3-10 multilevel gated clock
reducing size of 3-5 defined GL-4
interface logic models See also gated clock
keepouts
propagating 3-10
interface logic, defined 3-3 N
inverters naming style, clock tree objects 2-11
resetting 2-25 noncritical sink 2-66
specifying 2-24 noncritical subtrees
viewing 2-26 ignoring 2-66
iterative optimization, defined 2-29 reporting timing in 2-66
L O
legalizing operating conditions, setting 2-30
clock buffers 2-54 optimize_placement command 2-68
critical cells 2-67 output delay, specifying 2-8
nonclock buffers 2-57 overlapping clock path
license requirements 1-5 defined 2-9
local skew synthesizing 2-51
IN-5
P default 2-38
setting 2-38
physical optimization
routing rule
after clock tree synthesis 2-55, 2-69
default 2-39
fixing congestion 2-8
nondefault
incremental 2-69
defined 2-39
initial 2-6
reporting 2-40
timing budget for 2-8
specifying 2-39
physopt command 2-6, 2-8 wide wire, specifying 2-39
-incremental 2-69
post-route design, analyzing 2-72
propagate_ilm command 3-10 S
scan enable network, synthesizing 2-2
See also high-fanout net
R selective skew balancing 2-66
RC coefficients set_clock_latency command 2-8
capacitance-based 2-41
set_clock_tree_exceptions command
extraction-based 2-40 -dont_touch_subtrees 2-44
references, clock tree -exclude_pins 2-21
See clock tree references
float pin options 2-23, 2-42
remove_clock_tree_options command 2-11 -global_route_only_subtrees 2-37
report, clock tree, generating 4-11 -stop_pins 2-22
report_congestion command 2-7 set_clock_tree_options command 2-11
requirements, clock tree synthesis -clock_tree_name 2-11
data 1-5 -delay_limit_for_route_only_clock_net 2-37
license 1-5 -fanout_limit_for_route_only_clock_net 2-36
reset network, synthesizing 2-2 -high_fanout 2-57
See also high-fanout net -ignore_noncritical_sinks 2-66
reset_clock_tree_references command 2-25 -layer_list 2-38
root -max_delay 2-34
See clock root -max_skew 2-34
routability -min_delay 2-34
after clock tree synthesis 2-70 -number_of_instances_per_level 2-36
before clock tree synthesis 2-7 -number_of_levels 2-35
route_global command 2-70 -prefix 2-11
route-only clock nets -priority 2-16, 2-29
by delay 2-37 -reference_per_level 2-25
by fanout 2-36 -root 2-11
specifying 2-37 -routing_rule 2-39
routing constraints, setting 2-38 -timing_arc 2-13
routing layers -use_default_routing_for_sinks 2-39
IN-6
set_clock_tree_references command 2-24 T
set_congestion_options command 2-8
third-party router, interface 2-71
set_delay_estimation_options command 2-4
timing constraints, clock tree 2-34
set_disable_timing command 2-18 maximum insertion delay 2-34
set_input_delay command 2-8 maximum skew 2-34
set_operating_conditions command 2-30 minimum insertion delay 2-34
set_output_delay command 2-8 transition time constraint, maximum
sink setting 2-30
See clock sink viewing 2-32
sizing buffers 2-67 turnaround time 1-5
skew
global 2-34
local 4-12 U
specifying maximum 2-34 ungated clock, defined GL-5
skew balancing
between clocks 2-52
selective, within a clock 2-66 V
skew optimization, effort levels 2-65 variables
source cts_cell_costing 2-67
See clock root cts_iterative_optimization 2-29
stop pin cts_no_implicit_exclude_pins 2-19
attribute 2-22 cts_skip_high_fanout_default_settings 2-59
defined 2-20 cts_use_all_buffers_for_refinement 2-54
reporting 4-15 cts_use_auto_convergence_subtrees 2-49
specifying 2-22
structure, specifying for clock tree 2-10
synthesizing W
clock trees wide wires
command 2-53 reporting 2-40
fine-tuning 2-64 specifying 2-39
process 2-53 wire type
high-fanout nets 2-58 default 2-39
specifying 2-39
write_def command 2-71
IN-7