Professional Documents
Culture Documents
1. CCOpt script
2. Clock Tree Debugger (CTD) before CTS
3. Cluster CTS
4. Trial CTS
5. CCOpt
6. Worst chain report after ccopt_design with the RAK
Note: RAK Testcase Database can be downloaded from the 'Attachments' section at the
bottom of this PDF. This RAK can also be searched on the support portal i.e.
https://support.cadence.com, using the ‘Title’ of the RAK.
Design
runLab.tcl
config.tcl
ccopt.spec
3 clocks
Period: 8ns
div_clk
clk_div_out_mux
Period: 4ns
A
Y
B
Period: 8ns
source ./DATA/prects.enc
source ./SCRIPTS/config.tcl Go to next slide
create_ccopt_clock_tree_spec -file ccopt.spec; Go to the slide after next
source ./ccopt.spec
set_ccopt_property -delay_corner slow_max -net_type trunk target_max_trans 150ps
set_ccopt_property -delay_corner fast_min -net_type trunk target_max_trans 150ps
set_ccopt_property -delay_corner slow_max -net_type leaf target_max_trans 150ps
set_ccopt_property -delay_corner fast_min -net_type leaf target_max_trans 150ps
set_ccopt_property -skew_group div_clk/functional_func_slow_max -delay_corner fast_min target_skew 200ps
set_ccopt_property -skew_group my_clk/functional_func_slow_max -delay_corner fast_min target_skew 200ps
set_ccopt_property -skew_group test_clk/functional_func_slow_max -delay_corner fast_min target_skew 200ps
setOptMode –usefulSkewCCOpt medium; # set_ccopt_effort –medium in 15.x
ccopt_design
saveDesign ./DBS/postcts.enc
report_ccopt_worst_chain
# The following pins are on the boundary of the STA clock network
# These pins are ignore skew pins Why did ccopt extract the
pin as an ignore pin?
set_ccopt_property sink_type -pin mcore0/a0/g1626/B ignore
set_ccopt_property sink_type_reasons -pin mcore0/a0/g1626/B no_sdc_clock
is_clock_gating | false
is_clock_gating_clock | false
is_clock_gating_enable | false
is_clock_used_as_clock | false
is_clock_used_as_data | true
…
Data pin of a FF
innovus> all_fanout -from mcore0/a0/g1626/B -endpoints_only
proc0/c0/dcache0/r_reg_req/DFF/D proc0/c0/dcache0/r_reg_burst/DFF/D proc0/c0/icache0/r_reg_req/DFF/D
proc0/c0/icache0/r_reg_burst/DFF/D proc0/c0/icache0/r_reg_valid_3/DFF/D proc0/c0/icache0/r_reg_valid_2/DFF/D
proc0/c0/icache0/r_reg_valid_1/DFF/D proc0/c0/icache0/r_reg_valid_0/DFF/D proc0/cmem0/itags0/u0/id0/WE1 …
clk_div_out_mux
clk_div_reg
D Q A
Y To sync pins
^
CK B S0
DFFX1 MX2X2
mcore0/a0/g1626
clk_out_mux
CGIC_INST B To data pins
clk_en E GCK A
Y
ICG S0
B
^
CK
MX2X8
TLATNTSCAX6
clk
my_clk(4ns)
scan_clk
test_clk(8ns) tm
R R R R
Clock trees
–The transitive fanout of a root pin R Internal pins
–A sink can belong to more than one clock tree –Any pin that is not a root or a sink
IGNORE
IGNORE
STOP
Sink pins
–The terminal points for a clock signal
–Sequential element pins
–Stop pins
–Ignore pins
Ignore pins can be defined for just selected skew groups (skew group-specific Stop pin
ignore pins) or
Ignore Pin
– Use the modify_ccopt_skew_group command
– After creating skew_groups one can add ignore pin by using
modify_ccopt_skew_group
create_ccopt_clock_tree -name test_clk -source scan_clk -no_skew_group Define clock tree on scan_clk
# This is a -constrains "none" skew group (reporting only) for generated clock:div_clk in timing_config:functional_func_slow_max (sdc
DATA/leon_func_slow_max_postcts.sdc)
# because it corresponds to a generated clock that is synchronous to its master clock and will balanced as part of the skew group
corresponding to one of its master clocks.
# immediate master: clock:my_clk in timing_config functional_func_slow_max
# balancing master: clock:my_clk in timing_config functional_func_slow_max
# ultimate master: clock:my_clk in timing_config functional_func_slow_max Define skew group on
create_ccopt_skew_group -name div_clk/functional_func_slow_max -sources clk_div_reg/Q -auto_sinks clk_div_reg/Q
set_ccopt_property include_source_latency -skew_group div_clk/functional_func_slow_max true
set_ccopt_property constrains -skew_group div_clk/functional_func_slow_max none
set_ccopt_property extracted_from_clock_name -skew_group div_clk/functional_func_slow_max div_clk
set_ccopt_property extracted_from_constraint_mode_name -skew_group div_clk/functional_func_slow_max functional_func_slow_max
set_ccopt_property extracted_from_delay_corners -skew_group div_clk/functional_func_slow_max {slow_max fast_min}
# This is a -constrains "none" skew group (reporting only) for generated clock:div_clk in
timing_config:functional_func_slow_max (sdc DATA/leon_func_slow_max_postcts.sdc)
# because it corresponds to a generated clock that is synchronous to its master clock and will balanced as
part of the skew group corresponding to one of its master clocks.
# immediate master: clock:my_clk in timing_config functional_func_slow_max
# balancing master: clock:my_clk in timing_config functional_func_slow_max
# ultimate master: clock:my_clk in timing_config functional_func_slow_max
create_ccopt_skew_group -name div_clk/functional_func_slow_max -sources clk_div_reg/Q -auto_sinks
set_ccopt_property include_source_latency -skew_group div_clk/functional_func_slow_max true
set_ccopt_property constrains
set_ccopt_property constrains -skew_group
-skew_group div_clk/functional_func_slow_max
div_clk/functional_func_slow_max none
none
Define skew group on
clk_div_reg/Q
(reporting only)
Tracing Exception #1
Extraction traces through a clock gate
G Will automatically recognize non-integrated clock gates too
R
Tracing Exception #2
Extraction traces all paths from the parent clock to the
generated clock root – even through sequential elements
Divider
Sequential elements in the generator source path
R
Generated automatically become ignore pins
Clock
clk_div_req/Q (DFFX1)
0.0225ns
Cell type: Clock root
Full View
scan_clk
0ns
clk_div_req/CK (DFFX1) Generated clock Cell type: Clock
0.0225ns root
Cell type: Other
clk_div_req/Q (DFFX1)
0.0225ns
Cell type: Clock root
clk_div_out_mux/A
0.3321ns clk_div_out_mux/B (MX2X4)
Cell type: Mux 0.0203ns
Cell type: Mux clk_out_mux/B (MX2X4)
0.0233ns
Cell type: Mux
mcore0/a0/g1626/B (NOR2BX4)
0.5386ns
Cell type: Other sink
Cell type
Clock root
Clock gate
Clock sink
• Flop pin
• Latch pin
• RAM pin
• Enable latch pin
• ILM stop pin
• Other sink
- I/O pins
- combinational logic pins (ignored pins)
- macros with no library definition (i.e. black box macros).
Clock driver
• Buffer
• Inverter
Clock balancing
Clock delay
Clock logic
• AND
• Mux
Other
23 © 2017 Cadence Design Systems, Inc. All Rights Reserved Worldwide.
3. Cluster CTS
Fixing DRV fixing -> buffers added with some naming rules *ccl* and *ccd*
Removing unnecessary buffering and minimizing Insertion Delay
G G
2 2
Cluster CTS
0 1 0 1 0 1 0 1
G
G
Ignore pin G
G
G
G G G
G G G G G
restore ./DBS/postcts.cluster.enc
On GUI, please select Clock->CCOpt Clock Tree Debugger…
mcore0/a0/CTS_ccd_BUF_div_clk_G0_L2_2/A
(CLKBUFX20)
0.5636ns
CGIC_INST/CK (TLATNTSCAX6) Cell type: Buffer
0.0153ns
Cell type: Clock gate
mcore0/a0/g1626/B (NOR2BX4)
clk_out_mux/A (MX2X4) 0.6634ns
0.2748ns Cell type: Other sink
Cell type: Mux
Buffers added
CTS_ccl_BUF_my_clk_G1_L3_1/A (CLKBUFX20)
to meet DRV 0.4718ns
clk_div_out_mux
clk_div_reg
D Q A
Y To sync pins
^
CK B
DFFX1 MX2X2
mcore0/a0/CTS_ccd_BUF_div_clk_G0_L2_2
clk_out_mux
CGIC_INST mcore0/a0/g1626
clk_en E GCK A CLKBUF20 To data pins
Y B
ICG
B
^
CK
MX2X8
TLATNTSCAX6
clk
my_clk(4ns)
scan_clk
test_clk(8ns)
./LOGS/runCluster.log
Primary reporting skew group is skew_group my_clk/functional_func_slow_max with 11537 clock sinks.
--------------------------------------------------------------
Layer Via Cell Res. Cap. RC Top of Stack
Range (Ohm) (fF) (fs) Only
--------------------------------------------------------------
M1-M2 VIA12_1C_H 8.860 0.010 0.089 false
M2-M3 VIA23_1C_V 8.860 0.009 0.076 false
M3-M4 VIA34_1C_H 8.860 0.009 0.076 false
M4-M5 VIA45_1C_H 8.860 0.009 0.076 false
M5-M6 VIA5_0_VH 8.860 0.010 0.091 false
M6-M7 VIA6_0_HV 8.860 0.070 0.621 false
M7-M8 VIA7_0_VH 8.860 0.070 0.621 false
M8-M9 VIA8_0_VH 0.376 0.127 0.048 false
--------------------------------------------------------------
…
Synthesizing clock trees...
Preparing To Balance...
…
Summary of the merge of duplicate siblings
----------------------------------------------------------
Description Number of occurrences
----------------------------------------------------------
Total clock gates 36
Globally unique enables 34
Potentially mergeable clock gates 2
Actually merged clock gates 0
----------------------------------------------------------
-----------------------------------------------------
Description Number of occurrences
-----------------------------------------------------
Total clock logics 2
Actually merged clock logics 0
-----------------------------------------------------
--------------------------------------------------------
Cannot merge reason Number of occurrences
--------------------------------------------------------
ClockGateMergingDisabledOnTree 2
ClockLogicMergingDisabledOnTree 2
--------------------------------------------------------
…
Preparing To Balance done. (took cpu=0:00:00.9 real=0:00:00.6)
CCOpt::Phase::Clustering...
Stage::DRV Fixing...
Clustering...
Clock DAG stats before clustering:
cell counts : b=0, i=0, icg=36, nicg=0, l=2, total=38
cell areas : b=0.000um^2, i=0.000um^2, icg=541.728um^2, nicg=0.000um^2, l=11.628um^2, total=553.356um^2
Clock DAG library cell distribution before clustering {count}:
ICGs: TLATNTSCAX20: 36
Logics: MX2X8: 2
Computing max distances from locked parents...
Computing distance_from_locked_parent_restrictions for 0 nodes driven by 0 locked parents
Computing max distances from locked parents done.
Clustering clock_tree test_clk...
…
Clustering clock_tree test_clk done.
Clustering clock_tree my_clk...
Clustering clock_tree div_clk...
Clustering clock_tree div_clk done.
Clustering clock_tree my_clk done.
Clock DAG stats after bottom-up phase:
cell counts : b=147, i=0, icg=36, nicg=0, l=2, total=185
cell areas : b=1121.760um^2, i=0.000um^2, icg=332.082um^2, nicg=0.000um^2, l=11.628um^2, total=1465.470um^2
Clock DAG library cell distribution after bottom-up phase {count}:
Bufs: CLKBUFX20: 97 CLKBUFX16: 42 CLKBUFX12: 6 CLKBUFX8: 2
ICGs: TLATNTSCAX20: 8 TLATNTSCAX16: 1 TLATNTSCAX12: 1 TLATNTSCAX8: 2 TLATNTSCAX6: 6 TLATNTSCAX4: 1 TLATNTSCAX3: 3 TLATNTSCAX2: 14
Logics: MX2X8: 2
Legalizing clock trees...
Resynthesising clock tree into netlist...
Reset timing graph...
Reset timing graph done.
Resynthesising clock tree into netlist done.
Leaving CCOpt scope - RefinePlacement...
*** Starting refinePlace (0:01:01 mem=1275.8M) ***
…
Runtime: CPU: 0:00:01.6 REAL: 0:00:01.0 MEM: 1275.8MB
*** Finished refinePlace (0:01:03 mem=1275.8M) ***
Leaving CCOpt scope - RefinePlacement done. (took cpu=0:00:02.6 real=0:00:02.1)
…
Post-Clustering Statistics Report
=================================
Fanout Statistics:
=================================
Fanout Statistics:
-----------------------------------------------------------------------------------------------------------
Net Type Count Mean Min. Max. Std. Dev. Fanout
Fanout Fanout Fanout Fanout Distribution
-----------------------------------------------------------------------------------------------------------
Trunk 34 5.618 1 22 4.736 {25 <= 8.400, 8 <= 16.800, 1 <= 25.200}
Leaf 156 73.955 1 100 35.453 {36 <= 39.600, 21 <= 79.200, 99 <= 118.800}
-----------------------------------------------------------------------------------------------------------
-------------------------------------------------------------
Net Type Clusters Clusters Capacitance Transition
Tried Failed Failures Failures
-------------------------------------------------------------
Trunk 58 8 5 8
Leaf 1141 53 18 53
-------------------------------------------------------------
…
restore ./DBS/postcts.trial.enc
On GUI, please select Clock->CCOpt Clock Tree Debugger…
CGIC_INST/CK (TLATNTSCAX6)
0.0153ns
Cell type: Clock gate
clk_out_mux/A (MX2X4)
0.2748ns
Cell type: Mux
mcore0/a0/CTS_ccd_BUF_div_clk_G0_L2_1/A (CLKBUFX20)
CTS_ccl_BUF_CLOCK_NODE_UID_A34477/A
(CLKBUFX12) 0.57515ns
Virtua
l
delay
Virtual Balancing
G
G 2
2
0 1 0 1 0 1
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000uvJTEAY&pageName=ArticleContent&sq=005d0000001T44zAAC_20171811598
+-----------------------------------------
| Instance
|
|-----------------------------------------
Level of Clock Gating Cells
Existing Cells | clk_I_CLOCK_BUF
| CTS_ccl_BUF_clk_G0_L2_1
| CTS_ccl_BUF_clk_G0_L3_1
| CTS_ccl_BUF_clk_G0_L4_1
Existing Cells | igp_ICG_CELL_0_U0
| CTS_ccl_BUF_clk_G1_L6_1
| CTS_ccl_BUF_clk_G1_L7_1
| CTS_ccl_BUF_clk_G1_L8_2
| CTS_ccl_BUF_clk_G1_L9_3
| CTS_cdb_BUF_clk_G1_L10_7
| CTS_ccl_BUF_clk_G1_L11_18
| CTS_cfo_BUF_clk_G1_L12_60
| CTS_ccl_BUF_clk_G1_L13_151
| CTS_cdb_BUF_clk_G1_L14_287
| CTS_ccl_BUF_clk_G1_L15_57
Existing Cells | cp_reg_ff_ | CK ^ -> Q ^
Runtime Summary:
================
--------------------------------------------------------------------------------------------------------
wall % time children called name
--------------------------------------------------------------------------------------------------------
136.63 100.00 136.63 0
136.63 100.00 136.08 1 Runtime
0.45 0.33 0.45 1 CCOpt::Phase::Initialization
0.45 0.33 0.45 1 Check Prerequisites
0.45 0.33 0.00 1 Leaving CCOpt scope - CheckPlace
4.08 2.99 0.00 1 Leaving CCOpt scope - optDesignGlobalRouteStep
4.75 3.48 0.00 1 Validating CTS configuration
0.57 0.42 0.00 1 Preparing To Balance
102.65 75.13 102.65 1 CCOpt::Phase::Clustering
40.52 29.66 34.61 1 Stage::DRV Fixing
29.81 21.82 2.07 1 Clustering
2.07 1.51 0.00 1 Leaving CCOpt scope - RefinePlacement
1.30 0.95 0.00 1 Leaving CCOpt scope
2.38 1.74 0.00 1 Fixing clock tree slew time and max cap violations
1.12 0.82 0.00 1 Fixing clock tree slew time and max cap violations - detailed pass
62.12 45.47 62.00 1 Stage::Insertion Delay Reduction
0.89 0.65 0.00 1 Removing unnecessary root buffering
0.73 0.54 0.00 1 Removing unconstrained drivers
1.11 0.81 0.00 1 Reducing insertion delay 1
2.50 1.83 0.00 1 Removing longest path buffering
56.76 41.55 0.00 1 Reducing insertion delay 2
11.72 8.58 5.24 1 CCOpt::Phase::Implementation
1.27 0.93 0.00 1 Leaving CCOpt scope
3.97 2.91 0.00 1 Adding trial balancing virtual delays
11.86 8.68 0.00 1 Tidy Up And Update Timing
--------------------------------------------------------------------------------------------------------
./LOGS/runTrial.log
Clock DAG library cell distribution after 'Adding trial balancing virtual delays' {count}:
Bufs: CLKBUFX20: 99 CLKBUFX16: 39 CLKBUFX12: 6 CLKBUFX8: 2
ICGs: TLATNTSCAX20: 3 TLATNTSCAX16: 2 TLATNTSCAX12: 1 TLATNTSCAX8: 3 TLATNTSCAX6: 8 TLATNTSCAX4: 2
TLATNTSCAX3: 3 TLATNTSCAX2: 14
Logics: MX2X8: 1 MX2X4: 1
Primary reporting skew group after 'Adding trial balancing virtual delays':
skew_group my_clk/functional_func_slow_max: insertion delay [min=1.076, max=1.117, avg=1.110, sd=0.015], skew [0.040 vs 0.200,
100% {1.076, 1.117}] (wid=0.065 ws=0.044) (gid=1.085 gs=0.056)
Skew group summary after 'Adding trial balancing virtual delays':
skew_group my_clk/functional_func_slow_max: insertion delay [min=1.076, max=1.117, avg=1.110, sd=0.015], skew [0.040 vs 0.200,
100% {1.076, 1.117}] (wid=0.065 ws=0.044) (gid=1.085 gs=0.056)
skew_group test_clk/functional_func_slow_max: insertion delay [min=0.865, max=0.865, avg=0.865, sd=0.000], skew [0.000 vs 0.200,
100% {0.865, 0.865}] (wid=0.075 ws=0.047) (gid=0.837 gs=0.047)
Clock network insertion delays are now [0.865ns, 1.117ns] average 1.110ns std.dev 0.015ns
Legalizer calls during this step: 0 succeeded with DRC/Color checks: 0 succeeded without DRC/Color checks: 0
Adding trial balancing virtual delays done. (took cpu=0:00:03.9 real=0:00:04.0)
…
CTD
CGIC_INST/CK (TLATNTSCAX6)
0.0138ns
Cell type: Clock gate
clk_out_mux/A (MX2X1)
mcore0/a0/CTS_ccd_BUF_div_clk_G0_L3_2/A (CLKBUFX8)
0.265ns
0.6977ns
Cell type: Mux
Cell type: Buffer
mcore0/a0/g1626/B
(NOR2BX4)
0.7976ns
Cell type: Other sink
restore ./DBS/postcts.enc
proc0/cmem0/itags0/u0/CTS_csf_BUF_my_clk_G1_L8_3/A (CLKBUFX20)
1.0896ns
Cell type: Buffer
CTS_cdb_BUF_div_clk_G0_L2_1/A (CLKBUFX8)
0.5811ns
Cell type: Buffer
mcore0/ioport0/r_reg_pin1_14/CTS_csk_BUF_div_clk_G0_L6_2/A (CLKBUFX20)
1.1318ns
Cell type: Buffer
Runtime Summary:
================
--------------------------------------------------------------------------------------------------------
wall % time children called name
--------------------------------------------------------------------------------------------------------
691.98 100.00 691.98 0
691.98 100.00 691.86 1 Runtime
3.27 0.47 3.27 1 CCOpt::Phase::Initialization
3.27 0.47 3.27 1 Check Prerequisites
0.85 0.12 0.00 1 Leaving CCOpt scope - CheckPlace
2.42 0.35 0.00 1 Validating CTS configuration
688.59 99.51 431.12 1 External::optDesign
2.96 0.43 0.00 3 Validating CTS configuration
4.93 0.71 0.00 2 Preparing To Balance
83.13 12.01 83.13 1 CCOpt::Phase::Clustering
43.34 6.26 36.57 1 Stage::DRV Fixing
31.95 4.62 2.16 1 Clustering
2.16 0.31 0.00 1 Leaving CCOpt scope - RefinePlacement
1.34 0.19 0.00 1 Leaving CCOpt scope
2.14 0.31 0.00 1 Fixing clock tree slew time and max cap violations
1.14 0.17 0.00 1 Fixing clock tree slew time and max cap violations - detailed pass
39.79 5.75 39.67 1 Stage::Insertion Delay Reduction
0.75 0.11 0.00 1 Removing unnecessary root buffering
0.74 0.11 0.00 1 Removing unconstrained drivers
0.96 0.14 0.00 1 Reducing insertion delay 1
2.03 0.29 0.00 1 Removing longest path buffering
35.19 5.08 0.00 1 Reducing insertion delay 2
300.24 43.39 285.46 2 CCOpt::Phase::Implementation
2.61 0.38 0.00 2 Leaving CCOpt scope
34.48 4.98 0.00 5 Leaving CCOpt scope
5.37 0.78 0.00 1 Fixing clock tree slew time and max cap violations
Runtime Summary:
================
--------------------------------------------------------------------------------------------------------
wall % time children called name
--------------------------------------------------------------------------------------------------------
…
57.47 8.31 56.49 1 Stage::Balancing
18.10 2.62 0.00 1 Reducing clock tree power 1
13.35 1.93 0.00 1 Reducing clock tree power 2
15.86 2.29 14.02 1 Approximately balancing fragments step
14.02 2.03 0.00 1 Approximately balancing fragments bottom up
9.18 1.33 0.00 1 Improving fragments clock skew
1.32 0.19 0.00 1 Approximately balancing step
0.68 0.10 0.00 1 Fixing clock tree overload
5.79 0.84 0.00 1 Approximately balancing paths
62.36 9.01 62.36 1 Stage::Polishing
32.00 4.62 0.00 1 Improving clock skew
17.73 2.56 0.00 1 Reducing clock tree power 3
11.79 1.70 0.00 1 Reducing total underdelay
0.83 0.12 0.00 1 Improving insertion delay
100.85 14.57 84.10 1 Stage::Routing
2.74 0.40 0.00 1 Leaving CCOpt scope - ClockRefiner
80.06 11.57 0.00 1 Leaving CCOpt scope - NanoRouter
1.29 0.19 0.00 1 Leaving CCOpt scope
54.37 7.86 29.78 1 Stage::PostConditioning
16.31 2.36 0.00 3 Leaving CCOpt scope
3.39 0.49 0.00 1 Fixing DRVs
7.35 1.06 0.00 1 Buffering to fix DRVs
2.74 0.40 2.73 1 Refining placement
2.73 0.39 0.00 1 Leaving CCOpt scope - ClockRefiner
--------------------------------------------------------------------------------------------------------
x clk_en
| slack 2.658ns .../clk_en -> .../E (distance: 304.085um)
| delays=(launch: 0.000ns, datapath: 0.099ns, capture: -1.143ns, adjust: 3.900ns) This chain is one kind of Input
| launch no clock to Loop chain
Input
| capture clock my_clk in analysis view func_slow_max
| path group default
g CGIC_INST
| .../CK @+0.015ns constraint=(-0.000ns,+0.000ns) chosen=(-0.097ns,+0.000ns) …
| location=(503.100,402.515) slew=(launch: 0.045ns, capture: 0.032ns) | slack 0.382ns .../Q -> .../D (distance: 235.890um)
| clock gate above | delays=(launch: 0.050ns, datapath: 3.884ns, capture: -0.008ns, adjust: 3.958ns)
o proc0/cmem0/dtags0/u0/id0 | launch clock my_clk in analysis view func_slow_max
| .../CK2 @+0.716ns constraint=(-0.150ns,+0.579ns) chosen=(-0.192ns,+0.035ns) | capture clock test_clk in analysis view func_slow_max
| location=(723.635,162.785) slew=(launch: 0.132ns, capture: 0.132ns) | path group reg2reg
| slack 0.136ns .../Q1[23] -> .../D (distance: 635.040um) ,-o proc0/iu0/ex_reg_rs1data_31/DFF
| delays=(launch: 0.023ns, datapath: 3.759ns, capture: -0.040ns, adjust: 3.958ns) | | .../CK @+0.716ns constraint=(-0.096ns,+0.579ns) chosen=(-0.015ns,+0.311ns)
| launch clock my_clk in analysis view func_slow_max | | location=(497.900,393.395) slew=(launch: 0.127ns, capture: 0.127ns)
| capture clock test_clk in analysis view func_slow_max | | slack 0.587ns .../Q -> .../D (distance: 297.830um)
| path group reg2reg | | delays=(launch: 0.050ns, datapath: 3.855ns, capture: -0.009ns, adjust: 3.958ns)
o proc0/c0/dcache0/r_reg_req/DFF | | launch clock my_clk in analysis view func_slow_max
| .../CK @+0.716ns constraint=(-0.175ns,+0.579ns) chosen=(-0.079ns,+0.000ns) | | capture clock test_clk in analysis view func_slow_max
| location=(383.700,328.795) slew=(launch: 0.136ns, capture: 0.136ns) | | path group reg2reg
| slack 0.854ns .../Q -> .../D (distance: 368.320um) | o proc0/iu0/ex_reg_rs1data_23/DFF
| delays=(launch: 0.018ns, datapath: 3.127ns, capture: -0.101ns, adjust: 4.099ns) | | .../CK @+0.716ns constraint=(-0.096ns,+0.579ns) chosen=(-0.039ns,+0.150ns)
| launch clock my_clk in analysis view func_slow_max | | location=(511.900,402.325) slew=(launch: 0.127ns, capture: 0.127ns)
| capture clock test_clk in analysis view func_slow_max | | slack 0.094ns .../Q -> .../D (distance: 231.580um)
| path group reg2reg Loop | | delays=(launch: 0.049ns, datapath: 3.885ns, capture: -0.008ns, adjust: 3.958ns)
o mcore0/ahb0/r_reg_hslave_1/DFF chain | | launch clock my_clk in analysis view func_slow_max
… | | capture clock test_clk in analysis view func_slow_max
| | path group reg2reg
`-o proc0/iu0/ex_reg_rs1data_31/DFF
x clk_en
| slack 2.658ns .../clk_en -> .../E (distance: 304.085um)
| delays=(launch: 0.000ns, datapath: 0.099ns, capture: -1.143ns, adjust: 3.900ns)
| launch no clock
| capture clock my_clk in analysis view func_slow_max
| path group default
g CGIC_INST
| .../CK @+0.015ns constraint=(-0.000ns,+0.000ns) chosen=(-0.097ns,+0.000ns)
| location=(503.100,402.515) slew=(launch: 0.045ns, capture: 0.032ns)
| clock gate above
o proc0/cmem0/dtags0/u0/id0
| .../CK2 @+0.716ns constraint=(-0.150ns,+0.579ns) chosen=(-0.192ns,+0.035ns)
| location=(723.635,162.785) slew=(launch: 0.132ns, capture: 0.132ns)
| slack 0.136ns .../Q1[23] -> .../D (distance: 635.040um)
| delays=(launch: 0.023ns, datapath: 3.759ns, capture: -0.040ns, adjust: 3.958ns)
| launch clock my_clk in analysis view func_slow_max
| capture clock test_clk in analysis view func_slow_max
| path group reg2reg
o proc0/c0/dcache0/r_reg_req/DFF <-node
| .../CK @+0.716ns constraint=(-0.175ns,+0.579ns) chosen=(-0.079ns,+0.000ns) <-window info
| location=(383.700,328.795) slew=(launch: 0.136ns, capture: 0.136ns) <-sink info
| slack 0.854ns .../Q -> .../D (distance: 368.320um)
| delays=(launch: 0.018ns, datapath: 3.127ns, capture: -0.101ns, adjust: 4.099ns)
| launch clock my_clk in analysis view func_slow_max <-path info
| capture clock test_clk in analysis view func_slow_max
| path group reg2reg
o mcore0/ahb0/r_reg_hslave_1/DFF
| .../CK @+0.513ns constraint=(-0.164ns,+0.661ns) chosen=(-0.173ns,+0.038ns)
| location=(217.500,319.865) slew=(launch: 0.139ns, capture: 0.139ns)
Indicates that the scheduled delay to the clock tree sink mcore0/ahb0/r_reg_hslave_1/DFF/CK
is | slack The
0.513ns. 0.196ns .../Q delay
scheduled -> .../D (distance:
is the 505.685um)
insertion delay that CCOpt is aiming to implement for
this sink. The actual insertion delay of this particular clock tree sink (as reported by
| delays=(launch: 0.006ns, datapath: 3.706ns, capture: -0.044ns, adjust: 3.951ns)
report_timing and CTD) may well differ from the scheduled delay, but will hopefully be close.
@ indicates
| the parent node clock
launch of thediv_clk
fragment which hasview
in analysis the func_slow_max
sink.
o proc0/iu0/ex_reg_rs1data_1/DFF
| .../CK @+0.716ns constraint=(-0.091ns,+0.579ns) chosen=(-0.016ns,+0.020ns)
| location=(475.900,439.755) slew=(launch: 0.127ns, capture: 0.127ns)
| *WNS* 0.007ns .../Q -> .../D (distance: 297.740um)
| delays=(launch: 0.050ns, datapath: 3.892ns, capture: -0.008ns, adjust: 3.958ns)
| launch clock my_clk in analysis view func_slow_max
| capture clock test_clk in analysis view func_slow_max
| path group reg2reg
o proc0/iu0/ex_reg_rs2data_22/DFF
| .../CK @+0.716ns constraint=(-0.096ns,+0.579ns) chosen=(-0.020ns,+0.221ns)
| location=(493.900,388.265) slew=(launch: 0.127ns, capture: 0.127ns)
| From ->
slack 0.382ns .../Q CTE.../D
(report_timing)
(distance: 235.890um)
| delays=(launch: 0.050ns, datapath: 3.884ns, capture: -0.008ns, adjust: 3.958ns)
| launch clock my_clk in analysis view func_slow_max
| capture clock test_clk in analysis view func_slow_max
| path group reg2reg
,-o proc0/iu0/ex_reg_rs1data_31/DFF
| | .../CK @+0.716ns constraint=(-0.096ns,+0.579ns) chosen=(-0.015ns,+0.311ns)
| | location=(497.900,393.395) slew=(launch: 0.127ns, capture: 0.127ns)
| | slack 0.587ns .../Q -> .../D (distance: 297.830um)
| | delays=(launch: 0.050ns, datapath: 3.855ns, capture: -0.009ns, adjust: 3.958ns)
| | launch clock my_clk in analysis view func_slow_max
| | capture clock test_clk in analysis view func_slow_max
| | path group reg2reg
| o proc0/iu0/ex_reg_rs1data_23/DFF
| | .../CK @+0.716ns constraint=(-0.096ns,+0.579ns) chosen=(-0.039ns,+0.150ns)
| | location=(511.900,402.325) slew=(launch: 0.127ns, capture: 0.127ns)
| | slack 0.094ns .../Q -> .../D (distance: 231.580um)
| | delays=(launch: 0.049ns, datapath: 3.885ns, capture: -0.008ns, adjust: 3.958ns)
| | Loop launch clock my_clk in analysis view func_slow_max
chain
| | capture clock test_clk in analysis view func_slow_max
| | path group reg2reg
`-o proc0/iu0/ex_reg_rs1data_31/DFF
CK
| Instance | Arc | Net | Cell | Slew | Delay | Arrival | Required |
| | | | | | | Time | Time |
Network latency |-----------+----------+--------+-------------+-------+-------+---------+----------|
11ps
| | clk_en ^ | clk_en | | 0.004 | | 0.000 | 2.658 |
| CGIC_INST | | clk_en | TLATNTSCAX6 | 0.014 | 0.005 | 0.005 | 2.663 |
clk +----------------------------------------------------------------------------------+
Clock Rise Edge 0.000
my_clk (4ns) + Source Insertion Delay -1.155
-1.155ns = Beginpoint Arrival Time -1.155
Source latency Other End Path:
+----------------------------------------------------------------------------+
Capture= source latency + network latency | Instance | Arc | Net | Cell | Slew | Delay | Arrival | Required |
| | | | | | | Time | Time |
= -1.155+0.011 |-----------+-------+-----+-------------+-------+-------+---------+----------|
| | clk ^ | clk | | 0.004 | | -1.155 | -3.813 |
= -1.144 | CGIC_INST | | clk | TLATNTSCAX6 | 0.032 | 0.011 | -1.143 | -3.801 |
+----------------------------------------------------------------------------+
g CGIC_INST
| .../CK @+0.015ns constraint=(-0.000ns,+0.000ns) chosen=(-0.097ns,+0.000ns)
| location=(503.100,402.515) slew=(launch: 0.045ns, capture: 0.032ns)
| clock gate above
o proc0/cmem0/dtags0/u0/id0
| .../CK2 @+0.716ns constraint=(-0.150ns,+0.579ns) chosen=(-0.192ns,+0.035ns)
| location=(723.635,162.785) slew=(launch: 0.132ns, capture: 0.132ns)
| slack 0.136ns .../Q1[23] -> .../D (distance: 635.040um)
| delays=(launch: 0.023ns, datapath: 3.759ns, capture: -0.040ns, adjust: 3.958ns)
| launch clock my_clk in analysis view func_slow_max
| capture clock test_clk in analysis view func_slow_max
| path group reg2reg * Scheduled latency from clk_out_mux/Y
to proc0/cmem0/dtags0/u0/id0/CK2
o proc0/c0/dcache0/r_reg_req/DFF
| .../CK @+0.716ns constraint=(-0.175ns,+0.579ns) chosen=(-0.079ns,+0.000ns)
proc0/cmem0/dtag0/u0/id0
^
^
CK
B
clk
my_clk (4ns)
clk_out_mux
^
CGIC_INST CK2
clk_en E GCK A
ICG Y proc0/c0/dcache0/r_reg_req/DFF
B
clk
^
CK D Q
MX2X4
^
TLATNTSCAX2 CK
my_clk (4ns)
clk_div_out_mux mcore0/ahb0/r_reg_inst_22/DFF
clk_div_reg D Q
D Q A
^
Y CK
^
CK B
div_clk proc0/iu0/de_reg_inst_22/DFF
(8ns) MX2X4
proc0/iu0/RC_CG_HIER_INST27/RC_CG_INST D Q
^
E GCK CK
ICG
proc0/iu0/ex_reg_rs1data_1/DFF
^
CK
D Q
TLATNTSCAX2
^
CK
proc0/iu0/ex_reg_rs2data_22/DFF
proc0/iu0/RC_CG_HIER_INST28/RC_CG_INST D Q
^
CK
E GCK
ICG proc0/iu0/ex_reg_rs1data_31/DFF
^
CK
D Q
TLATNTSCAX2
^
CK
proc0/iu0/ex_reg_rs1data_23/DFF
Fragment 1 D Q
^
CK
Fragment 2
^
CGIC_INST CK2
clk_en E GCK A
ICG Y proc0/c0/dcache0/r_reg_req/DFF
B
clk
^
CK D Q
CLKBUFX20
MX2X4 @+0.45ns
^
TLATNTSCAX6 CK
my_clk (4ns)
clk_div_out_mux mcore0/ahb0/r_reg_inst_22/DFF
clk_div_reg D Q
A @+0.35ns
^
D Q Y CK
B
^
CK
div_clk
CLKBUFX20 proc0/iu0/de_reg_inst_22/DFF
MX2X8
(8ns) proc0/iu0/RC_CG_HIER_INST27/RC_CG_INST D Q
@+0.494ns
^
E GCK CK
ICG
proc0/iu0/ex_reg_rs1data_1/DFF
^
CK
D Q
TLATNTSCAX6 @+0.538ns
^
CK
proc0/iu0/ex_reg_rs2data_22/DFF
proc0/iu0/RC_CG_HIER_INST28/RC_CG_INST
D Q
@+0.534ns
^
E GCK CK
ICG
proc0/iu0/ex_reg_rs1data_31/DFF
^
CK
D Q
TLATNTSCAX2
@+0.534ns
^
CK
proc0/iu0/ex_reg_rs1data_23/DFF
Fragment 1 D Q
@+0.534ns
^
CK
Fragment 2
^
CGIC_INST clk_out_mux CK2
clk_en E GCK A
ICG Y proc0/c0/dcache0/r_reg_req/DFF
B
clk
^
CK D Q
CLKBUFX20
MX2X4 @+0.645ns
^
TLATNTSCAX6 CK
my_clk (4ns)
clk_div_out_mux mcore0/ahb0/r_reg_inst_22/DFF
clk_div_reg D Q
D Q A @+0.503ns
^
Y CK
^
CK B
div_clk
CLKBUFX20 proc0/iu0/de_reg_inst_22/DFF
MX2X8
(8ns) D Q
proc0/iu0/RC_CG_HIER_INST27/RC_CG_INST
@+0.646ns
^
E GCK CK
ICG
proc0/iu0/ex_reg_rs1data_1/DFF
^
CK
D Q
TLATNTSCAX6 @+0.646ns
^
CK
proc0/iu0/ex_reg_rs2data_22/DFF
proc0/iu0/RC_CG_HIER_INST28/RC_CG_INST D Q
@+0.646ns
^
E GCK CK
ICG proc0/iu0/ex_reg_rs1data_31/DFF
^
CK
D Q
TLATNTSCAX2
@+0.534ns
^
CK
proc0/iu0/ex_reg_rs1data_23/DFF
Fragment 1 D Q
@+0.534ns
^
CK
Fragment 2
Virtual Scheduling
^
CGIC_INST clk_out_mux CK2
chosen=(-0.192ns,+0.035ns)
clk_en E GCK A
ICG Y proc0/c0/dcache0/r_reg_req/DFF
B
clk
^
CK D Q
CLKBUFX20
MX2X4 @+0.645ns
^
TLATNTSCAX6 CK @+0.716ns constraint=(-0.175ns,+0.579ns)
chosen=(-0.079ns,+0.000ns)
my_clk (4ns)
clk_div_out_mux mcore0/ahb0/r_reg_inst_22/DFF
clk_div_reg D Q
D Q A @+0.503ns @+0.513ns constraint=(-0.164ns,+0.661ns)
^
Y CK
chosen=(-0.173ns,+0.038ns)
^
CK B
div_clk
CLKBUFX20 proc0/iu0/de_reg_inst_22/DFF
MX2X8
(8ns) D Q
proc0/iu0/RC_CG_HIER_INST27/RC_CG_INST
@+0.646ns @+0.716ns constraint=(-0.137ns,+0.579ns)
^
E GCK CK
chosen=(-0.149ns,+0.002ns)
ICG
proc0/iu0/ex_reg_rs1data_1/DFF
^
CK
D Q
TLATNTSCAX6 @+0.646ns
@+0.716ns constraint=(-0.091ns,+0.579ns)
^
CK
chosen=(-0.016ns,+0.020ns)
proc0/iu0/ex_reg_rs2data_22/DFF
proc0/iu0/RC_CG_HIER_INST28/RC_CG_INST D Q
@+0.646ns
@+0.716ns constraint=(-0.096ns,+0.579ns)
^
E GCK CK
chosen=(-0.020ns,+0.221ns)
ICG proc0/iu0/ex_reg_rs1data_31/DFF
^
CK
D Q
TLATNTSCAX2
@+0.534ns @+0.716ns constraint=(-0.096ns,+0.579ns)
^
CK
chosen=(-0.015ns,+0.311ns)
proc0/iu0/ex_reg_rs1data_23/DFF
Fragment 1 D Q
@+0.534ns
^
CK
Fragment 2 Virtual Scheduling @+0.716ns constraint=(-0.096ns,+0.579ns)
chosen=(-0.039ns,+0.150ns)
^
CGIC_INST clk_out_mux CK2
CLKBUFX20
clk_en E GCK A
ICG Y proc0/c0/dcache0/r_reg_req/DFF
B
clk
^
^
TLATNTSCAX6 CK
my_clk (4ns) CLKBUFX12
clk_div_out_mux mcore0/ahb0/r_reg_inst_22/DFF
clk_div_reg D Q
D Q A @+0.551ns
^
Y CK
^
CK B
div_clk
CLKBUFX20 proc0/iu0/de_reg_inst_22/DFF
MX2X8
(8ns) D Q
proc0/iu0/RC_CG_HIER_INST27/RC_CG_INST
@+0.695ns
^
E GCK CK
ICG
proc0/iu0/ex_reg_rs1data_1/DFF
^
CK
D Q
TLATNTSCAX8 @+0.731ns
^
CK
proc0/iu0/ex_reg_rs2data_22/DFF
proc0/iu0/RC_CG_HIER_INST28/RC_CG_INST D Q
@+0.731ns
^
E GCK CK
ICG
proc0/iu0/ex_reg_rs1data_31/DFF
^
CK
D Q
TLATNTSCAX16
^
@+0.731ns CK
proc0/iu0/ex_reg_rs1data_23/DFF
Fragment 1 D Q
^
CK
Fragment 2 @+0.73ns