1
1
# ##############################################################################
2
- # # Copyright (C) 2019-2023 Analog Devices, Inc. All rights reserved.
2
+ # # Copyright (C) 2019-2025 Analog Devices, Inc. All rights reserved.
3
3
# ## SPDX short identifier: ADIBSD
4
4
# ##############################################################################
5
5
6
+ source $ad_hdl_dir /projects/common/xilinx/data_offload_bd.tcl
6
7
source $ad_hdl_dir /library/jesd204/scripts/jesd204.tcl
7
8
8
9
# 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
72
73
73
74
set TX_SAMPLES_PER_CHANNEL [expr $TX_NUM_OF_LANES * 8*$TX_DATAPATH_WIDTH / ($TX_NUM_OF_CONVERTERS * $TX_SAMPLE_WIDTH )]
74
75
75
- set adc_fifo_name mxfe_adc_fifo
76
+ set adc_offload_name mxfe_rx_data_offload
76
77
set adc_data_width [expr $RX_DMA_SAMPLE_WIDTH *$RX_NUM_OF_CONVERTERS *$RX_SAMPLES_PER_CHANNEL ]
77
78
set 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)))]
79
79
80
- set dac_fifo_name mxfe_dac_fifo
80
+ set dac_offload_name mxfe_tx_data_offload
81
81
set dac_data_width [expr $TX_SAMPLE_WIDTH *$TX_NUM_OF_CONVERTERS *$TX_SAMPLES_PER_CHANNEL ]
82
82
set 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)))]
84
83
85
84
create_bd_port -dir I rx_device_clk
86
85
create_bd_port -dir I tx_device_clk
@@ -209,7 +208,23 @@ ad_ip_instance util_cpack2 util_mxfe_cpack [list \
209
208
SAMPLE_DATA_WIDTH $RX_DMA_SAMPLE_WIDTH \
210
209
]
211
210
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}
213
228
214
229
ad_ip_instance axi_dmac axi_mxfe_rx_dma [list \
215
230
DMA_TYPE_SRC 1 \
@@ -251,7 +266,15 @@ ad_ip_instance util_upack2 util_mxfe_upack [list \
251
266
SAMPLE_DATA_WIDTH $TX_SAMPLE_WIDTH \
252
267
]
253
268
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
255
278
256
279
ad_ip_instance util_pad tx_util_pad [list \
257
280
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
406
429
# device clock domain
407
430
ad_connect rx_device_clk rx_mxfe_tpl_core/link_clk
408
431
ad_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
410
433
411
434
ad_connect tx_device_clk tx_mxfe_tpl_core/link_clk
412
435
ad_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
414
437
415
438
# 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
418
441
ad_connect $sys_cpu_clk axi_mxfe_rx_dma/s_axis_aclk
419
442
ad_connect $sys_dma_clk axi_mxfe_tx_dma/m_axis_aclk
420
443
421
444
# 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
424
449
ad_connect tx_device_clk_rstgen/peripheral_reset util_mxfe_upack/reset
425
450
ad_connect $sys_cpu_resetn axi_mxfe_rx_dma/m_dest_axi_aresetn
426
451
ad_connect $sys_dma_resetn axi_mxfe_tx_dma/m_src_axi_aresetn
427
- ad_connect $sys_dma_reset mxfe_dac_fifo/dma_rst
428
452
429
453
if {$ADI_PHY_SEL == 0} {
430
454
ad_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
535
559
ad_connect axi_mxfe_rx_jesd/rx_data_tvalid rx_mxfe_tpl_core/link_valid
536
560
537
561
ad_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
539
565
540
566
#
541
567
# rx tpl to cpack
@@ -548,17 +574,19 @@ for {set i 0} {$i < $RX_NUM_OF_CONVERTERS} {incr i} {
548
574
ad_connect rx_mxfe_tpl_core/adc_dovf util_mxfe_cpack/fifo_wr_overflow
549
575
550
576
#
551
- # cpack to adc_fifo
577
+ # cpack to data offload
552
578
#
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
+
555
585
#
556
- # adc_fifo to dma
586
+ # data offload to dma
557
587
#
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
562
590
563
591
#
564
592
# connect dac dataflow
@@ -642,27 +670,21 @@ for {set i 0} {$i < $TX_NUM_OF_CONVERTERS} {incr i} {
642
670
ad_connect ext_sync tx_mxfe_tpl_core/dac_tpl_core/dac_sync_in
643
671
644
672
#
645
- # dac fifo to upack
673
+ # data offload to upack
646
674
#
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
652
676
653
677
#
654
- # dma to dac fifo
678
+ # dma to data offload
655
679
#
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
658
682
ad_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
666
688
667
689
# extra GPIOs
668
690
ad_connect gpio2_i axi_gpio_2/gpio_io_i
@@ -687,6 +709,8 @@ ad_cpu_interconnect 0x44b90000 axi_mxfe_tx_jesd
687
709
ad_cpu_interconnect 0x7c420000 axi_mxfe_rx_dma
688
710
ad_cpu_interconnect 0x7c430000 axi_mxfe_tx_dma
689
711
ad_cpu_interconnect 0x7c440000 axi_gpio_2
712
+ ad_cpu_interconnect 0x7c450000 $adc_offload_name
713
+ ad_cpu_interconnect 0x7c460000 $dac_offload_name
690
714
691
715
# interconnect (gt/adc)
692
716
#
0 commit comments