Distributing the clock with minimal skew
Clock must reach all flip-flops at nearly the same time.
| Term | Definition |
|---|---|
| Clock Source | Origin of clock (PLL, input pin) |
| Clock Sink | Destination (flip-flop clock pins) |
| Insertion Delay | Time from source to sink |
| Skew | Difference in arrival times between sinks |
| Latency | Average delay from source to sinks |
Hold time requirement:
Tcq + Tcomb > Thold + Tskew
If skew is large → hold violations!
Setup time:
Tcq + Tcomb + Tsetup < Tperiod + Tskew
Positive skew helps setup (data has more time)
Special cells designed for clock trees:
| Property | Clock Buffer | Regular Buffer |
|---|---|---|
| Drive strength | High | Various |
| Balanced rise/fall | Yes | Not always |
| Low jitter | Yes | Not optimized |
# Clock tree specification (Innovus)
create_ccopt_clock_tree_spec
set_ccopt_property -clock_tree clk \
-target_skew 50ps \
-target_max_trans 100ps \
-buffer_cells {CLKBUF_X8 CLKBUF_X16}
# Clock routing rules
set_ccopt_property -routing_rule clk_routing_rule
-preferred_layers {M4 M5}
-width 0.2
-spacing 0.2
Clock nets use wider wires and more spacing for reliability.
Sometimes intentional skew helps timing!
# Pre-CTS checks
checkClockTree
# Run CTS
ccopt_design
# Or step by step:
ccopt_design -cts # Build tree
ccopt_design -hold # Fix hold violations
# Reports
report_ccopt_clock_trees
report_ccopt_skew_groups
# Check quality
reportClockTree -summary
After CTS, clock is fixed. Now optimize data paths:
# Post-CTS optimization
optDesign -postCTS
# Fix hold violations
optDesign -postCTS -hold
# Incremental optimization
optDesign -postCTS -incr
| Metric | Good Target |
|---|---|
| Clock skew | < 100ps (advanced nodes) |
| Max insertion delay | Depends on clock period |
| Buffer count | Minimize (power) |
| Hold violations | 0 (after fixing) |
| Concept | Key Point |
|---|---|
| Skew | Difference in clock arrival times |
| Latency | Delay from source to sinks |
| CTS goal | Minimize skew, balance tree |
| NDR | Wider wires for clock nets |
| Useful skew | Intentional skew for timing |