2023-07-06 12:08:22 +00:00
|
|
|
###############################################################################
|
|
|
|
## Copyright (C) 2017-2023 Analog Devices, Inc. All rights reserved.
|
|
|
|
### SPDX short identifier: ADIBSD
|
|
|
|
###############################################################################
|
2017-08-04 11:08:22 +00:00
|
|
|
|
|
|
|
proc util_cdc_sync_bits_constr {inst {from {}}} {
|
|
|
|
if {$from != {}} {
|
|
|
|
set_false_path \
|
|
|
|
-from [get_registers $from] \
|
|
|
|
-to [get_registers [format "%s%s" ${inst} {|cdc_sync_stage1[0]}]]
|
|
|
|
} else {
|
|
|
|
set_false_path \
|
|
|
|
-to [get_registers [format "%s%s" ${inst} {|cdc_sync_stage1[0]}]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
proc util_cdc_sync_data_constr {inst} {
|
|
|
|
util_cdc_sync_bits_constr ${inst}|sync_bits:i_sync_out ${inst}|in_toggle_d1
|
|
|
|
util_cdc_sync_bits_constr ${inst}|sync_bits:i_sync_in ${inst}|out_toggle_d1
|
|
|
|
|
|
|
|
# set_max_skew
|
|
|
|
set_false_path \
|
|
|
|
-from [get_registers [format "%s%s" ${inst} {|cdc_hold[*]}]] \
|
|
|
|
-to [get_registers [format "%s%s" ${inst} {|out_data[*]}]]
|
|
|
|
}
|
|
|
|
|
|
|
|
proc util_cdc_sync_event_constr {inst} {
|
|
|
|
util_cdc_sync_bits_constr ${inst}|sync_bits:i_sync_out ${inst}|in_toggle_d1
|
|
|
|
util_cdc_sync_bits_constr ${inst}|sync_bits:i_sync_in ${inst}|out_toggle_d1
|
|
|
|
|
|
|
|
set cdc_hold_reg [get_registers -nowarn [format "%s%s" ${inst} {|cdc_hold[*]}]]
|
|
|
|
|
|
|
|
# For a event synchronizer with one event there is no hold register
|
|
|
|
if {[get_collection_size ${cdc_hold_reg}] != 0} {
|
|
|
|
# set_max_skew
|
|
|
|
set_false_path \
|
|
|
|
-from ${cdc_hold_reg} \
|
|
|
|
-to [get_registers [format "%s%s" ${inst} {|out_event[*]}]]
|
|
|
|
}
|
|
|
|
}
|