You are on page 1of 3

How Can I Easily Report Paths Which Cross Clock Domains?

Search SolvNet

Go

submit

Advanced

SYNOPSYS.COM |FEEDBACK |SITE MAP |HELP |SIGN OUT

Documentation
HOME

Support

Downloads

Training

Methodology

My Profile

SOLVNET ARTICLE

How Can I Easily Report Paths Which Cross Clock

SAVED ARTICLES

Domains?

TAGS

None

Doc Id:
025077

Product:
PrimeTime

Last Modified:
04/08/2009

Average User Rating:


Save Article

(8)Rate Article:

Tag Article

Print

Send comment

Email

Question:
The default behavior in PrimeTime is to report timing paths according to path
groups, where the path group is
determined only by the capturing clock. I
have flops in my design which can capture from multiple clock domains such
as
in the following logic:

Figure 1: Design With Paths Crossing Clock Domains


PrimeTime will show whatever timing paths capture against CLK1 with the worst
slack. However, the paths from CLK2
to CLK1 are particularly interesting to me
because they are synchronous communication paths between the clocks. How
can I
get PrimeTime to show me the paths within each clock domain as well as the
paths between them?
Answer:

Creating Clock-to-Clock Path Groups


The group_path command can be used to create customized path groups
which break out cross-domain timing paths
into their own path groups. This
SolvNet article provides a report_clock_crossings Tcl procedure which
obtains the
clock crossings in the analysis from the
check_timing -override_defaults {clock_crossing} -verbose
command, then prints the corresponding group_path commands. The
report_clock_crossings procedure is named
as a "report" procedure,
but it's really reporting the clock crossings as a set of group_path
commands. The usage is as
follows:
pt_shell> report_clock_crossings -help
Usage:
report_clock_crossings # create path group commands for clock crossings
[-include_unconstrained]
(include unconstrained/asynchronous crossings)
Using this procedure, we can redirect these path group definition commands into
a script file:
source report_clock_crossings.tcl
report_clock_crossings > groups.tcl
The resulting path group script file might look something like this:
% cat groups.tcl
remove_path_group [get_path_groups -quiet {*_to__*}]
group_path -from [get_clocks CLK2] -to [get_clocks CLK1] -name "CLK2__to__CLK1"
The groups are named "LAUNCHCLK__to__CAPTURECLK" where the clock
names are separated by "__to__" with
double underscores.
Path groups are not created for clocks which are topologically connected but
whose paths are unconstrained through
false paths or set_clock_group
clock relationships. For designs with many clocks, blindly creating path
groups for all
possible N*(N-1) clock combinations can result in reporting
runtimes of many hours or days as PrimeTime attempts to
explore the design for
paths corresponding to every possible clock crossing. By intelligently
creating path groups only

https://solvnet.synopsys.com/retrieve/025077.html?charid=techupdate&tuid=348[8/26/2016 11:29:44 AM]

Add Tags

How Can I Easily Report Paths Which Cross Clock Domains?


for clocks which synchronously communicate, the
runtime needed to explore and report the clock crossing paths can be
reduced
to seconds.
If desired, the -include_unconstrained option can be specified to
create path groups for clocks which topologically
communicate, but are
unconstrained or asynchronous at their crossing boundary:
pt_shell> report_clock_crossings -include_unconstrained
remove_path_group [get_path_groups -quiet {*_to__*}]
group_path -from [get_clocks mrx_clk_pad_i] -to [get_clocks mtx_clk_pad_i] -name
"mrx_clk_pad_i__to__mtx_clk_pad_i"
group_path -from [get_clocks mrx_clk_pad_i] -to [get_clocks wb_clk_i] -name
"mrx_clk_pad_i__unconstrained_to__wb_clk_i" ;# unconstrained
group_path -from [get_clocks mtx_clk_pad_i] -to [get_clocks mrx_clk_pad_i] -name
"mtx_clk_pad_i__to__mrx_clk_pad_i"
group_path -from [get_clocks mtx_clk_pad_i] -to [get_clocks wb_clk_i] -name
"mtx_clk_pad_i__unconstrained_to__wb_clk_i" ;# unconstrained
group_path -from [get_clocks wb_clk_i] -to [get_clocks mrx_clk_pad_i] -name
"wb_clk_i__unconstrained_to__mrx_clk_pad_i" ;# unconstrained
group_path -from [get_clocks wb_clk_i] -to [get_clocks mtx_clk_pad_i] -name
"wb_clk_i__unconstrained_to__mtx_clk_pad_i" ;# unconstrained
Note that the path groups for these unconstrained crossings use a different
naming convention to identify them.
Once this script file has been generated, it can be sourced by the analysis
script to be used in future analyses. The
default path groups will remain
in place, but they will only contain paths completely within the clock domains.
The new
cross-domain path groups will separate out the paths between any clock
domains which communicate. These path
groups will be used by
report_timing, report_constraint, and any other commands
or scripts which understand
path groups.

