11# ##############################################################################
2- # # Copyright (C) 2019-2023 Analog Devices, Inc. All rights reserved.
2+ # # Copyright (C) 2019-2025 Analog Devices, Inc. All rights reserved.
33# ## SPDX short identifier: ADIBSD
44# ##############################################################################
55
6+ source $ad_hdl_dir /projects/common/xilinx/data_offload_bd.tcl
67source $ad_hdl_dir /library/jesd204/scripts/jesd204.tcl
78
89# Common parameter for TX and RX
@@ -72,15 +73,13 @@ set TX_DATAPATH_WIDTH [adi_jesd204_calc_tpl_width $DATAPATH_WIDTH $TX_JESD_L $TX
7273
7374set TX_SAMPLES_PER_CHANNEL [expr $TX_NUM_OF_LANES * 8*$TX_DATAPATH_WIDTH / ($TX_NUM_OF_CONVERTERS * $TX_SAMPLE_WIDTH )]
7475
75- set adc_fifo_name mxfe_adc_fifo
76+ set adc_offload_name mxfe_rx_data_offload
7677set adc_data_width [expr $RX_DMA_SAMPLE_WIDTH *$RX_NUM_OF_CONVERTERS *$RX_SAMPLES_PER_CHANNEL ]
7778set adc_dma_data_width $adc_data_width
78- set adc_fifo_address_width [expr int(ceil(log(($adc_fifo_samples_per_converter *$RX_NUM_OF_CONVERTERS ) / ($adc_data_width /$RX_DMA_SAMPLE_WIDTH ))/log(2)))]
7979
80- set dac_fifo_name mxfe_dac_fifo
80+ set dac_offload_name mxfe_tx_data_offload
8181set dac_data_width [expr $TX_SAMPLE_WIDTH *$TX_NUM_OF_CONVERTERS *$TX_SAMPLES_PER_CHANNEL ]
8282set dac_dma_data_width [expr $TX_DMA_SAMPLE_WIDTH *$TX_NUM_OF_CONVERTERS *$TX_SAMPLES_PER_CHANNEL ]
83- set dac_fifo_address_width [expr int(ceil(log(($dac_fifo_samples_per_converter *$TX_NUM_OF_CONVERTERS ) / ($dac_data_width /$TX_SAMPLE_WIDTH ))/log(2)))]
8483
8584create_bd_port -dir I rx_device_clk
8685create_bd_port -dir I tx_device_clk
@@ -209,7 +208,23 @@ ad_ip_instance util_cpack2 util_mxfe_cpack [list \
209208 SAMPLE_DATA_WIDTH $RX_DMA_SAMPLE_WIDTH \
210209]
211210
212- ad_adcfifo_create $adc_fifo_name $adc_data_width $adc_dma_data_width $adc_fifo_address_width
211+ ad_data_offload_create $adc_offload_name \
212+ 0 \
213+ $adc_offload_type \
214+ $adc_offload_size \
215+ $adc_data_width \
216+ $adc_data_width
217+
218+ ad_ip_parameter $adc_offload_name /i_data_offload CONFIG.SYNC_EXT_ADD_INTERNAL_CDC 0
219+ ad_connect $adc_offload_name /sync_ext GND
220+
221+ ad_ip_instance util_vector_logic rx_do_rstout_logic
222+ ad_ip_parameter rx_do_rstout_logic config.c_operation {not}
223+ ad_ip_parameter rx_do_rstout_logic config.c_size {1}
224+
225+ ad_ip_instance util_vector_logic cpack_reset_logic
226+ ad_ip_parameter cpack_reset_logic config.c_operation {or}
227+ ad_ip_parameter cpack_reset_logic config.c_size {1}
213228
214229ad_ip_instance axi_dmac axi_mxfe_rx_dma [list \
215230 DMA_TYPE_SRC 1 \
@@ -251,7 +266,15 @@ ad_ip_instance util_upack2 util_mxfe_upack [list \
251266 SAMPLE_DATA_WIDTH $TX_SAMPLE_WIDTH \
252267]
253268
254- ad_dacfifo_create $dac_fifo_name $dac_data_width $dac_data_width $dac_fifo_address_width
269+ ad_data_offload_create $dac_offload_name \
270+ 1 \
271+ $dac_offload_type \
272+ $dac_offload_size \
273+ $dac_data_width \
274+ $dac_data_width
275+
276+ ad_ip_parameter $dac_offload_name /i_data_offload CONFIG.SYNC_EXT_ADD_INTERNAL_CDC 0
277+ ad_connect $dac_offload_name /sync_ext GND
255278
256279ad_ip_instance util_pad tx_util_pad [list \
257280 NUM_OF_SAMPLES [expr $TX_NUM_OF_CONVERTERS *$TX_SAMPLES_PER_CHANNEL ] \
@@ -406,25 +429,26 @@ ad_connect rx_device_clk axi_mxfe_rx_jesd/device_clk
406429# device clock domain
407430ad_connect rx_device_clk rx_mxfe_tpl_core/link_clk
408431ad_connect rx_device_clk util_mxfe_cpack/clk
409- ad_connect rx_device_clk mxfe_adc_fifo/adc_clk
432+ ad_connect rx_device_clk $adc_offload_name /s_axis_aclk
410433
411434ad_connect tx_device_clk tx_mxfe_tpl_core/link_clk
412435ad_connect tx_device_clk util_mxfe_upack/clk
413- ad_connect tx_device_clk mxfe_dac_fifo/dac_clk
436+ ad_connect tx_device_clk $dac_offload_name /m_axis_aclk
414437
415438# dma clock domain
416- ad_connect $sys_cpu_clk mxfe_adc_fifo/dma_clk
417- ad_connect $sys_dma_clk mxfe_dac_fifo/dma_clk
439+ ad_connect $sys_cpu_clk $adc_offload_name /m_axis_aclk
440+ ad_connect $sys_dma_clk $dac_offload_name /s_axis_aclk
418441ad_connect $sys_cpu_clk axi_mxfe_rx_dma/s_axis_aclk
419442ad_connect $sys_dma_clk axi_mxfe_tx_dma/m_axis_aclk
420443
421444# connect resets
422- ad_connect rx_device_clk_rstgen/peripheral_reset mxfe_adc_fifo/adc_rst
423- ad_connect tx_device_clk_rstgen/peripheral_reset mxfe_dac_fifo/dac_rst
445+ ad_connect rx_device_clk_rstgen/peripheral_aresetn $adc_offload_name /s_axis_aresetn
446+ ad_connect $sys_cpu_resetn $adc_offload_name /m_axis_aresetn
447+ ad_connect $sys_dma_resetn $dac_offload_name /s_axis_aresetn
448+ ad_connect tx_device_clk_rstgen/peripheral_aresetn $dac_offload_name /m_axis_aresetn
424449ad_connect tx_device_clk_rstgen/peripheral_reset util_mxfe_upack/reset
425450ad_connect $sys_cpu_resetn axi_mxfe_rx_dma/m_dest_axi_aresetn
426451ad_connect $sys_dma_resetn axi_mxfe_tx_dma/m_src_axi_aresetn
427- ad_connect $sys_dma_reset mxfe_dac_fifo/dma_rst
428452
429453if {$ADI_PHY_SEL == 0} {
430454ad_connect jesd204_phy_121_122/tx_sys_reset GND
@@ -535,7 +559,9 @@ ad_connect axi_mxfe_rx_jesd/rx_data_tdata rx_mxfe_tpl_core/link_data
535559ad_connect axi_mxfe_rx_jesd/rx_data_tvalid rx_mxfe_tpl_core/link_valid
536560
537561ad_connect ext_sync rx_mxfe_tpl_core/adc_tpl_core/adc_sync_in
538- ad_connect rx_mxfe_tpl_core/adc_tpl_core/adc_rst util_mxfe_cpack/reset
562+ ad_connect rx_mxfe_tpl_core/adc_tpl_core/adc_rst cpack_reset_logic/op1
563+ ad_connect rx_do_rstout_logic/res cpack_reset_logic/op2
564+ ad_connect cpack_reset_logic/res util_mxfe_cpack/reset
539565
540566#
541567# rx tpl to cpack
@@ -548,17 +574,19 @@ for {set i 0} {$i < $RX_NUM_OF_CONVERTERS} {incr i} {
548574ad_connect rx_mxfe_tpl_core/adc_dovf util_mxfe_cpack/fifo_wr_overflow
549575
550576#
551- # cpack to adc_fifo
577+ # cpack to data offload
552578#
553- ad_connect util_mxfe_cpack/packed_fifo_wr_data mxfe_adc_fifo/adc_wdata
554- ad_connect util_mxfe_cpack/packed_fifo_wr_en mxfe_adc_fifo/adc_wr
579+ ad_connect util_mxfe_cpack/packed_fifo_wr_data $adc_offload_name /s_axis_tdata
580+ ad_connect util_mxfe_cpack/packed_fifo_wr_en $adc_offload_name /s_axis_tvalid
581+ ad_connect $adc_offload_name /s_axis_tlast GND
582+ ad_connect $adc_offload_name /s_axis_tkeep VCC
583+ ad_connect $adc_offload_name /s_axis_tready rx_do_rstout_logic/op1
584+
555585#
556- # adc_fifo to dma
586+ # data offload to dma
557587#
558- ad_connect mxfe_adc_fifo/dma_wr axi_mxfe_rx_dma/s_axis_valid
559- ad_connect mxfe_adc_fifo/dma_wdata axi_mxfe_rx_dma/s_axis_data
560- ad_connect mxfe_adc_fifo/dma_wready axi_mxfe_rx_dma/s_axis_ready
561- ad_connect mxfe_adc_fifo/dma_xfer_req axi_mxfe_rx_dma/s_axis_xfer_req
588+ ad_connect $adc_offload_name /m_axis axi_mxfe_rx_dma/s_axis
589+ ad_connect $adc_offload_name /init_req axi_mxfe_rx_dma/s_axis_xfer_req
562590
563591#
564592# connect dac dataflow
@@ -642,27 +670,21 @@ for {set i 0} {$i < $TX_NUM_OF_CONVERTERS} {incr i} {
642670ad_connect ext_sync tx_mxfe_tpl_core/dac_tpl_core/dac_sync_in
643671
644672#
645- # dac fifo to upack
673+ # data offload to upack
646674#
647-
648- # TODO: Add streaming AXI interface for DAC FIFO
649- ad_connect util_mxfe_upack/s_axis_valid VCC
650- ad_connect util_mxfe_upack/s_axis_ready mxfe_dac_fifo/dac_valid
651- ad_connect util_mxfe_upack/s_axis_data mxfe_dac_fifo/dac_data
675+ ad_connect util_mxfe_upack/s_axis $dac_offload_name /m_axis
652676
653677#
654- # dma to dac fifo
678+ # dma to data offload
655679#
656- ad_connect mxfe_dac_fifo/dma_valid axi_mxfe_tx_dma/m_axis_valid
657- ad_connect tx_util_pad/data_out mxfe_dac_fifo/dma_data
680+ ad_connect $dac_offload_name /s_axis_tvalid axi_mxfe_tx_dma/m_axis_valid
681+ ad_connect tx_util_pad/data_out $dac_offload_name /s_axis_tdata
658682ad_connect axi_mxfe_tx_dma/m_axis_data tx_util_pad/data_in
659- ad_connect mxfe_dac_fifo/dma_ready axi_mxfe_tx_dma/m_axis_ready
660- ad_connect mxfe_dac_fifo/dma_xfer_req axi_mxfe_tx_dma/m_axis_xfer_req
661- ad_connect mxfe_dac_fifo/dma_xfer_last axi_mxfe_tx_dma/m_axis_last
662- ad_connect mxfe_dac_fifo/dac_dunf tx_mxfe_tpl_core/dac_dunf
663-
664- create_bd_port -dir I dac_fifo_bypass
665- ad_connect mxfe_dac_fifo/bypass dac_fifo_bypass
683+ ad_connect $dac_offload_name /s_axis_tready axi_mxfe_tx_dma/m_axis_ready
684+ ad_connect $dac_offload_name /s_axis_tlast axi_mxfe_tx_dma/m_axis_last
685+ ad_connect $dac_offload_name /s_axis_tkeep axi_mxfe_tx_dma/m_axis_keep
686+ ad_connect $dac_offload_name /init_req axi_mxfe_tx_dma/m_axis_xfer_req
687+ ad_connect tx_mxfe_tpl_core/dac_dunf util_mxfe_upack/fifo_rd_underflow
666688
667689# extra GPIOs
668690ad_connect gpio2_i axi_gpio_2/gpio_io_i
@@ -687,6 +709,8 @@ ad_cpu_interconnect 0x44b90000 axi_mxfe_tx_jesd
687709ad_cpu_interconnect 0x7c420000 axi_mxfe_rx_dma
688710ad_cpu_interconnect 0x7c430000 axi_mxfe_tx_dma
689711ad_cpu_interconnect 0x7c440000 axi_gpio_2
712+ ad_cpu_interconnect 0x7c450000 $adc_offload_name
713+ ad_cpu_interconnect 0x7c460000 $dac_offload_name
690714
691715# interconnect (gt/adc)
692716#
0 commit comments