timing: model SISO and MIMO BUFGMUX clocks
Create generated clock copies on the shared radio BUFGMUX output and mark the full-rate SISO and divide-by-two MIMO modes logically exclusive. This prevents static timing from attempting impossible cross-mode hold fixes while retaining valid timing relationships outside the shared clock tree.
This commit is contained in:
+34
-1
@@ -175,11 +175,44 @@ set_property -dict {PACKAGE_PIN J10 IOSTANDARD LVCMOS33} [get_ports tx_enable2]
|
||||
create_clock -period 10.000 -name IFCLK [get_ports IFCLK]
|
||||
create_clock -period 16.276 -name codec_data_clk_p [get_ports codec_data_clk_p]
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Radio clock BUFGMUX modes
|
||||
#
|
||||
# Vivado 2026.1 inferred these constraints with:
|
||||
# write_inferred_xdc -excl_clocks
|
||||
#
|
||||
# The radio clock tree can run from either:
|
||||
# I0 = codec_data_clk_p (full-rate / SISO)
|
||||
# I1 = rx_clk_mimo_bufr (divide-by-2 / MIMO)
|
||||
#
|
||||
# These two modes are mutually exclusive only downstream of BUFGMUX_inst.
|
||||
# Keep their upstream interaction intact.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
create_generated_clock \
|
||||
-name codec_data_clk_p_Gen \
|
||||
-source [get_pins b200_io_i0/BUFGMUX_inst/I0] \
|
||||
-add \
|
||||
-master_clock codec_data_clk_p \
|
||||
-divide_by 1 \
|
||||
[get_pins b200_io_i0/BUFGMUX_inst/O]
|
||||
|
||||
create_generated_clock \
|
||||
-name rx_clk_mimo_bufr_Gen \
|
||||
-source [get_pins b200_io_i0/BUFGMUX_inst/I1] \
|
||||
-add \
|
||||
-master_clock [get_clocks -of [get_pins b200_io_i0/BUFGMUX_inst/I1] -filter {IS_GENERATED}] \
|
||||
-divide_by 1 \
|
||||
[get_pins b200_io_i0/BUFGMUX_inst/O]
|
||||
|
||||
set_clock_groups \
|
||||
-logically_exclusive \
|
||||
-group [get_clocks -include_generated_clocks {codec_data_clk_p_Gen}] \
|
||||
-group [get_clocks -include_generated_clocks {rx_clk_mimo_bufr_Gen}]
|
||||
|
||||
set_false_path -from [get_clocks -of_objects [get_pins gen_clks/inst/mmcm_adv_inst/CLKOUT1]] -to [get_clocks codec_data_clk_p]
|
||||
set_false_path -from [get_clocks -of_objects [get_pins gen_clks/inst/mmcm_adv_inst/CLKOUT1]] -to [get_clocks -of_objects [get_pins b200_io_i0/BUFR_inst/O]]
|
||||
set_false_path -from [get_clocks codec_data_clk_p] -to [get_clocks -of_objects [get_pins gen_clks/inst/mmcm_adv_inst/CLKOUT1]]
|
||||
set_false_path -from [get_clocks -of_objects [get_pins b200_io_i0/BUFR_inst/O]] -to [get_clocks -of_objects [get_pins gen_clks/inst/mmcm_adv_inst/CLKOUT1]]
|
||||
|
||||
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
|
||||
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
|
||||
|
||||
Reference in New Issue
Block a user