2017-08-04 11:08:22 +00:00
|
|
|
# ***************************************************************************
|
|
|
|
# ***************************************************************************
|
|
|
|
# Copyright 2014 - 2017 (c) Analog Devices, Inc. All rights reserved.
|
|
|
|
#
|
2019-06-05 13:37:34 +00:00
|
|
|
# Each core or library found in this collection may have its own licensing terms.
|
|
|
|
# The user should keep this in in mind while exploring these cores.
|
2017-08-04 11:08:22 +00:00
|
|
|
#
|
|
|
|
# Redistribution and use in source and binary forms,
|
|
|
|
# with or without modification of this file, are permitted under the terms of either
|
|
|
|
# (at the option of the user):
|
|
|
|
#
|
|
|
|
# 1. The GNU General Public License version 2 as published by the
|
|
|
|
# Free Software Foundation, which can be found in the top level directory, or at:
|
|
|
|
# https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
|
|
|
|
#
|
|
|
|
# OR
|
|
|
|
#
|
|
|
|
# 2. An ADI specific BSD license as noted in the top level directory, or on-line at:
|
|
|
|
# https://github.com/analogdevicesinc/hdl/blob/dev/LICENSE
|
|
|
|
#
|
|
|
|
# ***************************************************************************
|
|
|
|
# ***************************************************************************
|
|
|
|
|
|
|
|
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[*]}]]
|
|
|
|
}
|
|
|
|
}
|