Visible to Intel only — GUID: gdw1625069500756
Ixiasoft
Visible to Intel only — GUID: gdw1625069500756
Ixiasoft
3.6.5.7. Constraining CDC Paths
It is essential to apply timing constraints to the multibit clock domain crossing (CDC) paths in your design. You can use the following constraints to constrain CDC paths:
Constraints | Description |
---|---|
set_false_path set_clock_group -asynchronous |
Both constraints prevent the Compiler from optimizing slack between asynchronous domain crossings. set_clock_group is the most aggressive constraint.
|
set_max_skew | Sets a bound on the allowable skew between different bus bits.
|
set_net_delay -max set_data_delay |
Sets a bound on the allowable datapath delay on any bit of a bus transfer.
|
The following shows example constraints for a clock domain crossing between data_a in clock domain clk_a, and data_b in clock domain clk_b:
create_clock -name clk_a -period 4.000 [get_ports {clk_a}]
create_clock -name clk_b -period 4.500 [get_ports {clk_b}]
set_clock_groups -asynchronous -group [get_clocks {clk_a}] -group \
[get_clocks {clk_b}]
set_net_delay -from [get_registers {data_a[*]}] -to [get_registers \
{data_b[*]}] -max -get_value_from_clock_period \
dst_clock_period -value_multiplier 0.8
set_max_skew -from [get_keepers {data_a[*]}] -to [get_keepers \
{data_b[*]}] -get_skew_value_from_clock_period min_clock_period \
-skew_value_multiplier 0.8
The following examples show applying set_false_path for a design that contains a DCFIFO block to avoid timing failures in the synchronization registers. These examples are for constraining single-bit synchronizer CDC paths:
- For paths crossing from the write into the read domain, apply a false path assignment between registers delayed_wrptr_g and rs_dgwp:
set_false_path -from [get_registers {*dcfifo*delayed_wrptr_g[*]}] \ -to [get_registers {*dcfifo*rs_dgwp*}]
- For paths crossing from the read into the write domain, apply a false path assignment between registers rdptr_g and ws_dgrp:
set_false_path -from [get_registers {*dcfifo*rdptr_g[*]}] \ -to [get_registers {*dcfifo*ws_dgrp*}]