Using Clock-to-Clock Path Groups


Once the path groups have been sourced and applied to the PrimeTime analysis,
there are some interesting things we
can do with them. To give a comprehensive
report of all constrained startpoint/endpoint paths crossing the clock
boundaries, we can use the following commands:
foreach_in_collection group [get_path_groups {*__to__*}] {
report_timing -group $group -start_end_pair -slack_lesser 99999 -path summary
}
To show all unconstrained crossings, there are some challenges:
We cannot directly use path groups for the unconstrained crossings, as
path groups only work to group together
constrained paths.
-start_end_pair cannot be used for unconstrained path reporting.
However, we can use the presence of the unconstrained path groups to enable
specific clock-to-clock reporting:
set timing_report_unconstrained_paths true
foreach_in_collection group [get_path_groups {*__unconstrained_to__*}] {
regexp {(.*)__unconstrained_to__(.*)} [get_object_name $group] \
dummy from_clock to_clock
echo "Unconstrained paths from $from_clock to $to_clock:"
report_timing -from [get_clocks $from_clock] -to [get_clocks $to_clock] \
-max_paths 10000 -nworst 10 -path summary
}
This may take some time, as unconstrained path reporting is expensive due to
the need to trace many paths to sort by
actual path delay instead of endpoint
slack. We can use a slight variation of these commands to look specifically
for
direct flop-to-flop synchronizer crossings (with no intermediate buffers):
set timing_report_unconstrained_paths true
foreach_in_collection group [get_path_groups {*__unconstrained_to__*}] {
regexp {(.*)__unconstrained_to__(.*)} [get_object_name $group] \
dummy from_clock to_clock
echo "Synchronizer crossings from $from_clock to $to_clock:"
set paths [get_timing_paths -from [get_clocks $from_clock] \
-to [get_clocks $to_clock] -max_paths 10000 -nworst 10]
foreach_in_collection path $paths {
if {[sizeof_collection [get_attribute $path points]] == 3} {
report_timing $path
}
}
}
To redirect the output from any of these command examples to a file, simply
paste the commands into a redirect
command as follows:
pt_shell> redirect -tee output.txt {
paste commands here
}
This can be done directly at a PrimeTime shell prompt; PrimeTime will only
execute the commands once the final
closing curly brace has been entered.
report_clock_crossings.tcl - version 1.1

Average User Rating:

(8)Rate Article:

https://solvnet.synopsys.com/retrieve/025077.html?charid=techupdate&tuid=348[8/26/2016 11:29:44 AM]

Send comment

How Can I Easily Report Paths Which Cross Clock Domains?

Save Article

Tag Article

Print

Email

Your Recently Viewed Articles

How Can I Easily Report Paths Which Cross Clock Domains?


IC Compiler GUI Demo - Hierarchical Design Planning
How Are Clock Gating Checks Inferred?
Clock Gating Methodology
Synopsys Design Constraints (SDC) for Implementation Tools
Why am I Getting UITE-461 Messages and Zero Source Latency?
Top Articles and Trainings for 2009
How Does the PrimeTime SI all_path_edges Alignment Mode Work?
Logical Correlation Analysis on Victim and Aggressor Pairs With the Same Sense
How Does the Exhaustive Path-Based Analysis Search Work?
Your Recent Searches

articles
articles 2013

2016 Synopsys, Inc. All Rights Reserved.

https://solvnet.synopsys.com/retrieve/025077.html?charid=techupdate&tuid=348[8/26/2016 11:29:44 AM]

CONTACT US

| TERMS OF USE | PRIVACY POLICY

You might also like