diff --git a/docs/projects/adrv903x/adrv903x_zcu102_clocking.svg b/docs/projects/adrv903x/adrv903x_zcu102_clocking.svg
new file mode 100644
index 0000000000..c842b58870
--- /dev/null
+++ b/docs/projects/adrv903x/adrv903x_zcu102_clocking.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/docs/projects/adrv903x/adrv903x_zcu102_jesd204c.svg b/docs/projects/adrv903x/adrv903x_zcu102_jesd204c.svg
new file mode 100644
index 0000000000..653797007d
--- /dev/null
+++ b/docs/projects/adrv903x/adrv903x_zcu102_jesd204c.svg
@@ -0,0 +1,6839 @@
+
+
+
+
diff --git a/docs/projects/adrv903x/index.rst b/docs/projects/adrv903x/index.rst
new file mode 100644
index 0000000000..c8f8f7b59f
--- /dev/null
+++ b/docs/projects/adrv903x/index.rst
@@ -0,0 +1,460 @@
+.. _adrv903x:
+
+ADRV903x HDL reference design
+===============================================================================
+
+The ADRV903x is a highly integrated, system on chip (SoC) radio frequency (RF)
+agile transceiver with integrated digital front end (DFE). The SoC contains
+eight transmitters, two observation receivers for monitoring transmitter
+channels, eight receivers, integrated LO and clock synthesizers, and digital
+signal processing functions. The SoC meets the high radio performance and low
+power consumption demanded by cellular infrastructure applications, such as
+software-definded radios, portable instrumentation and military communications.
+
+Supported devices
+-------------------------------------------------------------------------------
+
+- :adi:`ADRV9032R`
+
+Supported boards
+-------------------------------------------------------------------------------
+
+- :adi:`EVAL-ADRV903x`
+
+Supported carriers
+-------------------------------------------------------------------------------
+
+.. list-table::
+ :widths: 35 35 30
+ :header-rows: 1
+
+ * - Evaluation board
+ - Carrier
+ - FMC slot
+ * - EVAL-ADRV903x
+ - :xilinx:`ZCU102`
+ - FMC HPC0
+
+Block design
+-------------------------------------------------------------------------------
+
+Block diagram
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The data path and clock domains are depicted in the below diagrams:
+
+Example block design for Single link
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. image:: adrv903x_zcu102_jesd204c.svg
+ :width: 800
+ :align: center
+ :alt: ADRV903x JESD204C M=16 L=8 block diagram
+
+The Rx links (ADC Path) operate with the following parameters:
+
+- Rx Deframer parameters: L=4, M=16, F=8, S=1, NP=16, N=16
+- Sample Rate: 245.76 MSPS
+- Dual link: No
+- RX_DEVICE_CLK: 245.76 MHz (Lane Rate/66)
+- REF_CLK: 491.52 MHz
+- JESD204C Lane Rate: 16.22 Gbps
+- QPLL0
+
+The Tx links (DAC Path) operate with the following parameters:
+
+- Tx Deframer parameters: L=8, M=16, F=4, S=1, NP=16, N=16
+- Sample Rate: 491.52 MSPS
+- Dual link: No
+- TX_DEVICE_CLK: 245.76 MHz (Lane Rate/66)
+- REF_CLK: 491.52 MHz
+- JESD204C Lane Rate: 16.22 Gbps
+- QPLL0
+
+The ORx links (ADC Obs Path) operate with the following parameters:
+
+- ORx Deframer parameters: L=4, M=8, F=4, S=1, NP=16, N=16
+- Sample Rate: 491.52 MSPS
+- Dual link: No
+- ORX_DEVICE_CLK: 245.76 MHz (Lane Rate/66)
+- REF_CLK: 491.52 MHz
+- JESD204C Lane Rate: 16.22 Gbps
+- QPLL0
+
+Configuration modes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The block design supports configuration of parameters and scales.
+
+We have listed a couple of examples at section
+`Building the HDL project`_ and the default modes
+for each project.
+
+.. note::
+
+ The parameters for Rx or Tx links can be changed from the
+ **system_project.tcl** file, located in
+ hdl/projects/adrv903x/$CARRIER/system_project.tcl
+
+.. math::
+ Lane Rate = Sample Rate*\frac{M}{L}*N'* \frac{66}{64}
+
+The following are the parameters of this project that can be configured:
+
+- JESD_MODE: used link layer encoder mode
+
+ - 64B66B - 64b66b link layer defined in JESD204C
+ - 8B10B - 8b10b link layer defined in JESD204B
+
+- ORX_ENABLE : Additional data path for RX-OS
+
+ - 0 - Disabled (used for profiles with RX-OS disabled)
+ - 1 - Enabled (used for profiles with RX-OS enabled)
+
+- RX_LANE_RATE: Transceiver lane rate of the Rx link
+- TX_LANE_RATE: Transceiver lane rate of the Tx link
+- [RX/TX/RX_OS]_JESD_M: number of converters per link
+- [RX/TX/RX_OS]_JESD_L: number of lanes per link
+- [RX/TX/RX_OS]_JESD_S: number of samples per frame
+- [RX/TX/RX_OS]_JESD_NP: number of bits per sample
+- [RX/TX/RX_OS]_TPL_WIDTH : TPL data path width in bits
+- [RX/TX/RX_OS]_NUM_LINKS: number of links
+
+Clock scheme
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. image:: adrv903x_zcu102_clocking.svg
+ :width: 500
+ :align: center
+ :alt: ADRV903x ZCU102 clock scheme
+
+CPU/Memory interconnects addresses
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The addresses are dependent on the architecture of the FPGA, having an offset
+added to the base address from HDL (see more at :ref:`architecture cpu-intercon-addr`).
+
+========================= ===========
+Instance ZynqMP
+========================= ===========
+axi_adrv903x_tx_jesd 0x84A9_0000
+axi_adrv903x_rx_jesd 0x84AA_0000
+axi_adrv903x_rx_os_jesd 0x85AA_0000
+axi_adrv903x_tx_dma 0x9C42_0000
+axi_adrv903x_rx_dma 0x9C40_0000
+axi_adrv903x_rx_os_dma 0x9C80_0000
+tx_adrv903x_tpl_core 0x84A0_4000
+rx_adrv903x_tpl_core 0x84A0_0000
+rx_os_adrv903x_tpl_core 0x84A0_8000
+axi_adrv903x_tx_xcvr 0x84A8_0000
+axi_adrv903x_rx_xcvr 0x84A6_0000
+axi_adrv903x_rx_os_xcvr 0x85A6_0000
+axi_adrv903x_tx_clkgen 0x83C0_0000
+axi_adrv903x_rx_clkgen 0x83C1_0000
+axi_adrv903x_rx_os_clkgen 0x83C2_0000
+adrv903x_tx_data_offload 0x9c44_0000
+adrv903x_rx_data_offload 0x9c45_0000
+========================= ===========
+
+SPI connections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. list-table::
+ :widths: 25 25 25 25
+ :header-rows: 1
+
+ * - SPI type
+ - SPI manager instance
+ - SPI subordinate
+ - CS
+ * - PS
+ - spi0
+ - ADRV903x
+ - 0
+ * -
+ -
+ - AD9528
+ - 1
+
+GPIOs
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. list-table::
+ :widths: 25 20 20 15
+ :header-rows: 2
+
+ * - GPIO signal
+ - Direction
+ - HDL GPIO EMIO
+ - Software GPIO
+ * -
+ - (from FPGA view)
+ -
+ - Zynq MP
+ * - ad9528_reset_b
+ - INOUT
+ - 69
+ - 147
+ * - ad9528_sysref_req
+ - INOUT
+ - 68
+ - 146
+ * - adrv903x_trx0_enable
+ - INOUT
+ - 67
+ - 145
+ * - adrv903x_trx1_enable
+ - INOUT
+ - 66
+ - 144
+ * - adrv903x_trx2_enable
+ - INOUT
+ - 65
+ - 143
+ * - adrv903x_trx3_enable
+ - INOUT
+ - 64
+ - 142
+ * - adrv903x_trx4_enable
+ - INOUT
+ - 63
+ - 141
+ * - adrv903x_trx5_enable
+ - INOUT
+ - 62
+ - 140
+ * - adrv903x_trx6_enable
+ - INOUT
+ - 61
+ - 139
+ * - adrv903x_trx7_enable
+ - INOUT
+ - 60
+ - 138
+ * - adrv903x_orx0_enable
+ - INOUT
+ - 59
+ - 137
+ * - adrv903x_orx1_enable
+ - INOUT
+ - 58
+ - 136
+ * - adrv903x_test
+ - INOUT
+ - 57
+ - 135
+ * - adrv903x_reset_b
+ - INOUT
+ - 56
+ - 134
+ * - adrv903x_gpio[0:23]
+ - INOUT
+ - 55:32
+ - 133:110
+
+Interrupts
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Below are the Programmable Logic interrupts used in this project.
+
+======================= === ============ =============
+Instance name HDL Linux ZynqMP Actual ZynqMP
+======================= === ============ =============
+axi_adrv903x_tx_jesd 10 106 138
+axi_adrv903x_rx_jesd 11 107 139
+axi_adrv903x_rx_os_jesd 12 108 140
+axi_adrv903x_tx_dma 13 109 141
+axi_adrv903x_rx_dma 14 110 142
+axi_adrv903x_rx_os_dma 15 111 143
+======================= === ============ =============
+
+Building the HDL project
+-------------------------------------------------------------------------------
+
+The design is built upon ADI's generic HDL reference design framework.
+ADI distributes the bit/elf files of these projects as part of the
+:dokuwiki:`ADI Kuiper Linux `.
+If you want to build the sources, ADI makes them available on the
+:git-hdl:`HDL repository >`. To get the source you must
+`clone `__
+the HDL repository.
+
+Then go to the :git-hdl:`projects/adrv903x `
+location and run the make command by typing in your command prompt:
+
+**Linux/Cygwin/WSL**
+
+.. shell::
+
+ $cd hdl/projects/adrv903x/zcu102
+ $make
+
+The following dropdowns contain tables with the parameters that can be used to
+configure this project, depending on the carrier used.
+Where a cell contains a --- (dash) it means that the parameter doesn't exist
+for that project (adrv903x/carrier or adrv903x/carrier).
+
+.. collapsible:: Default values of the ``make`` parameters for ADRV903x
+
+ +----------------------+------------------------------------------------------+
+ | Parameter | Default value of the parameters depending on carrier |
+ +----------------------+------------------------------------------------------+
+ | | ZCU102 |
+ +======================+======================================================+
+ | JESD_MODE | 64B66B |
+ +----------------------+------------------------------------------------------+
+ | ORX_ENABLE | 1 |
+ +----------------------+------------------------------------------------------+
+ | RX_LANE_RATE | 16.22 |
+ +----------------------+------------------------------------------------------+
+ | TX_LANE_RATE | 16.22 |
+ +----------------------+------------------------------------------------------+
+ | TX_NUM_LINKS | 1 |
+ +----------------------+------------------------------------------------------+
+ | RX_NUM_LINKS | 1 |
+ +----------------------+------------------------------------------------------+
+ | RX_OS_NUM_LINKS | 1 |
+ +----------------------+------------------------------------------------------+
+ | RX_JESD_M | 16 |
+ +----------------------+------------------------------------------------------+
+ | RX_JESD_L | 4 |
+ +----------------------+------------------------------------------------------+
+ | RX_JESD_S | 1 |
+ +----------------------+------------------------------------------------------+
+ | RX_JESD_NP | 16 |
+ +----------------------+------------------------------------------------------+
+ | RX_JESD_TPL_WIDTH | {} |
+ +----------------------+------------------------------------------------------+
+ | TX_JESD_M | 16 |
+ +----------------------+------------------------------------------------------+
+ | TX_JESD_L | 8 |
+ +----------------------+------------------------------------------------------+
+ | TX_JESD_S | 1 |
+ +----------------------+------------------------------------------------------+
+ | TX_JESD_NP | 16 |
+ +----------------------+------------------------------------------------------+
+ | TX_JESD_TPL_WIDTH | {} |
+ +----------------------+------------------------------------------------------+
+ | RX_OS_JESD_M | 8 |
+ +----------------------+------------------------------------------------------+
+ | RX_OS_JESD_L | 4 |
+ +----------------------+------------------------------------------------------+
+ | RX_OS_JESD_S | 1 |
+ +----------------------+------------------------------------------------------+
+ | RX_OS_JESD_NP | 16 |
+ +----------------------+------------------------------------------------------+
+ | RX_OS_JESD_TPL_WIDTH | {} |
+ +----------------------+------------------------------------------------------+
+
+A more comprehensive build guide can be found in the :ref:`build_hdl` user guide.
+
+Other considerations
+-------------------------------------------------------------------------------
+
+ADC - lane mapping
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Due to physical constraints, Rx lanes are reordered as described in the
+following table.
+
+============ ===========================
+ADC phy Lane FPGA Rx lane / Logical Lane
+============ ===========================
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+============ ===========================
+
+DAC - lane mapping
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Due to physical constraints, Tx lanes are reordered as described in the
+following table.
+
+============ ===========================
+DAC phy lane FPGA Tx lane / Logical lane
+============ ===========================
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+============ ===========================
+
+Resources
+-------------------------------------------------------------------------------
+
+Hardware related
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Product datasheets: :adi:`ADRV9032R`
+
+HDL related
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- :git-hdl:`ADRV903x HDL project source code `
+
+.. list-table::
+ :widths: 30 40 35
+ :header-rows: 1
+
+ * - IP name
+ - Source code link
+ - Documentation link
+ * - AXI_CLKGEN
+ - :git-hdl:`library/axi_clkgen`
+ - :ref:`axi_clkgen`
+ * - AXI_DMAC
+ - :git-hdl:`library/axi_dmac`
+ - :ref:`axi_dmac`
+ * - AXI_SYSID
+ - :git-hdl:`library/axi_sysid`
+ - :ref:`axi_sysid`
+ * - SYSID_ROM
+ - :git-hdl:`library/sysid_rom`
+ - :ref:`axi_sysid`
+ * - UTIL_CPACK2
+ - :git-hdl:`library/util_pack/util_cpack2`
+ - :ref:`util_cpack2`
+ * - UTIL_UPACK2
+ - :git-hdl:`library/util_pack/util_upack2`
+ - :ref:`util_upack2`
+ * - DATA_OFFLOAD
+ - :git-hdl:`library/data_offload`
+ - :ref:`data_offload`
+ * - UTIL_DO_RAM
+ - :git-hdl:`library/util_do_ram`
+ - :ref:`data_offload`
+ * - UTIL_ADXCVR for AMD
+ - :git-hdl:`library/xilinx/util_adxcvr`
+ - :ref:`util_adxcvr`
+ * - AXI_ADXCVR for AMD
+ - :git-hdl:`library/xilinx/axi_adxcvr`
+ - :ref:`axi_adxcvr amd`
+ * - AXI_JESD204_RX
+ - :git-hdl:`library/jesd204/axi_jesd204_rx`
+ - :ref:`axi_jesd204_rx`
+ * - AXI_JESD204_TX
+ - :git-hdl:`library/jesd204/axi_jesd204_tx`
+ - :ref:`axi_jesd204_tx`
+ * - JESD204_TPL_ADC
+ - :git-hdl:`library/jesd204/ad_ip_jesd204_tpl_adc`
+ - :ref:`ad_ip_jesd204_tpl_dac`
+ * - JESD204_TPL_DAC
+ - :git-hdl:`library/jesd204/ad_ip_jesd204_tpl_dac`
+ - :ref:`ad_ip_jesd204_tpl_dac`
+
+- :ref:`jesd204`
+
+.. include:: ../common/more_information.rst
+
+.. include:: ../common/support.rst
+
diff --git a/docs/projects/index.rst b/docs/projects/index.rst
index 3fb512706d..2a5b1b4f3e 100644
--- a/docs/projects/index.rst
+++ b/docs/projects/index.rst
@@ -72,6 +72,7 @@ Contents
ADRV9009
ADRV9009-ZU11EG
ADRV9026
+ ADRV903x
ADRV904x
ADRV9361Z7035
ADRV9364Z7020
diff --git a/projects/adrv903x/Makefile b/projects/adrv903x/Makefile
new file mode 100644
index 0000000000..68a7ed005c
--- /dev/null
+++ b/projects/adrv903x/Makefile
@@ -0,0 +1,7 @@
+####################################################################################
+## Copyright (c) 2018 - 2025 Analog Devices, Inc.
+### SPDX short identifier: BSD-1-Clause
+## Auto-generated, do not modify!
+####################################################################################
+
+include ../scripts/project-toplevel.mk
diff --git a/projects/adrv903x/README.md b/projects/adrv903x/README.md
new file mode 100644
index 0000000000..bf9db373d5
--- /dev/null
+++ b/projects/adrv903x/README.md
@@ -0,0 +1,16 @@
+# ADRV903X HDL Project
+
+- Evaluation board product page: [EVAL-ADRV903x](https://www.analog.com/eval-adrv903x)
+- System documentation: https://wiki.analog.com/resources/eval/user-guides/adrv903x/quickstart/zynqmp
+- HDL project documentation: https://analogdevicesinc.github.io/hdl/projects/adrv903x/index.html
+- Evaluation board VADJ: 1.8V
+
+## Supported parts
+
+| Part name | Description |
+|----------------------------------------------|-----------------------------------------|
+| [ADRV903x](https://www.analog.com/adrv9030) | 8T8R2OR SoC, 400 MHz iBW RF Transceiver |
+
+## Building the project
+
+Please enter the folder for the FPGA carrier you want to use and read the README.md.
diff --git a/projects/adrv903x/common/adrv903x_bd.tcl b/projects/adrv903x/common/adrv903x_bd.tcl
new file mode 100644
index 0000000000..79ca3c171d
--- /dev/null
+++ b/projects/adrv903x/common/adrv903x_bd.tcl
@@ -0,0 +1,551 @@
+###############################################################################
+## Copyright (C) 2025 Analog Devices, Inc. All rights reserved.
+### SPDX short identifier: ADIBSD
+###############################################################################
+
+set ORX_ENABLE $ad_project_params(ORX_ENABLE) ; # 0 = Disabled ; 1 = Enabled
+
+set JESD_MODE $ad_project_params(JESD_MODE)
+set TX_LANE_RATE $ad_project_params(TX_LANE_RATE)
+set RX_LANE_RATE $ad_project_params(RX_LANE_RATE)
+
+set TX_NUM_LINKS $ad_project_params(TX_NUM_LINKS)
+set RX_NUM_LINKS $ad_project_params(RX_NUM_LINKS)
+set RX_OS_NUM_LINKS $ad_project_params(RX_OS_NUM_LINKS)
+
+set TX_JESD_L $ad_project_params(TX_JESD_L)
+set TX_JESD_M $ad_project_params(TX_JESD_M)
+set TX_JESD_S $ad_project_params(TX_JESD_S)
+set TX_JESD_NP $ad_project_params(TX_JESD_NP)
+
+set RX_JESD_L $ad_project_params(RX_JESD_L)
+set RX_JESD_M $ad_project_params(RX_JESD_M)
+set RX_JESD_S $ad_project_params(RX_JESD_S)
+set RX_JESD_NP $ad_project_params(RX_JESD_NP)
+
+set RX_OS_JESD_L $ad_project_params(RX_OS_JESD_L)
+set RX_OS_JESD_M $ad_project_params(RX_OS_JESD_M)
+set RX_OS_JESD_S $ad_project_params(RX_OS_JESD_S)
+set RX_OS_JESD_NP $ad_project_params(RX_OS_JESD_NP)
+
+if {$JESD_MODE == "8B10B"} {
+ set DATAPATH_WIDTH 4
+ set NP12_DATAPATH_WIDTH 6
+ set ENCODER_SEL 1
+} else {
+ set DATAPATH_WIDTH 8
+ set NP12_DATAPATH_WIDTH 12
+ set ENCODER_SEL 2
+}
+
+set TX_TPL_WIDTH [ expr { [info exists ad_project_params(TX_TPL_WIDTH)] \
+ ? $ad_project_params(TX_TPL_WIDTH) : {} } ]
+set RX_TPL_WIDTH [ expr { [info exists ad_project_params(RX_TPL_WIDTH)] \
+ ? $ad_project_params(RX_TPL_WIDTH) : {} } ]
+set RX_OS_TPL_WIDTH [ expr { [info exists ad_project_params(RX_OS_TPL_WIDTH)] \
+ ? $ad_project_params(RX_OS_TPL_WIDTH) : {} } ]
+
+source $ad_hdl_dir/library/jesd204/scripts/jesd204.tcl
+source $ad_hdl_dir/projects/common/xilinx/data_offload_bd.tcl
+
+# TX parameters
+set TX_NUM_OF_LANES [expr $TX_JESD_L * $TX_NUM_LINKS] ; # L
+set TX_NUM_OF_CONVERTERS [expr $TX_JESD_M * $TX_NUM_LINKS] ; # M
+set TX_SAMPLES_PER_FRAME $TX_JESD_S ; # S
+set TX_SAMPLE_WIDTH $TX_JESD_NP ; # N/NP
+
+set TX_DMA_SAMPLE_WIDTH $TX_JESD_NP
+if {$TX_DMA_SAMPLE_WIDTH == 12} {
+ set TX_DMA_SAMPLE_WIDTH 16
+}
+
+set TX_DATAPATH_WIDTH [adi_jesd204_calc_tpl_width $DATAPATH_WIDTH $TX_JESD_L $TX_JESD_M $TX_JESD_S $TX_JESD_NP $TX_TPL_WIDTH]
+
+set TX_SAMPLES_PER_CHANNEL [expr $TX_NUM_OF_LANES * 8* $TX_DATAPATH_WIDTH / ($TX_NUM_OF_CONVERTERS * $TX_SAMPLE_WIDTH)]
+
+# RX parameters
+set RX_NUM_OF_LANES [expr $RX_JESD_L * $RX_NUM_LINKS] ; # L
+set RX_NUM_OF_CONVERTERS [expr $RX_JESD_M * $RX_NUM_LINKS] ; # M
+set RX_SAMPLES_PER_FRAME $RX_JESD_S ; # S
+set RX_SAMPLE_WIDTH $RX_JESD_NP ; # N/NP
+
+set RX_DMA_SAMPLE_WIDTH $RX_JESD_NP
+if {$RX_DMA_SAMPLE_WIDTH == 12} {
+ set RX_DMA_SAMPLE_WIDTH 16
+}
+
+set RX_DATAPATH_WIDTH [adi_jesd204_calc_tpl_width $DATAPATH_WIDTH $RX_JESD_L $RX_JESD_M $RX_JESD_S $RX_JESD_NP $RX_TPL_WIDTH]
+set RX_SAMPLES_PER_CHANNEL [expr $RX_NUM_OF_LANES * 8* $RX_DATAPATH_WIDTH / ($RX_NUM_OF_CONVERTERS * $RX_SAMPLE_WIDTH)]
+
+# RX OBS parameters
+set RX_OS_NUM_OF_LANES [expr $RX_OS_JESD_L * $RX_OS_NUM_LINKS] ; # L
+set RX_OS_NUM_OF_CONVERTERS [expr $RX_OS_JESD_M * $RX_OS_NUM_LINKS] ; # M
+set RX_OS_SAMPLES_PER_FRAME $RX_OS_JESD_S ; # S
+set RX_OS_SAMPLE_WIDTH $RX_OS_JESD_NP ; # N/NP
+
+set RX_OS_DMA_SAMPLE_WIDTH $RX_OS_JESD_NP
+if {$RX_OS_DMA_SAMPLE_WIDTH == 12} {
+ set RX_OS_DMA_SAMPLE_WIDTH 16
+}
+
+if {$ORX_ENABLE} {
+ set RX_OS_DATAPATH_WIDTH [adi_jesd204_calc_tpl_width $DATAPATH_WIDTH $RX_OS_JESD_L $RX_OS_JESD_M $RX_OS_JESD_S $RX_OS_JESD_NP $RX_OS_TPL_WIDTH]
+ set RX_OS_SAMPLES_PER_CHANNEL [expr $RX_OS_NUM_OF_LANES * 8* $RX_OS_DATAPATH_WIDTH / ($RX_OS_NUM_OF_CONVERTERS * $RX_OS_SAMPLE_WIDTH)]
+}
+
+set adc_data_offload_name adrv903x_rx_data_offload
+set adc_data_width [expr $RX_DMA_SAMPLE_WIDTH*$RX_NUM_OF_CONVERTERS*$RX_SAMPLES_PER_CHANNEL]
+set adc_dma_data_width $adc_data_width
+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)))]
+
+set dac_data_offload_name adrv903x_tx_data_offload
+set dac_data_width [expr $TX_DMA_SAMPLE_WIDTH*$TX_NUM_OF_CONVERTERS*$TX_SAMPLES_PER_CHANNEL]
+set dac_dma_data_width $dac_data_width
+set dac_fifo_address_width [expr int(ceil(log(($dac_fifo_samples_per_converter*$TX_NUM_OF_CONVERTERS) / ($dac_data_width/$TX_DMA_SAMPLE_WIDTH))/log(2)))]
+
+set do_axi_data_width 512
+
+set MAX_RX_NUM_OF_LANES [expr $ORX_ENABLE ? 4 : 8]
+set MAX_TX_NUM_OF_LANES 8
+set MAX_RX_OS_NUM_OF_LANES [expr $ORX_ENABLE ? 4 : 0]
+
+# adrv903x
+
+create_bd_port -dir I core_clk
+create_bd_port -dir O rx_os_sync
+create_bd_port -dir I rx_os_sysref
+
+# dac peripherals
+
+ad_ip_instance axi_clkgen axi_adrv903x_tx_clkgen
+ad_ip_parameter axi_adrv903x_tx_clkgen CONFIG.ID 2
+ad_ip_parameter axi_adrv903x_tx_clkgen CONFIG.CLKIN_PERIOD 4
+ad_ip_parameter axi_adrv903x_tx_clkgen CONFIG.VCO_DIV 1
+ad_ip_parameter axi_adrv903x_tx_clkgen CONFIG.VCO_MUL 4
+ad_ip_parameter axi_adrv903x_tx_clkgen CONFIG.CLK0_DIV 4
+
+ad_ip_instance axi_adxcvr axi_adrv903x_tx_xcvr
+ad_ip_parameter axi_adrv903x_tx_xcvr CONFIG.LINK_MODE $ENCODER_SEL
+ad_ip_parameter axi_adrv903x_tx_xcvr CONFIG.NUM_OF_LANES $MAX_TX_NUM_OF_LANES
+ad_ip_parameter axi_adrv903x_tx_xcvr CONFIG.QPLL_ENABLE 1
+ad_ip_parameter axi_adrv903x_tx_xcvr CONFIG.TX_OR_RX_N 1
+ad_ip_parameter axi_adrv903x_tx_xcvr CONFIG.SYS_CLK_SEL 3
+ad_ip_parameter axi_adrv903x_tx_xcvr CONFIG.OUT_CLK_SEL 3
+
+adi_axi_jesd204_tx_create axi_adrv903x_tx_jesd $TX_NUM_OF_LANES $TX_NUM_LINKS $ENCODER_SEL
+ad_ip_parameter axi_adrv903x_tx_jesd/tx CONFIG.TPL_DATA_PATH_WIDTH $TX_DATAPATH_WIDTH
+
+ad_ip_instance util_upack2 util_adrv903x_tx_upack [list \
+ NUM_OF_CHANNELS $TX_NUM_OF_CONVERTERS \
+ SAMPLES_PER_CHANNEL $TX_SAMPLES_PER_CHANNEL \
+ SAMPLE_DATA_WIDTH $TX_DMA_SAMPLE_WIDTH \
+]
+
+ set dac_data_offload_size [expr $dac_data_width / 8 * 2**$dac_fifo_address_width]
+ ad_data_offload_create $dac_data_offload_name \
+ 1 \
+ 0 \
+ $dac_data_offload_size \
+ $dac_data_width \
+ $dac_data_width \
+ $do_axi_data_width \
+ {}
+ 1
+
+adi_tpl_jesd204_tx_create tx_adrv903x_tpl_core $TX_NUM_OF_LANES \
+ $TX_NUM_OF_CONVERTERS \
+ $TX_SAMPLES_PER_FRAME \
+ $TX_SAMPLE_WIDTH \
+ $TX_DATAPATH_WIDTH \
+ $TX_DMA_SAMPLE_WIDTH
+
+ad_ip_parameter tx_adrv903x_tpl_core/dac_tpl_core CONFIG.IQCORRECTION_DISABLE 0
+
+ad_ip_instance axi_dmac axi_adrv903x_tx_dma
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.DMA_TYPE_SRC 0
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.DMA_TYPE_DEST 1
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.ID 0
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.SYNC_TRANSFER_START 0
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.DMA_LENGTH_WIDTH 24
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.DMA_2D_TRANSFER 0
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.CYCLIC 1
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.MAX_BYTES_PER_BURST 4096
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.DMA_DATA_WIDTH_SRC [expr min(512, $dac_dma_data_width)]
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.DMA_DATA_WIDTH_DEST $dac_dma_data_width
+ad_ip_parameter axi_adrv903x_tx_dma CONFIG.CACHE_COHERENT $CACHE_COHERENCY
+
+# adc peripherals
+
+ad_ip_instance axi_clkgen axi_adrv903x_rx_clkgen
+ad_ip_parameter axi_adrv903x_rx_clkgen CONFIG.ID 2
+ad_ip_parameter axi_adrv903x_rx_clkgen CONFIG.CLKIN_PERIOD 4
+ad_ip_parameter axi_adrv903x_rx_clkgen CONFIG.VCO_DIV 1
+ad_ip_parameter axi_adrv903x_rx_clkgen CONFIG.VCO_MUL 4
+ad_ip_parameter axi_adrv903x_rx_clkgen CONFIG.CLK0_DIV 4
+
+ad_ip_instance axi_adxcvr axi_adrv903x_rx_xcvr
+ad_ip_parameter axi_adrv903x_rx_xcvr CONFIG.LINK_MODE $ENCODER_SEL
+ad_ip_parameter axi_adrv903x_rx_xcvr CONFIG.NUM_OF_LANES $MAX_RX_NUM_OF_LANES
+ad_ip_parameter axi_adrv903x_rx_xcvr CONFIG.QPLL_ENABLE 0
+ad_ip_parameter axi_adrv903x_rx_xcvr CONFIG.TX_OR_RX_N 0
+ad_ip_parameter axi_adrv903x_rx_xcvr CONFIG.SYS_CLK_SEL 3
+ad_ip_parameter axi_adrv903x_rx_xcvr CONFIG.OUT_CLK_SEL 3
+
+adi_axi_jesd204_rx_create axi_adrv903x_rx_jesd $RX_NUM_OF_LANES $RX_NUM_LINKS $ENCODER_SEL
+ad_ip_parameter axi_adrv903x_rx_jesd/rx CONFIG.TPL_DATA_PATH_WIDTH $RX_DATAPATH_WIDTH
+
+ad_ip_instance util_cpack2 util_adrv903x_rx_cpack [list \
+ NUM_OF_CHANNELS $RX_NUM_OF_CONVERTERS \
+ SAMPLES_PER_CHANNEL $RX_SAMPLES_PER_CHANNEL \
+ SAMPLE_DATA_WIDTH $RX_DMA_SAMPLE_WIDTH \
+ ]
+
+set adc_data_offload_size [expr $adc_data_width / 8 * 2**$adc_fifo_address_width]
+ ad_data_offload_create $adc_data_offload_name \
+ 0 \
+ 0 \
+ $adc_data_offload_size \
+ $adc_data_width \
+ $adc_data_width \
+ $do_axi_data_width \
+ {}
+ 1
+
+adi_tpl_jesd204_rx_create rx_adrv903x_tpl_core $RX_NUM_OF_LANES \
+ $RX_NUM_OF_CONVERTERS \
+ $RX_SAMPLES_PER_FRAME \
+ $RX_SAMPLE_WIDTH \
+ $RX_DATAPATH_WIDTH \
+ $RX_DMA_SAMPLE_WIDTH
+
+ad_ip_instance axi_dmac axi_adrv903x_rx_dma
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.DMA_TYPE_SRC 1
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.DMA_TYPE_DEST 0
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.ID 0
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.SYNC_TRANSFER_START 0
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.DMA_LENGTH_WIDTH 24
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.DMA_2D_TRANSFER 0
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.MAX_BYTES_PER_BURST 4096
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.CYCLIC 0
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.DMA_DATA_WIDTH_SRC $adc_dma_data_width
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.DMA_DATA_WIDTH_DEST [expr min(512, $adc_dma_data_width)]
+ad_ip_parameter axi_adrv903x_rx_dma CONFIG.CACHE_COHERENT $CACHE_COHERENCY
+
+set tx_ref_clk tx_ref_clk_0
+set tx_ref_clk_1 tx_ref_clk_1
+set rx_ref_clk rx_ref_clk_0
+set rx_os_ref_clk rx_os_ref_clk_0
+
+create_bd_port -dir I $tx_ref_clk
+create_bd_port -dir I $tx_ref_clk_1
+create_bd_port -dir I $rx_ref_clk
+create_bd_port -dir I $rx_os_ref_clk
+
+if {$ORX_ENABLE} {
+ # adc-obs peripherals
+
+ ad_ip_instance axi_clkgen axi_adrv903x_rx_os_clkgen
+ ad_ip_parameter axi_adrv903x_rx_os_clkgen CONFIG.ID 2
+ ad_ip_parameter axi_adrv903x_rx_os_clkgen CONFIG.CLKIN_PERIOD 4
+ ad_ip_parameter axi_adrv903x_rx_os_clkgen CONFIG.VCO_DIV 1
+ ad_ip_parameter axi_adrv903x_rx_os_clkgen CONFIG.VCO_MUL 4
+ ad_ip_parameter axi_adrv903x_rx_os_clkgen CONFIG.CLK0_DIV 4
+
+ ad_ip_instance axi_adxcvr axi_adrv903x_rx_os_xcvr
+ ad_ip_parameter axi_adrv903x_rx_os_xcvr CONFIG.LINK_MODE $ENCODER_SEL
+ ad_ip_parameter axi_adrv903x_rx_os_xcvr CONFIG.NUM_OF_LANES $MAX_RX_OS_NUM_OF_LANES
+ ad_ip_parameter axi_adrv903x_rx_os_xcvr CONFIG.QPLL_ENABLE 0
+ ad_ip_parameter axi_adrv903x_rx_os_xcvr CONFIG.TX_OR_RX_N 0
+ ad_ip_parameter axi_adrv903x_rx_os_xcvr CONFIG.SYS_CLK_SEL 3
+ ad_ip_parameter axi_adrv903x_rx_os_xcvr CONFIG.OUT_CLK_SEL 3
+
+ adi_axi_jesd204_rx_create axi_adrv903x_rx_os_jesd $RX_OS_NUM_OF_LANES $RX_OS_NUM_LINKS $ENCODER_SEL
+ ad_ip_parameter axi_adrv903x_rx_os_jesd/rx CONFIG.TPL_DATA_PATH_WIDTH $RX_OS_DATAPATH_WIDTH
+
+ ad_ip_instance util_cpack2 util_adrv903x_rx_os_cpack [list \
+ NUM_OF_CHANNELS $RX_OS_NUM_OF_CONVERTERS \
+ SAMPLES_PER_CHANNEL $RX_OS_SAMPLES_PER_CHANNEL \
+ SAMPLE_DATA_WIDTH $RX_OS_SAMPLE_WIDTH \
+ ]
+
+ adi_tpl_jesd204_rx_create rx_os_adrv903x_tpl_core $RX_OS_NUM_OF_LANES \
+ $RX_OS_NUM_OF_CONVERTERS \
+ $RX_OS_SAMPLES_PER_FRAME \
+ $RX_OS_SAMPLE_WIDTH \
+ $RX_OS_DATAPATH_WIDTH \
+ $RX_OS_DMA_SAMPLE_WIDTH
+
+ ad_ip_instance axi_dmac axi_adrv903x_rx_os_dma
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.DMA_TYPE_SRC 2
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.DMA_TYPE_DEST 0
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.CYCLIC 0
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.SYNC_TRANSFER_START 1
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.DMA_DATA_WIDTH_SRC [expr $RX_OS_SAMPLE_WIDTH * $RX_OS_NUM_OF_CONVERTERS * $RX_OS_SAMPLES_PER_CHANNEL];
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.MAX_BYTES_PER_BURST 4096
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.DMA_DATA_WIDTH_DEST 128
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.FIFO_SIZE 32
+ ad_ip_parameter axi_adrv903x_rx_os_dma CONFIG.CACHE_COHERENT $CACHE_COHERENCY
+}
+# common cores
+
+ad_ip_instance util_adxcvr util_adrv903x_xcvr
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_NUM_OF_LANES [expr $MAX_RX_NUM_OF_LANES + $MAX_RX_OS_NUM_OF_LANES]
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TX_NUM_OF_LANES $MAX_TX_NUM_OF_LANES
+ad_ip_parameter util_adrv903x_xcvr CONFIG.LINK_MODE $ENCODER_SEL
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_LANE_RATE $RX_LANE_RATE
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TX_LANE_RATE $TX_LANE_RATE
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_OUT_DIV 1
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TX_OUT_DIV 1
+ad_ip_parameter util_adrv903x_xcvr CONFIG.CPLL_FBDIV 2
+ad_ip_parameter util_adrv903x_xcvr CONFIG.CPLL_FBDIV_4_5 5
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_CLK25_DIV 20
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TX_CLK25_DIV 20
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_PMA_CFG 0x280A
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_CDR_CFG 0x0b000023ff10400020
+ad_ip_parameter util_adrv903x_xcvr CONFIG.QPLL_FBDIV 33
+ad_ip_parameter util_adrv903x_xcvr CONFIG.QPLL_REFCLK_DIV 1
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TX_LANE_INVERT 240
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_LANE_INVERT 255
+ad_ip_parameter util_adrv903x_xcvr CONFIG.CPLL_CFG0 0x1fa
+ad_ip_parameter util_adrv903x_xcvr CONFIG.CPLL_CFG1 0x23
+ad_ip_parameter util_adrv903x_xcvr CONFIG.CPLL_CFG2 0x2
+ad_ip_parameter util_adrv903x_xcvr CONFIG.A_TXDIFFCTRL 0xC
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXCDR_CFG0 0x3
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXCDR_CFG2_GEN2 0x269
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXCDR_CFG2_GEN4 0x164
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXCDR_CFG3 0x12
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXCDR_CFG3_GEN2 0x12
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXCDR_CFG3_GEN3 0x12
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXCDR_CFG3_GEN4 0x12
+ad_ip_parameter util_adrv903x_xcvr CONFIG.CH_HSPMUX 0x6868
+ad_ip_parameter util_adrv903x_xcvr CONFIG.PREIQ_FREQ_BST 1
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXPI_CFG0 0x4
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXPI_CFG1 0x0
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TXPI_CFG 0x0
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TX_PI_BIASSET 3
+ad_ip_parameter util_adrv903x_xcvr CONFIG.POR_CFG 0x0
+ad_ip_parameter util_adrv903x_xcvr CONFIG.QPLL_CFG0 0x333c
+ad_ip_parameter util_adrv903x_xcvr CONFIG.QPLL_CFG4 0x45
+ad_ip_parameter util_adrv903x_xcvr CONFIG.PPF0_CFG 0xF00
+ad_ip_parameter util_adrv903x_xcvr CONFIG.QPLL_CP 0xFF
+ad_ip_parameter util_adrv903x_xcvr CONFIG.QPLL_CP_G3 0xF
+ad_ip_parameter util_adrv903x_xcvr CONFIG.QPLL_LPF 0x31D
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXDFE_KH_CFG2 {0x2631}
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RXDFE_KH_CFG3 {0x411C}
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_WIDEMODE_CDR {"01"}
+ad_ip_parameter util_adrv903x_xcvr CONFIG.RX_XMODE_SEL {"0"}
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TXPI_CFG0 {0x0000}
+ad_ip_parameter util_adrv903x_xcvr CONFIG.TXPI_CFG1 {0x0000}
+
+# xcvr interfaces
+
+ad_connect $sys_cpu_resetn util_adrv903x_xcvr/up_rstn
+ad_connect $sys_cpu_clk util_adrv903x_xcvr/up_clk
+
+# Tx
+ad_connect adrv903x_tx_device_clk axi_adrv903x_tx_clkgen/clk_0
+ad_connect core_clk axi_adrv903x_tx_clkgen/clk
+
+ad_xcvrcon util_adrv903x_xcvr axi_adrv903x_tx_xcvr axi_adrv903x_tx_jesd {} {} adrv903x_tx_device_clk $MAX_TX_NUM_OF_LANES {6 7 5 4 2 0 1 3}
+
+ad_xcvrpll $tx_ref_clk util_adrv903x_xcvr/qpll_ref_clk_0
+ad_xcvrpll axi_adrv903x_tx_xcvr/up_pll_rst util_adrv903x_xcvr/up_qpll_rst_0
+ad_xcvrpll $tx_ref_clk_1 util_adrv903x_xcvr/qpll_ref_clk_4
+ad_xcvrpll axi_adrv903x_tx_xcvr/up_pll_rst util_adrv903x_xcvr/up_qpll_rst_4
+
+# Rx
+ad_connect adrv903x_rx_device_clk axi_adrv903x_rx_clkgen/clk_0
+ad_connect core_clk axi_adrv903x_rx_clkgen/clk
+
+ad_xcvrcon util_adrv903x_xcvr axi_adrv903x_rx_xcvr axi_adrv903x_rx_jesd {} {} adrv903x_rx_device_clk $MAX_RX_NUM_OF_LANES {1 3 0 2 7 4 5 6}
+
+for {set i 0} {$i < 4} {incr i} {
+ ad_xcvrpll $rx_ref_clk util_adrv903x_xcvr/cpll_ref_clk_$i
+ ad_xcvrpll axi_adrv903x_rx_xcvr/up_pll_rst util_adrv903x_xcvr/up_cpll_rst_$i
+ if {$RX_NUM_OF_LANES > 4} {
+ ad_xcvrpll $rx_ref_clk util_adrv903x_xcvr/cpll_ref_clk_p[expr $i+4]
+ ad_xcvrpll axi_adrv903x_rx_xcvr/up_pll_rst util_adrv903x_xcvr/up_cpll_rst_$[expr $i+4]
+ }
+}
+
+if {$ORX_ENABLE} {
+# Rx - OBS
+ ad_connect adrv903x_rx_os_device_clk axi_adrv903x_rx_os_clkgen/clk_0
+ ad_connect core_clk axi_adrv903x_rx_os_clkgen/clk
+
+ ad_xcvrcon util_adrv903x_xcvr axi_adrv903x_rx_os_xcvr axi_adrv903x_rx_os_jesd {4 5 6 7} {} adrv903x_rx_os_device_clk $MAX_RX_OS_NUM_OF_LANES {7 4 5 6}
+
+ for {set i 0} {$i < 4} {incr i} {
+ set ch [expr $i + 4]
+ ad_xcvrpll $rx_os_ref_clk util_adrv903x_xcvr/cpll_ref_clk_$ch
+ ad_xcvrpll axi_adrv903x_rx_os_xcvr/up_pll_rst util_adrv903x_xcvr/up_cpll_rst_$ch
+ }
+
+ delete_bd_objs [get_bd_ports rx_sync_$MAX_RX_NUM_OF_LANES]
+ delete_bd_objs [get_bd_ports rx_sysref_$MAX_RX_NUM_OF_LANES]
+ ad_connect rx_os_sync axi_adrv903x_rx_os_jesd_sync
+ ad_connect rx_os_sysref sysref_3
+}
+
+# connections (dac)
+
+ad_connect adrv903x_tx_device_clk tx_adrv903x_tpl_core/link_clk
+ad_connect axi_adrv903x_tx_jesd/tx_data tx_adrv903x_tpl_core/link
+
+ad_connect adrv903x_tx_device_clk util_adrv903x_tx_upack/clk
+ad_connect adrv903x_tx_device_clk_rstgen/peripheral_reset util_adrv903x_tx_upack/reset
+
+for {set i 0} {$i < $TX_NUM_OF_CONVERTERS} {incr i} {
+ ad_connect tx_adrv903x_tpl_core/dac_enable_$i util_adrv903x_tx_upack/enable_$i
+ ad_connect util_adrv903x_tx_upack/fifo_rd_data_$i tx_adrv903x_tpl_core/dac_data_$i
+}
+ad_connect tx_adrv903x_tpl_core/dac_dunf GND
+ad_connect tx_adrv903x_tpl_core/dac_valid_0 util_adrv903x_tx_upack/fifo_rd_en
+ad_connect util_adrv903x_tx_upack/s_axis_valid VCC
+ad_connect $sys_dma_clk axi_adrv903x_tx_dma/m_axis_aclk
+ad_connect $sys_dma_resetn axi_adrv903x_tx_dma/m_src_axi_aresetn
+
+ad_connect adrv903x_tx_device_clk $dac_data_offload_name/m_axis_aclk
+ad_connect $sys_dma_clk $dac_data_offload_name/s_axis_aclk
+ad_connect adrv903x_tx_device_clk_rstgen/peripheral_aresetn $dac_data_offload_name/m_axis_aresetn
+ad_connect $sys_dma_resetn $dac_data_offload_name/s_axis_aresetn
+ad_connect $sys_cpu_resetn $dac_data_offload_name/s_axi_aresetn
+ad_connect $dac_data_offload_name/s_axis axi_adrv903x_tx_dma/m_axis
+ad_connect util_adrv903x_tx_upack/s_axis $dac_data_offload_name/m_axis
+ad_connect $dac_data_offload_name/init_req axi_adrv903x_tx_dma/m_axis_xfer_req
+ad_connect $dac_data_offload_name/sync_ext GND
+
+# connections (adc)
+
+ad_connect adrv903x_rx_device_clk rx_adrv903x_tpl_core/link_clk
+ad_connect axi_adrv903x_rx_jesd/rx_sof rx_adrv903x_tpl_core/link_sof
+ad_connect axi_adrv903x_rx_jesd/rx_data_tdata rx_adrv903x_tpl_core/link_data
+ad_connect axi_adrv903x_rx_jesd/rx_data_tvalid rx_adrv903x_tpl_core/link_valid
+ad_connect adrv903x_rx_device_clk util_adrv903x_rx_cpack/clk
+ad_connect adrv903x_rx_device_clk_rstgen/peripheral_reset util_adrv903x_rx_cpack/reset
+
+for {set i 0} {$i < $RX_NUM_OF_CONVERTERS} {incr i} {
+ ad_connect rx_adrv903x_tpl_core/adc_enable_$i util_adrv903x_rx_cpack/enable_$i
+ ad_connect rx_adrv903x_tpl_core/adc_data_$i util_adrv903x_rx_cpack/fifo_wr_data_$i
+}
+ad_connect $sys_dma_resetn axi_adrv903x_rx_dma/m_dest_axi_aresetn
+ad_connect $sys_dma_clk axi_adrv903x_rx_dma/s_axis_aclk
+
+ad_connect rx_adrv903x_tpl_core/adc_valid_0 util_adrv903x_rx_cpack/fifo_wr_en
+ad_connect rx_adrv903x_tpl_core/adc_dovf util_adrv903x_rx_cpack/fifo_wr_overflow
+
+ad_connect adrv903x_rx_device_clk $adc_data_offload_name/s_axis_aclk
+ad_connect $sys_dma_clk $adc_data_offload_name/m_axis_aclk
+ad_connect adrv903x_rx_device_clk_rstgen/peripheral_aresetn $adc_data_offload_name/s_axis_aresetn
+ad_connect $sys_dma_resetn $adc_data_offload_name/m_axis_aresetn
+ad_connect $sys_cpu_resetn $adc_data_offload_name/s_axi_aresetn
+ad_connect util_adrv903x_rx_cpack/packed_fifo_wr_data $adc_data_offload_name/s_axis_tdata
+ad_connect util_adrv903x_rx_cpack/packed_fifo_wr_en $adc_data_offload_name/s_axis_tvalid
+ad_connect $adc_data_offload_name/s_axis_tlast GND
+ad_connect $adc_data_offload_name/s_axis_tkeep VCC
+ad_connect $adc_data_offload_name/m_axis axi_adrv903x_rx_dma/s_axis
+ad_connect $adc_data_offload_name/init_req axi_adrv903x_rx_dma/s_axis_xfer_req
+ad_connect $adc_data_offload_name/sync_ext GND
+
+if {$ORX_ENABLE} {
+ # connections (adc-obs)
+ ad_connect adrv903x_rx_os_device_clk rx_os_adrv903x_tpl_core/link_clk
+ ad_connect axi_adrv903x_rx_os_jesd/rx_sof rx_os_adrv903x_tpl_core/link_sof
+ ad_connect axi_adrv903x_rx_os_jesd/rx_data_tdata rx_os_adrv903x_tpl_core/link_data
+ ad_connect axi_adrv903x_rx_os_jesd/rx_data_tvalid rx_os_adrv903x_tpl_core/link_valid
+
+ ad_connect adrv903x_rx_os_device_clk util_adrv903x_rx_os_cpack/clk
+ ad_connect adrv903x_rx_os_device_clk_rstgen/peripheral_reset util_adrv903x_rx_os_cpack/reset
+ ad_connect adrv903x_rx_os_device_clk axi_adrv903x_rx_os_dma/fifo_wr_clk
+
+ for {set i 0} {$i < $RX_OS_NUM_OF_CONVERTERS} {incr i} {
+ ad_connect rx_os_adrv903x_tpl_core/adc_enable_$i util_adrv903x_rx_os_cpack/enable_$i
+ ad_connect rx_os_adrv903x_tpl_core/adc_data_$i util_adrv903x_rx_os_cpack/fifo_wr_data_$i
+ }
+ ad_connect $sys_dma_resetn axi_adrv903x_rx_os_dma/m_dest_axi_aresetn
+
+ ad_connect rx_os_adrv903x_tpl_core/adc_valid_0 util_adrv903x_rx_os_cpack/fifo_wr_en
+ ad_connect rx_os_adrv903x_tpl_core/adc_dovf util_adrv903x_rx_os_cpack/fifo_wr_overflow
+
+ ad_connect util_adrv903x_rx_os_cpack/packed_fifo_wr axi_adrv903x_rx_os_dma/fifo_wr
+ ad_connect util_adrv903x_rx_os_cpack/packed_sync axi_adrv903x_rx_os_dma/sync
+}
+
+# Sync at TPL level
+create_bd_port -dir I ext_sync_in
+
+# ADC (Rx) external sync
+ad_ip_parameter rx_adrv903x_tpl_core/adc_tpl_core CONFIG.EXT_SYNC 1
+ad_connect ext_sync_in rx_adrv903x_tpl_core/adc_tpl_core/adc_sync_in
+
+ad_ip_instance util_vector_logic manual_sync_or [list \
+ C_SIZE 1 \
+ C_OPERATION {or} \
+]
+ad_connect rx_adrv903x_tpl_core/adc_tpl_core/adc_sync_manual_req_out manual_sync_or/Op1
+ad_connect manual_sync_or/Res rx_adrv903x_tpl_core/adc_tpl_core/adc_sync_manual_req_in
+
+# DAC (Tx) external sync
+ad_ip_parameter tx_adrv903x_tpl_core/dac_tpl_core CONFIG.EXT_SYNC 1
+ad_connect ext_sync_in tx_adrv903x_tpl_core/dac_tpl_core/dac_sync_in
+
+ad_connect tx_adrv903x_tpl_core/dac_tpl_core/dac_sync_manual_req_out manual_sync_or/Op2
+ad_connect manual_sync_or/Res tx_adrv903x_tpl_core/dac_tpl_core/dac_sync_manual_req_in
+
+# interconnect (cpu)
+
+ad_cpu_interconnect 0x44A00000 rx_adrv903x_tpl_core
+ad_cpu_interconnect 0x44A04000 tx_adrv903x_tpl_core
+ad_cpu_interconnect 0x44A80000 axi_adrv903x_tx_xcvr
+ad_cpu_interconnect 0x44A60000 axi_adrv903x_rx_xcvr
+ad_cpu_interconnect 0x44A90000 axi_adrv903x_tx_jesd
+ad_cpu_interconnect 0x7c420000 axi_adrv903x_tx_dma
+ad_cpu_interconnect 0x44AA0000 axi_adrv903x_rx_jesd
+ad_cpu_interconnect 0x7c400000 axi_adrv903x_rx_dma
+ad_cpu_interconnect 0x7c440000 $dac_data_offload_name
+ad_cpu_interconnect 0x7c450000 $adc_data_offload_name
+ad_cpu_interconnect 0x43C10000 axi_adrv903x_rx_clkgen
+ad_cpu_interconnect 0x43C00000 axi_adrv903x_tx_clkgen
+if {$ORX_ENABLE} {
+ ad_cpu_interconnect 0x44A08000 rx_os_adrv903x_tpl_core
+ ad_cpu_interconnect 0x7C800000 axi_adrv903x_rx_os_dma
+ ad_cpu_interconnect 0x43C20000 axi_adrv903x_rx_os_clkgen
+ ad_cpu_interconnect 0x45A60000 axi_adrv903x_rx_os_xcvr
+ ad_cpu_interconnect 0x45AA0000 axi_adrv903x_rx_os_jesd
+}
+ad_mem_hp0_interconnect $sys_cpu_clk sys_ps7/S_AXI_HP0
+ad_mem_hp0_interconnect $sys_cpu_clk axi_adrv903x_rx_xcvr/m_axi
+if {$ORX_ENABLE} {
+ ad_mem_hp0_interconnect $sys_cpu_clk axi_adrv903x_rx_os_xcvr/m_axi
+}
+# interconnect (mem/dac)
+
+if {$CACHE_COHERENCY} {
+ ad_mem_hpc0_interconnect $sys_dma_clk sys_ps8/S_AXI_HPC0
+ ad_mem_hpc0_interconnect $sys_dma_clk axi_adrv903x_rx_dma/m_dest_axi
+ ad_mem_hpc1_interconnect $sys_dma_clk sys_ps8/S_AXI_HPC1
+ ad_mem_hpc1_interconnect $sys_dma_clk axi_adrv903x_tx_dma/m_src_axi
+ if {$ORX_ENABLE} {
+ ad_mem_hpc1_interconnect $sys_dma_clk axi_adrv903x_rx_os_dma/m_dest_axi
+ }
+} else {
+ ad_mem_hp2_interconnect $sys_dma_clk sys_ps7/S_AXI_HP2
+ ad_mem_hp2_interconnect $sys_dma_clk axi_adrv903x_rx_dma/m_dest_axi
+ ad_mem_hp3_interconnect $sys_dma_clk sys_ps7/S_AXI_HP3
+ ad_mem_hp3_interconnect $sys_dma_clk axi_adrv903x_tx_dma/m_src_axi
+ if {$ORX_ENABLE} {
+ ad_mem_hp1_interconnect $sys_dma_clk sys_ps7/S_AXI_HP1
+ ad_mem_hp1_interconnect $sys_dma_clk axi_adrv903x_rx_os_dma/m_dest_axi
+ }
+}
+
+# interrupts
+
+ad_cpu_interrupt ps-10 mb-7 axi_adrv903x_tx_jesd/irq
+ad_cpu_interrupt ps-11 mb-8 axi_adrv903x_rx_jesd/irq
+ad_cpu_interrupt ps-13 mb-12 axi_adrv903x_tx_dma/irq
+ad_cpu_interrupt ps-14 mb-13 axi_adrv903x_rx_dma/irq
+if {$ORX_ENABLE} {
+ ad_cpu_interrupt ps-12 mb-15 axi_adrv903x_rx_os_jesd/irq
+ ad_cpu_interrupt ps-15 mb-14 axi_adrv903x_rx_os_dma/irq
+}
diff --git a/projects/adrv903x/zcu102/Makefile b/projects/adrv903x/zcu102/Makefile
new file mode 100644
index 0000000000..f86623cfef
--- /dev/null
+++ b/projects/adrv903x/zcu102/Makefile
@@ -0,0 +1,41 @@
+####################################################################################
+## Copyright (c) 2018 - 2025 Analog Devices, Inc.
+### SPDX short identifier: BSD-1-Clause
+## Auto-generated, do not modify!
+####################################################################################
+
+PROJECT_NAME := adrv903x_zcu102
+
+M_DEPS += ../common/adrv903x_bd.tcl
+M_DEPS += ../../scripts/adi_pd.tcl
+M_DEPS += ../../common/zcu102/zcu102_system_constr.xdc
+M_DEPS += ../../common/zcu102/zcu102_system_bd.tcl
+M_DEPS += ../../common/xilinx/data_offload_bd.tcl
+M_DEPS += ../../common/xilinx/adi_fir_filter_constr.xdc
+M_DEPS += ../../common/xilinx/adi_fir_filter_bd.tcl
+M_DEPS += ../../../library/util_hbm/scripts/adi_util_hbm.tcl
+M_DEPS += ../../../library/util_cdc/sync_bits.v
+M_DEPS += ../../../library/jesd204/scripts/jesd204.tcl
+M_DEPS += ../../../library/common/util_pulse_gen.v
+M_DEPS += ../../../library/common/ad_iobuf.v
+M_DEPS += ../../../library/common/ad_bus_mux.v
+
+LIB_DEPS += axi_clkgen
+LIB_DEPS += axi_dmac
+LIB_DEPS += axi_sysid
+LIB_DEPS += data_offload
+LIB_DEPS += jesd204/ad_ip_jesd204_tpl_adc
+LIB_DEPS += jesd204/ad_ip_jesd204_tpl_dac
+LIB_DEPS += jesd204/axi_jesd204_rx
+LIB_DEPS += jesd204/axi_jesd204_tx
+LIB_DEPS += jesd204/jesd204_rx
+LIB_DEPS += jesd204/jesd204_tx
+LIB_DEPS += sysid_rom
+LIB_DEPS += util_do_ram
+LIB_DEPS += util_hbm
+LIB_DEPS += util_pack/util_cpack2
+LIB_DEPS += util_pack/util_upack2
+LIB_DEPS += xilinx/axi_adxcvr
+LIB_DEPS += xilinx/util_adxcvr
+
+include ../../scripts/project-xilinx.mk
diff --git a/projects/adrv903x/zcu102/README.md b/projects/adrv903x/zcu102/README.md
new file mode 100644
index 0000000000..dd5673614a
--- /dev/null
+++ b/projects/adrv903x/zcu102/README.md
@@ -0,0 +1,69 @@
+
+
+# ADRV903X/ZCU102 HDL Project
+
+- VADJ with which it was tested in hardware: 1.8V
+
+## Building the project
+
+The parameters configurable through the `make` command, can be found below, as well as in the **system_project.tcl** file; it contains the default configuration.
+
+```
+cd projects/adrv903x/zcu102
+make
+```
+
+All of the RX/TX link modes can be found in the [ADRV9030 data sheet](https://www.analog.com/media/en/technical-documentation/data-sheets/adrv9030.pdf). We offer support for only a few of them.
+
+If other configurations are desired, then the parameters from the HDL project (see below) need to be changed, as well as the Linux/no-OS project configurations.
+
+**Warning**: The JESD link mode is configured using the ADRV903x plugin from [ACE](https://wiki.analog.com/resources/tools-software/ace) application. The device tree is the same, regardless of the configuration: [zynqmp-zcu102-rev10-adrv903x.dts](https://github.com/analogdevicesinc/linux/blob/main/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv903x.dts)
+
+The overwritable parameters from the environment:
+
+- JESD_MODE - link layer encoder mode used;
+ - 8B10B - 8b10b link layer defined in JESD204B
+ - 64B66B - 64b66b link layer defined in JESD204C
+- ORX_ENABLE : Additional data path for RX-OS
+ - 0 - Disabled (used for profiles with RX-OS disabled)
+ - 1 - Enabled (used for profiles with RX-OS enabled)
+- [RX/TX]_LANE_RATE - lane rate of the [RX/TX] link
+- [RX/TX/RX_OS]_JESD_M - [RX/TX/RX_OS] number of converters per link
+- [RX/TX/RX_OS]_JESD_L - [RX/TX/RX_OS] number of lanes per link
+- [RX/TX/RX_OS]_JESD_S - [RX/TX/RX_OS] number of samples per converter per frame
+- [RX/TX/RX_OS]_JESD_NP - [RX/TX/RX_OS] number of bits per sample
+- [TX/RX/RX_OS]_TPL_WIDTH - [RX/TX/RX_OS] TPL data path width in bits
+- [RX/TX/RX_OS]_NUM_LINKS - [RX/TX/RX_OS] number of links
+
+### Example configurations
+
+#### Default configuration
+
+This specific command is equivalent to running `make` only:
+
+```
+make JESD_MODE=64B66B \
+RX_LANE_RATE=16.22 \
+TX_LANE_RATE=16.22 \
+ORX_ENABLE=1 \
+RX_NUM_LINKS=1 \
+TX_NUM_LINK=1 \
+RX_OS_NUM_LINKS=1 \
+RX_JESD_M=16 \
+RX_JESD_L=4 \
+RX_JESD_S=1 \
+RX_JESD_NP=16 \
+RX_TPL_WIDTH={} \
+RX_OS_JESD_M=8 \
+RX_OS_JESD_L=4 \
+RX_OS_JESD_S=1 \
+RX_OS_JESD_NP=16 \
+RX_OS_TPL_WIDTH={} \
+TX_JESD_M=16 \
+TX_JESD_L=8 \
+TX_JESD_S=1 \
+TX_JESD_NP=16 \
+TX_TPL_WIDTH={}
+```
+
+Corresponding device tree: [zynqmp-zcu102-rev10-adrv903x.dts](https://github.com/analogdevicesinc/linux/blob/main/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv903x.dts)
diff --git a/projects/adrv903x/zcu102/system_bd.tcl b/projects/adrv903x/zcu102/system_bd.tcl
new file mode 100644
index 0000000000..ed5f2cf0f3
--- /dev/null
+++ b/projects/adrv903x/zcu102/system_bd.tcl
@@ -0,0 +1,49 @@
+###############################################################################
+## Copyright (C) 2025 Analog Devices, Inc. All rights reserved.
+### SPDX short identifier: ADIBSD
+###############################################################################
+
+## ADC FIFO depth in samples per converter
+set adc_fifo_samples_per_converter [expr 32*1024]
+## DAC FIFO depth in samples per converter
+set dac_fifo_samples_per_converter [expr 32*1024]
+
+source $ad_hdl_dir/projects/common/zcu102/zcu102_system_bd.tcl
+source $ad_hdl_dir/projects/scripts/adi_pd.tcl
+
+set mem_init_sys_path [get_env_param ADI_PROJECT_DIR ""]mem_init_sys.txt;
+
+#system ID
+ad_ip_parameter axi_sysid_0 CONFIG.ROM_ADDR_BITS 10
+ad_ip_parameter rom_sys_0 CONFIG.PATH_TO_FILE "[pwd]/$mem_init_sys_path"
+ad_ip_parameter rom_sys_0 CONFIG.ROM_ADDR_BITS 10
+
+set sys_cstring "JESD_MODE=$ad_project_params(JESD_MODE)\
+ORX_ENABLE=$ad_project_params(ORX_ENABLE)\
+RX:RATE=$ad_project_params(RX_LANE_RATE)\
+M=$ad_project_params(RX_JESD_M)\
+L=$ad_project_params(RX_JESD_L)\
+S=$ad_project_params(RX_JESD_S)\
+NP=$ad_project_params(RX_JESD_NP)\
+TPL_WIDTH=$ad_project_params(RX_TPL_WIDTH)\
+LINKS=$ad_project_params(RX_NUM_LINKS)\
+TX:RATE=$ad_project_params(TX_LANE_RATE)\
+M=$ad_project_params(TX_JESD_M)\
+L=$ad_project_params(TX_JESD_L)\
+S=$ad_project_params(TX_JESD_S)\
+NP=$ad_project_params(TX_JESD_NP)\
+TPL_WIDTH=$ad_project_params(TX_TPL_WIDTH)\
+LINKS=$ad_project_params(TX_NUM_LINKS)\
+ORX:RATE=$ad_project_params(RX_LANE_RATE)\
+M=$ad_project_params(RX_OS_JESD_M)\
+L=$ad_project_params(RX_OS_JESD_L)\
+S=$ad_project_params(RX_OS_JESD_S)\
+NP=$ad_project_params(RX_OS_JESD_NP)\
+TPL_WIDTH=$ad_project_params(RX_OS_TPL_WIDTH)\
+LINKS=$ad_project_params(RX_OS_NUM_LINKS)"
+
+sysid_gen_sys_init_file $sys_cstring 10
+
+source ../common/adrv903x_bd.tcl
+
+ad_ip_parameter sys_ps8 CONFIG.PSU__CRL_APB__PL1_REF_CTRL__FREQMHZ {300}
diff --git a/projects/adrv903x/zcu102/system_constr.xdc b/projects/adrv903x/zcu102/system_constr.xdc
new file mode 100644
index 0000000000..ebfe1c5adb
--- /dev/null
+++ b/projects/adrv903x/zcu102/system_constr.xdc
@@ -0,0 +1,118 @@
+###############################################################################
+## Copyright (C) 2025 Analog Devices, Inc. All rights reserved.
+### SPDX short identifier: ADIBSD
+###############################################################################
+
+#adrv903x
+
+set_property -dict {PACKAGE_PIN G8} [get_ports ref_clk0_p] ; ## D4 FMC0_GBTCLK0_M2C_C_P MGTREFCLK0P_229
+set_property -dict {PACKAGE_PIN G7} [get_ports ref_clk0_n] ; ## D5 FMC0_GBTCLK0_M2C_C_N MGTREFCLK0N_229
+set_property -dict {PACKAGE_PIN L8} [get_ports ref_clk1_p] ; ## B20 FMC0_GBTCLK1_M2C_C_P MGTREFCLK0P_228
+set_property -dict {PACKAGE_PIN L7} [get_ports ref_clk1_n] ; ## B21 FMC0_GBTCLK1_M2C_C_N MGTREFCLK0N_228
+
+set_property -dict {PACKAGE_PIN AA7 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports core_clk_p] ; ## H4 FMC0_CLK0_M2C_P IO_L12P_T1U_N10_GC_66
+set_property -dict {PACKAGE_PIN AA6 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports core_clk_n] ; ## H5 FMC0_CLK0_M2C_N IO_L12N_T1U_N11_GC_66
+
+set_property -dict {PACKAGE_PIN P2} [get_ports rx_data_p[0]] ; ## A18 FMC0_DP5_M2C_P MGTHRXP1_228 (rx_data_n[0])
+set_property -dict {PACKAGE_PIN P1} [get_ports rx_data_n[0]] ; ## A19 FMC0_DP5_M2C_N MGTHRXN1_228 (rx_data_p[0])
+set_property -dict {PACKAGE_PIN L4} [get_ports rx_data_p[1]] ; ## A14 FMC0_DP4_M2C_P MGTHRXP3_228 (rx_data_n[1])
+set_property -dict {PACKAGE_PIN L3} [get_ports rx_data_n[1]] ; ## A15 FMC0_DP4_M2C_N MGTHRXN3_228 (rx_data_p[1])
+set_property -dict {PACKAGE_PIN T2} [get_ports rx_data_p[2]] ; ## B16 FMC0_DP6_M2C_P MGTHRXP0_228 (rx_data_n[2])
+set_property -dict {PACKAGE_PIN T1} [get_ports rx_data_n[2]] ; ## B17 FMC0_DP6_M2C_N MGTHRXN0_228 (rx_data_p[2])
+set_property -dict {PACKAGE_PIN M2} [get_ports rx_data_p[3]] ; ## B12 FMC0_DP7_M2C_P MGTHRXP2_228 (rx_data_n[3])
+set_property -dict {PACKAGE_PIN M1} [get_ports rx_data_n[3]] ; ## B13 FMC0_DP7_M2C_N MGTHRXN2_228 (rx_data_p[3])
+set_property -dict {PACKAGE_PIN F2} [get_ports rx_data_p[4]] ; ## A6 FMC0_DP2_M2C_P MGTHRXP3_229 (rx_data_n[4])
+set_property -dict {PACKAGE_PIN F1} [get_ports rx_data_n[4]] ; ## A7 FMC0_DP2_M2C_N MGTHRXN3_229 (rx_data_p[4])
+set_property -dict {PACKAGE_PIN K2} [get_ports rx_data_p[5]] ; ## A10 FMC0_DP3_M2C_P MGTHRXP0_229 (rx_data_n[5])
+set_property -dict {PACKAGE_PIN K1} [get_ports rx_data_n[5]] ; ## A11 FMC0_DP3_M2C_N MGTHRXN0_229 (rx_data_p[5])
+set_property -dict {PACKAGE_PIN J4} [get_ports rx_data_p[6]] ; ## A2 FMC0_DP1_M2C_P MGTHRXP1_229 (rx_data_n[6])
+set_property -dict {PACKAGE_PIN J3} [get_ports rx_data_n[6]] ; ## A3 FMC0_DP1_M2C_N MGTHRXN1_229 (rx_data_p[6])
+set_property -dict {PACKAGE_PIN H2} [get_ports rx_data_p[7]] ; ## C6 FMC0_DP0_M2C_P MGTHRXP2_229 (rx_data_n[7])
+set_property -dict {PACKAGE_PIN H1} [get_ports rx_data_n[7]] ; ## C7 FMC0_DP0_M2C_N MGTHRXN2_229 (rx_data_p[7])
+
+set_property -dict {PACKAGE_PIN G4} [get_ports tx_data_p[0]] ; ## C2 FMC0_DP0_C2M_P MGTHTXP2_229 (tx_data_n[0])
+set_property -dict {PACKAGE_PIN G3} [get_ports tx_data_n[0]] ; ## C3 FMC0_DP0_C2M_N MGTHTXN2_229 (tx_data_p[0])
+set_property -dict {PACKAGE_PIN F6} [get_ports tx_data_p[1]] ; ## A26 FMC0_DP2_C2M_P MGTHTXP3_229 (tx_data_n[1])
+set_property -dict {PACKAGE_PIN F5} [get_ports tx_data_n[1]] ; ## A27 FMC0_DP2_C2M_N MGTHTXN3_229 (tx_data_p[1])
+set_property -dict {PACKAGE_PIN H6} [get_ports tx_data_p[2]] ; ## A22 FMC0_DP1_C2M_P MGTHTXP1_229 (tx_data_n[2])
+set_property -dict {PACKAGE_PIN H5} [get_ports tx_data_n[2]] ; ## A23 FMC0_DP1_C2M_N MGTHTXN1_229 (tx_data_p[2])
+set_property -dict {PACKAGE_PIN K6} [get_ports tx_data_p[3]] ; ## A30 FMC0_DP3_C2M_P MGTHTXP0_229 (tx_data_n[3])
+set_property -dict {PACKAGE_PIN K5} [get_ports tx_data_n[3]] ; ## A31 FMC0_DP3_C2M_N MGTHTXN0_229 (tx_data_p[3])
+set_property -dict {PACKAGE_PIN N4} [get_ports tx_data_p[4]] ; ## B32 FMC0_DP7_C2M_P MGTHTXP2_228 (tx_data_p[4])
+set_property -dict {PACKAGE_PIN N3} [get_ports tx_data_n[4]] ; ## B33 FMC0_DP7_C2M_N MGTHTXN2_228 (tx_data_n[4])
+set_property -dict {PACKAGE_PIN R4} [get_ports tx_data_p[5]] ; ## B36 FMC0_DP6_C2M_P MGTHTXP0_228 (tx_data_p[5])
+set_property -dict {PACKAGE_PIN R3} [get_ports tx_data_n[5]] ; ## B37 FMC0_DP6_C2M_N MGTHTXN0_228 (tx_data_n[5])
+set_property -dict {PACKAGE_PIN P6} [get_ports tx_data_p[6]] ; ## A38 FMC0_DP5_C2M_P MGTHTXP1_228 (tx_data_p[6])
+set_property -dict {PACKAGE_PIN P5} [get_ports tx_data_n[6]] ; ## A39 FMC0_DP5_C2M_N MGTHTXN1_228 (tx_data_n[6])
+set_property -dict {PACKAGE_PIN M6} [get_ports tx_data_p[7]] ; ## A34 FMC0_DP4_C2M_P MGTHTXP3_228 (tx_data_p[7])
+set_property -dict {PACKAGE_PIN M5} [get_ports tx_data_n[7]] ; ## A35 FMC0_DP4_C2M_N MGTHTXN3_228 (tx_data_n[7])
+
+set_property -dict {PACKAGE_PIN V2 IOSTANDARD LVDS} [get_ports rx_sync_p] ; ## H7 FMC0_LA02_P IO_L23P_T3U_N8_66
+set_property -dict {PACKAGE_PIN V1 IOSTANDARD LVDS} [get_ports rx_sync_n] ; ## H8 FMC0_LA02_N IO_L23N_T3U_N9_66
+set_property -dict {PACKAGE_PIN U11 IOSTANDARD LVDS} [get_ports rx_os_sync_p] ; ## H37 FMC0_LA32_P IO_L6P_T0U_N10_AD6P_67
+set_property -dict {PACKAGE_PIN T11 IOSTANDARD LVDS} [get_ports rx_os_sync_n] ; ## H38 FMC0_LA32_N IO_L6N_T0U_N11_AD6N_67
+set_property -dict {PACKAGE_PIN V8 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_p] ; ## G33 FMC0_LA31_P IO_L7P_T1L_N0_QBC_AD13P_67
+set_property -dict {PACKAGE_PIN V7 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_n] ; ## G34 FMC0_LA31_N IO_L7N_T1L_N1_QBC_AD13N_67
+set_property -dict {PACKAGE_PIN M11 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_1_p] ; ## G27 FMC0_LA25_P IO_L17P_T2U_N8_AD10P_67
+set_property -dict {PACKAGE_PIN L11 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_1_n] ; ## G28 FMC0_LA25_N IO_L17N_T2U_N9_AD10N_67
+set_property -dict {PACKAGE_PIN V12 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_2_p] ; ## G36 FMC0_LA33_P IO_L5P_T0U_N8_AD14P_67
+set_property -dict {PACKAGE_PIN V11 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_2_n] ; ## G37 FMC0_LA33_N IO_L5N_T0U_N9_AD14N_67
+
+set_property -dict {PACKAGE_PIN AB4 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports sysref_in_p] ; ## D8 FMC0_LA01_CC_P IO_L16P_T2U_N6_QBC_AD3P_66
+set_property -dict {PACKAGE_PIN AC4 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports sysref_in_n] ; ## D9 FMC0_LA01_CC_N IO_L16N_T2U_N7_QBC_AD3N_66
+set_property -dict {PACKAGE_PIN Y2 IOSTANDARD LVDS} [get_ports sysref_out_p] ; ## G9 FMC0_LA03_P IO_L22P_T3U_N6_DBC_AD0P_66
+set_property -dict {PACKAGE_PIN Y1 IOSTANDARD LVDS} [get_ports sysref_out_n] ; ## G10 FMC0_LA03_N IO_L22N_T3U_N7_DBC_AD0N_66
+
+set_property -dict {PACKAGE_PIN L10 IOSTANDARD LVCMOS18} [get_ports ad9528_sysref_req] ; ## C27 FMC0_LA27_N IO_L15N_T2L_N5_AD11N_67
+set_property -dict {PACKAGE_PIN AB3 IOSTANDARD LVCMOS18} [get_ports adrv903x_test] ; ## D11 FMC0_LA05_P IO_L20P_T3L_N2_AD1P_66
+
+set_property -dict {PACKAGE_PIN AC2 IOSTANDARD LVCMOS18} [get_ports adrv903x_orx0_enable] ; ## C10 FMC0_LA06_P IO_L19P_T3L_N0_DBC_AD9P_66
+set_property -dict {PACKAGE_PIN AC1 IOSTANDARD LVCMOS18} [get_ports adrv903x_orx1_enable] ; ## C11 FMC0_LA06_N IO_L19N_T3L_N1_DBC_AD9N_66
+set_property -dict {PACKAGE_PIN AB8 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx0_enable] ; ## D17 FMC0_LA13_P IO_L8P_T1L_N2_AD5P_66
+set_property -dict {PACKAGE_PIN AC8 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx1_enable] ; ## D18 FMC0_LA13_N IO_L8N_T1L_N3_AD5N_66
+set_property -dict {PACKAGE_PIN W5 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx2_enable] ; ## C14 FMC0_LA10_P IO_L15P_T2L_N4_AD11P_66
+set_property -dict {PACKAGE_PIN W4 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx3_enable] ; ## C15 FMC0_LA10_N IO_L15N_T2L_N5_AD11N_66
+set_property -dict {PACKAGE_PIN L16 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx4_enable] ; ## D23 FMC0_LA23_P IO_L19P_T3L_N0_DBC_AD9P_67
+set_property -dict {PACKAGE_PIN K16 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx5_enable] ; ## D24 FMC0_LA23_N IO_L19N_T3L_N1_DBC_AD9N_67
+set_property -dict {PACKAGE_PIN AC7 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx6_enable] ; ## C18 FMC0_LA14_P IO_L7P_T1L_N0_QBC_AD13P_66
+set_property -dict {PACKAGE_PIN AC6 IOSTANDARD LVCMOS18} [get_ports adrv903x_trx7_enable] ; ## C19 FMC0_LA14_N IO_L7N_T1L_N1_QBC_AD13N_66
+
+set_property -dict {PACKAGE_PIN Y10 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[0]] ; ## H19 FMC0_LA15_P IO_L6P_T0U_N10_AD6P_66
+set_property -dict {PACKAGE_PIN Y9 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[1]] ; ## H20 FMC0_LA15_N IO_L6N_T0U_N11_AD6N_66
+set_property -dict {PACKAGE_PIN Y12 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[2]] ; ## G18 FMC0_LA16_P IO_L5P_T0U_N8_AD14P_66
+set_property -dict {PACKAGE_PIN AA12 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[3]] ; ## G19 FMC0_LA16_N IO_L5N_T0U_N9_AD14N_66
+set_property -dict {PACKAGE_PIN P12 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[4]] ; ## H25 FMC0_LA21_P IO_L21P_T3L_N4_AD8P_67
+set_property -dict {PACKAGE_PIN N12 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[5]] ; ## H26 FMC0_LA21_N IO_L21N_T3L_N5_AD8N_67
+set_property -dict {PACKAGE_PIN N9 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[6]] ; ## C22 FMC0_LA18_CC_P IO_L16P_T2U_N6_QBC_AD3P_67
+set_property -dict {PACKAGE_PIN N8 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[7]] ; ## C23 FMC0_LA18_CC_N IO_L16N_T2U_N7_QBC_AD3N_67
+set_property -dict {PACKAGE_PIN L13 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[8]] ; ## H22 FMC0_LA19_P IO_L23P_T3U_N8_67
+set_property -dict {PACKAGE_PIN K13 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[9]] ; ## H23 FMC0_LA19_N IO_L23N_T3U_N9_67
+set_property -dict {PACKAGE_PIN M15 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[10]] ; ## G24 FMC0_LA22_P IO_L20P_T3L_N2_AD1P_67
+set_property -dict {PACKAGE_PIN M14 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[11]] ; ## G25 FMC0_LA22_N IO_L20N_T3L_N3_AD1N_67
+set_property -dict {PACKAGE_PIN AA2 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[12]] ; ## H10 FMC0_LA04_P IO_L21P_T3L_N4_AD8P_66
+set_property -dict {PACKAGE_PIN AA1 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[13]] ; ## H11 FMC0_LA04_N IO_L21N_T3L_N5_AD8N_66
+set_property -dict {PACKAGE_PIN U9 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[14]] ; ## G30 FMC0_LA29_P IO_L9P_T1L_N4_AD12P_67
+set_property -dict {PACKAGE_PIN U8 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[15]] ; ## G31 FMC0_LA29_N IO_L9N_T1L_N5_AD12N_67
+set_property -dict {PACKAGE_PIN W7 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[16]] ; ## G15 FMC0_LA12_P IO_L9P_T1L_N4_AD12P_66
+set_property -dict {PACKAGE_PIN W6 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[17]] ; ## G16 FMC0_LA12_N IO_L9N_T1L_N5_AD12N_66
+set_property -dict {PACKAGE_PIN AC3 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[18]] ; ## D12 FMC0_LA05_N IO_L20N_T3L_N3_AD1N_66
+set_property -dict {PACKAGE_PIN N13 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[19]] ; ## G21 FMC0_LA20_P IO_L22P_T3U_N6_DBC_AD0P_67
+set_property -dict {PACKAGE_PIN V6 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[20]] ; ## H34 FMC0_LA30_P IO_L8P_T1L_N2_AD5P_67
+set_property -dict {PACKAGE_PIN U6 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[21]] ; ## H35 FMC0_LA30_N IO_L8N_T1L_N3_AD5N_67
+set_property -dict {PACKAGE_PIN L12 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[22]] ; ## H28 FMC0_LA24_P IO_L18P_T2U_N10_AD2P_67
+set_property -dict {PACKAGE_PIN K12 IOSTANDARD LVCMOS18} [get_ports adrv903x_gpio[23]] ; ## H29 FMC0_LA24_N IO_L18N_T2U_N11_AD2N_67
+
+set_property -dict {PACKAGE_PIN M10 IOSTANDARD LVCMOS18} [get_ports ad9528_reset_b] ; ## C26 FMC0_LA27_P IO_L15P_T2L_N4_AD11P_67
+set_property -dict {PACKAGE_PIN M13 IOSTANDARD LVCMOS18} [get_ports adrv903x_reset_b] ; ## G22 FMC0_LA20_N IO_L22N_T3U_N7_DBC_AD0N_67
+
+set_property -dict {PACKAGE_PIN W2 IOSTANDARD LVCMOS18} [get_ports spi_csn_adrv903x] ; ## D14 FMC0_LA09_P IO_L24P_T3U_N10_66
+set_property -dict {PACKAGE_PIN W1 IOSTANDARD LVCMOS18} [get_ports spi_csn_ad9528] ; ## D15 FMC0_LA09_N IO_L24N_T3U_N11_66
+set_property -dict {PACKAGE_PIN U5 IOSTANDARD LVCMOS18} [get_ports spi_clk] ; ## H13 FMC0_LA07_P IO_L18P_T2U_N10_AD2P_66
+set_property -dict {PACKAGE_PIN V4 IOSTANDARD LVCMOS18} [get_ports spi_miso] ; ## G12 FMC0_LA08_P IO_L17P_T2U_N8_AD10P_66
+set_property -dict {PACKAGE_PIN U4 IOSTANDARD LVCMOS18} [get_ports spi_mosi] ; ## H14 FMC0_LA07_N IO_L18N_T2U_N11_AD2N_66
+
+# clocks
+
+create_clock -period 4.069 -name device_clk [get_ports core_clk_p]
+create_clock -period 2.035 -name tx_ref_clk [get_ports ref_clk0_p]
+create_clock -period 2.035 -name rx_ref_clk [get_ports ref_clk1_p]
diff --git a/projects/adrv903x/zcu102/system_project.tcl b/projects/adrv903x/zcu102/system_project.tcl
new file mode 100644
index 0000000000..f517ba733d
--- /dev/null
+++ b/projects/adrv903x/zcu102/system_project.tcl
@@ -0,0 +1,63 @@
+###############################################################################
+## Copyright (C) 2025 Analog Devices, Inc. All rights reserved.
+### SPDX short identifier: ADIBSD
+###############################################################################
+
+source ../../../scripts/adi_env.tcl
+source $ad_hdl_dir/projects/scripts/adi_project_xilinx.tcl
+source $ad_hdl_dir/projects/scripts/adi_board.tcl
+
+# get_env_param retrieves parameter value from the environment if exists,
+# other case use the default value
+#
+# Use over-writable parameters from the environment.
+#
+# Parameter description:
+# Parameter description:
+# JESD_MODE : Used link layer encoder mode
+# 64B66B - 64b66b link layer defined in JESD 204C
+# 8B10B - 8b10b link layer defined in JESD 204B
+# ORX_ENABLE : Additional data path for RX-OS
+# 0 - Disabled (used for profiles with RX-OS disabled)
+# 1 - Enabled (used for profiles with RX-OS enabled)
+# TX_LANE_RATE : Transceiver line rate of the TX link
+# RX_LANE_RATE : Transceiver line rate of the RX link
+# [TX/RX/RX_OS]_NUM_LINKS : Number of links
+# [TX/RX/RX_OS]_JESD_M : Number of converters per link
+# [TX/RX/RX_OS]_JESD_L : Number of lanes per link
+# [TX/RX/RX_OS]_JESD_S : Number of samples per frame
+# [TX/RX/RX_OS]_JESD_NP : Number of bits per sample
+# [TX/RX/RX_OS]_TPL_WIDTH : TPL data path width in bits
+
+adi_project adrv903x_zcu102 0 [list \
+ JESD_MODE [get_env_param JESD_MODE 64B66B] \
+ ORX_ENABLE [get_env_param ORX_ENABLE 1] \
+ TX_LANE_RATE [get_env_param TX_LANE_RATE 16.22] \
+ RX_LANE_RATE [get_env_param RX_LANE_RATE 16.22] \
+ TX_NUM_LINKS [get_env_param TX_NUM_LINKS 1] \
+ RX_NUM_LINKS [get_env_param RX_NUM_LINKS 1] \
+ RX_OS_NUM_LINKS [get_env_param RX_OS_NUM_LINKS 1] \
+ TX_JESD_M [get_env_param TX_JESD_M 16] \
+ TX_JESD_L [get_env_param TX_JESD_L 8] \
+ TX_JESD_S [get_env_param TX_JESD_S 1] \
+ TX_JESD_NP [get_env_param TX_JESD_NP 16] \
+ TX_TPL_WIDTH [get_env_param TX_TPL_WIDTH {}] \
+ RX_JESD_M [get_env_param RX_JESD_M 16] \
+ RX_JESD_L [get_env_param RX_JESD_L 4] \
+ RX_JESD_S [get_env_param RX_JESD_S 1] \
+ RX_JESD_NP [get_env_param RX_JESD_NP 16] \
+ RX_TPL_WIDTH [get_env_param RX_TPL_WIDTH {}] \
+ RX_OS_JESD_M [get_env_param RX_OS_JESD_M 8] \
+ RX_OS_JESD_L [get_env_param RX_OS_JESD_L 4] \
+ RX_OS_JESD_S [get_env_param RX_OS_JESD_S 1] \
+ RX_OS_JESD_NP [get_env_param RX_OS_JESD_NP 16] \
+ RX_OS_TPL_WIDTH [get_env_param RX_OS_TPL_WIDTH {}] \
+]
+
+adi_project_files adrv903x_zcu102 [list \
+ "system_top.v" \
+ "system_constr.xdc"\
+ "$ad_hdl_dir/library/common/ad_iobuf.v" \
+ "$ad_hdl_dir/projects/common/zcu102/zcu102_system_constr.xdc" ]
+
+adi_project_run adrv903x_zcu102
diff --git a/projects/adrv903x/zcu102/system_top.v b/projects/adrv903x/zcu102/system_top.v
new file mode 100644
index 0000000000..099991c8a3
--- /dev/null
+++ b/projects/adrv903x/zcu102/system_top.v
@@ -0,0 +1,256 @@
+// ***************************************************************************
+// ***************************************************************************
+// Copyright (C) 2025 Analog Devices, Inc. All rights reserved.
+//
+// In this HDL repository, there are many different and unique modules, consisting
+// of various HDL (Verilog or VHDL) components. The individual modules are
+// developed independently, and may be accompanied by separate and unique license
+// terms.
+//
+// The user should read each of these license terms, and understand the
+// freedoms and responsibilities that he or she has by using this source/core.
+//
+// This core is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+// A PARTICULAR PURPOSE.
+//
+// Redistribution and use of source or resulting binaries, with or without modification
+// of this file, are permitted under one of the following two license terms:
+//
+// 1. The GNU General Public License version 2 as published by the
+// Free Software Foundation, which can be found in the top level directory
+// of this repository (LICENSE_GPL2), and also online at:
+//
+//
+// OR
+//
+// 2. An ADI specific BSD license, which can be found in the top level directory
+// of this repository (LICENSE_ADIBSD), and also on-line at:
+// https://github.com/analogdevicesinc/hdl/blob/main/LICENSE_ADIBSD
+// This will allow to generate bit files and not release the source code,
+// as long as it attaches to an ADI device.
+//
+// ***************************************************************************
+// ***************************************************************************
+
+`timescale 1ns/100ps
+
+module system_top (
+ input core_clk_p,
+ input core_clk_n,
+ input ref_clk0_p,
+ input ref_clk0_n,
+ input ref_clk1_p,
+ input ref_clk1_n,
+ input [ 7:0] rx_data_p,
+ input [ 7:0] rx_data_n,
+ output [ 7:0] tx_data_p,
+ output [ 7:0] tx_data_n,
+ output rx_sync_p,
+ output rx_sync_n,
+ output rx_os_sync_p,
+ output rx_os_sync_n,
+ input tx_sync_p,
+ input tx_sync_n,
+ input tx_sync_1_p,
+ input tx_sync_1_n,
+ input tx_sync_2_p,
+ input tx_sync_2_n,
+
+ input sysref_in_p,
+ input sysref_in_n,
+ output sysref_out_p,
+ output sysref_out_n,
+
+ input [12:0] gpio_bd_i,
+ output [ 7:0] gpio_bd_o,
+
+ output spi_csn_ad9528,
+ output spi_csn_adrv903x,
+ output spi_clk,
+ output spi_mosi,
+ input spi_miso,
+
+ inout ad9528_reset_b,
+ inout ad9528_sysref_req,
+ inout adrv903x_trx0_enable,
+ inout adrv903x_trx1_enable,
+ inout adrv903x_trx2_enable,
+ inout adrv903x_trx3_enable,
+ inout adrv903x_trx4_enable,
+ inout adrv903x_trx5_enable,
+ inout adrv903x_trx6_enable,
+ inout adrv903x_trx7_enable,
+ inout adrv903x_orx0_enable,
+ inout adrv903x_orx1_enable,
+ inout adrv903x_test,
+ inout adrv903x_reset_b,
+
+ inout [23:0] adrv903x_gpio
+);
+
+ // internal signals
+
+ wire [94:0] gpio_i;
+ wire [94:0] gpio_o;
+ wire [94:0] gpio_t;
+ wire [ 2:0] spi_csn;
+ wire rx_sync;
+ wire rx_os_sync;
+ wire tx_sync;
+ wire sysref;
+ wire ref_clk0;
+ wire ref_clk1;
+
+ assign gpio_i[94:70] = gpio_o[94:70];
+ assign gpio_i[31:21] = gpio_o[31:21];
+
+ assign sysref_out = 0;
+
+ // instantiations
+
+ IBUFDS i_ibufds_core_clk (
+ .I (core_clk_p),
+ .IB (core_clk_n),
+ .O (core_clk));
+
+ BUFG i_ibufg_core_clk (
+ .I (core_clk),
+ .O (core_clk_buf));
+
+ IBUFDS_GTE4 i_ibufds_ref_clk0 (
+ .CEB (1'd0),
+ .I (ref_clk0_p),
+ .IB (ref_clk0_n),
+ .O (ref_clk0),
+ .ODIV2 (ref_clk0_odiv2));
+
+ IBUFDS_GTE4 i_ibufds_ref_clk1 (
+ .CEB (1'd0),
+ .I (ref_clk1_p),
+ .IB (ref_clk1_n),
+ .O (ref_clk1),
+ .ODIV2 (ref_clk1_odiv2));
+
+ OBUFDS i_obufds_rx_sync (
+ .I (rx_sync),
+ .O (rx_sync_p),
+ .OB (rx_sync_n));
+
+ OBUFDS i_obufds_rx_os_sync (
+ .I (rx_os_sync),
+ .O (rx_os_sync_p),
+ .OB (rx_os_sync_n));
+
+ OBUFDS i_obufds_sysref_out (
+ .I (sysref_out),
+ .O (sysref_out_p),
+ .OB (sysref_out_n));
+
+ IBUFDS i_ibufds_tx_sync (
+ .I (tx_sync_p),
+ .IB (tx_sync_n),
+ .O (tx_sync));
+
+ IBUFDS i_ibufds_tx_sync_1 (
+ .I (tx_sync_1_p),
+ .IB (tx_sync_1_n),
+ .O (tx_sync_1));
+
+ IBUFDS i_ibufds_tx_sync_2 (
+ .I (tx_sync_2_p),
+ .IB (tx_sync_2_n),
+ .O (tx_sync_2));
+
+ IBUFDS i_ibufds_sysref (
+ .I (sysref_in_p),
+ .IB (sysref_in_n),
+ .O (sysref));
+
+ ad_iobuf #(
+ .DATA_WIDTH(38)
+ ) i_iobuf (
+ .dio_t ({gpio_t[69:32]}),
+ .dio_i ({gpio_o[69:32]}),
+ .dio_o ({gpio_i[69:32]}),
+ .dio_p ({ ad9528_reset_b, // 69
+ ad9528_sysref_req, // 68
+ adrv903x_trx0_enable, // 67
+ adrv903x_trx1_enable, // 66
+ adrv903x_trx2_enable, // 65
+ adrv903x_trx3_enable, // 64
+ adrv903x_trx4_enable, // 63
+ adrv903x_trx5_enable, // 62
+ adrv903x_trx6_enable, // 61
+ adrv903x_trx7_enable, // 60
+ adrv903x_orx0_enable, // 59
+ adrv903x_orx1_enable, // 58
+ adrv903x_test, // 57
+ adrv903x_reset_b, // 56
+ adrv903x_gpio})); // 55-32
+
+ assign gpio_i[ 7: 0] = gpio_o[ 7: 0];
+ assign gpio_i[20: 8] = gpio_bd_i;
+ assign gpio_bd_o = gpio_o[ 7: 0];
+
+ assign spi_csn_ad9528 = spi_csn[1];
+ assign spi_csn_adrv903x = spi_csn[0];
+
+ system_wrapper i_system_wrapper (
+ .gpio_i (gpio_i),
+ .gpio_o (gpio_o),
+ .gpio_t (gpio_t),
+ .core_clk(core_clk_buf),
+ .rx_data_0_n (rx_data_n[2]),
+ .rx_data_0_p (rx_data_p[2]),
+ .rx_data_1_n (rx_data_n[0]),
+ .rx_data_1_p (rx_data_p[0]),
+ .rx_data_2_n (rx_data_n[3]),
+ .rx_data_2_p (rx_data_p[3]),
+ .rx_data_3_n (rx_data_n[1]),
+ .rx_data_3_p (rx_data_p[1]),
+ .rx_data_4_n (rx_data_n[5]),
+ .rx_data_4_p (rx_data_p[5]),
+ .rx_data_5_n (rx_data_n[6]),
+ .rx_data_5_p (rx_data_p[6]),
+ .rx_data_6_n (rx_data_n[7]),
+ .rx_data_6_p (rx_data_p[7]),
+ .rx_data_7_n (rx_data_n[4]),
+ .rx_data_7_p (rx_data_p[4]),
+ .rx_ref_clk_0 (ref_clk0),
+ .rx_sync_0 (rx_sync),
+ .rx_sysref_0 (sysref),
+ .rx_os_ref_clk_0 (ref_clk0),
+ .rx_os_sync (rx_os_sync),
+ .rx_os_sysref (sysref),
+ .spi0_sclk (spi_clk),
+ .spi0_csn (spi_csn),
+ .spi0_miso (spi_miso),
+ .spi0_mosi (spi_mosi),
+ .spi1_sclk (),
+ .spi1_csn (),
+ .spi1_miso (1'b0),
+ .spi1_mosi (),
+ .tx_data_0_n (tx_data_n[5]),
+ .tx_data_0_p (tx_data_p[5]),
+ .tx_data_1_n (tx_data_n[6]),
+ .tx_data_1_p (tx_data_p[6]),
+ .tx_data_2_n (tx_data_n[4]),
+ .tx_data_2_p (tx_data_p[4]),
+ .tx_data_3_n (tx_data_n[7]),
+ .tx_data_3_p (tx_data_p[7]),
+ .tx_data_4_n (tx_data_n[3]),
+ .tx_data_4_p (tx_data_p[3]),
+ .tx_data_5_n (tx_data_n[2]),
+ .tx_data_5_p (tx_data_p[2]),
+ .tx_data_6_n (tx_data_n[0]),
+ .tx_data_6_p (tx_data_p[0]),
+ .tx_data_7_n (tx_data_n[1]),
+ .tx_data_7_p (tx_data_p[1]),
+ .tx_ref_clk_0 (ref_clk0),
+ .tx_ref_clk_1 (ref_clk0),
+ .tx_sync_0 (tx_sync),
+ .tx_sysref_0 (sysref),
+ .ext_sync_in (sysref));
+
+endmodule