ADRV9009
Recommended for New Designs
The ADRV9009 is a highly integrated, radio frequency (RF), agile transceiver offering dual transmitters and receivers, integrated synthesizers, and digital...
Datasheet
ADRV9009 on Analog.com
Good morning everyone,
I have taken over a project that features a JESD204 link with 16 channels (managing 8 ADRV9009 chips).
This project originated from Analog Devices' reference design, which was modified to work with 16 channels.
We are now creating a new project with a similar architecture, but the number of channels is reduced from 16 to 8, meaning we will only control 4 ADRV9009 chips.
The FPGA target is XCZU9EG-FFVB1156-2-e
Thus, the previous JESD204 parameters, which were:
have now been changed to:
The outputs of the IP core "util_adrv9009_xcvr" (such as tx_0_p
, tx_0_n
, etc.) are connected to specific pins that are fixed at the PCB level and route the signals to the different ADRV9009 chips. Here’s the current mapping:
#set_property -dict {PACKAGE_PIN K6} [get_ports tx_data_a_p[0]] (tx_0_p)
#set_property -dict {PACKAGE_PIN K5} [get_ports tx_data_a_n[0]] (tx_0_n)
#set_property -dict {PACKAGE_PIN H6} [get_ports tx_data_a_p[1]] (tx_1_p)
#set_property -dict {PACKAGE_PIN H5} [get_ports tx_data_a_n[1]] (tx_1_n)
#set_property -dict {PACKAGE_PIN K2} [get_ports rx_data_a_p[0]] (rx_0_n)
#set_property -dict {PACKAGE_PIN K1} [get_ports rx_data_a_n[0]] (rx_0_n)
#set_property -dict {PACKAGE_PIN J4} [get_ports rx_data_a_p[1]] (rx_1_p)
#set_property -dict {PACKAGE_PIN J3} [get_ports rx_data_a_n[1]] (rx_1_n)
With this configuration, the project synthesizes successfully. However, I need to remap the tx_0_p
, tx_0_n
, etc., to different pins, such as the tx_data_c_p
pins, and when I make this change, the project no longer implements, and I get the following error:
[Place 30-510] Unroutable Placement! A GTHE_COMMON / GTHE_CHANNEL clock component pair is not placed in a routable site pair. The GTHE_COMMON component can use the dedicated path between the GTHE_COMMON and the GTHE_CHANNEL if both are placed in the same clock region. If this suboptimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets i_system_wrapper/system_i/util_adrv9009_xcvr/inst/i_xcm_0/qpll2ch_clk] >
i_system_wrapper/system_i/util_adrv9009_xcvr/inst/i_xcm_0/i_gthe4_common (GTHE4_COMMON.QPLL0OUTCLK) is provisionally placed by clockplacer on GTHE4_COMMON_X1Y3
i_system_wrapper/system_i/util_adrv9009_xcvr/inst/i_xch_0/i_gthe4_channel (GTHE4_CHANNEL.QPLL0CLK) is locked to GTHE4_CHANNEL_X1Y5
i_system_wrapper/system_i/util_adrv9009_xcvr/inst/i_xch_1/i_gthe4_channel (GTHE4_CHANNEL.QPLL0CLK) is locked to GTHE4_CHANNEL_X1Y4
i_system_wrapper/system_i/util_adrv9009_xcvr/inst/i_xch_2/i_gthe4_channel (GTHE4_CHANNEL.QPLL0CLK) is locked to GTHE4_CHANNEL_X0Y9
i_system_wrapper/system_i/util_adrv9009_xcvr/inst/i_xch_3/i_gthe4_channel (GTHE4_CHANNEL.QPLL0CLK) is locked to GTHE4_CHANNEL_X0Y8
I understand that there is an issue with the GTHE components, but I am unsure how to instruct Vivado which specific GTHE to use for the designated output pins. The "util_adrv9009_xcvr" IP core does not offer many configurable options beyond a few parameters related to frequency management. How should I proceed to resolve this issue?
I appreciate your help in advance.
KemKing - Moved from FPGA Reference Designs to RF Transmitters and Transceivers. Post date updated from Monday, October 14, 2024 10:56 AM UTC to Monday, April 28, 2025 9:07 AM UTC to reflect the move.
Hi,
Apologies for the delayed reply.
Could you take a look at page 29 and page 15? https://docs.amd.com/v/u/en-US/ug578-ultrascale-gty-transceivers
And check carefully what quad you select since the clock and the data should be as close as possible.
Using the GT Wizard from Vivado GUI might help you to choose the right pins/quads (looks like this https://docs.amd.com/viewer/attachment/U2GQR49CyPTcdLAya2_2Xg/ppnGOig73uz9Jtlw8tHPkw)
Here we have an example with 4 devices: https://github.com/analogdevicesinc/hdl/blob/main/projects/adrv9009zu11eg/adrv2crr_fmcomms8/system_project.tcl
Best regards,
Iulia
i need to force the util_adrv9009_xcvr ip core to use the following GTHE4 Channels:
X1Y11; X1Y10 => QUAD X1Y2 => external clock coming to CLK0
X1Y5; X1Y4 => QUAD X1Y1 => clock from CLK0 of QUAD X1Y2
X0Y13; X0Y12 => QUAD X0Y3 => external clock coming to CLK0
X0Y9; X0Y8 => QUAD X0Y2 => clock from CLK0 of QUAD X0Y3
how i can achieve this configuration?
thanks.
Hi,
It is just a mater of constraints, chose the corresponding pins.
https://github.com/analogdevicesinc/hdl/blob/main/projects/adrv9009zu11eg/adrv2crr_fmcomms8/fmcomms8_constr.xdc#L29-L44
As Iulia pointed out, you should check the transceiver user guide, You will find there that the reference clock from a quad can drive only the adjacent quads.
Andrei
Hi,
It is just a mater of constraints, chose the corresponding pins.
https://github.com/analogdevicesinc/hdl/blob/main/projects/adrv9009zu11eg/adrv2crr_fmcomms8/fmcomms8_constr.xdc#L29-L44
As Iulia pointed out, you should check the transceiver user guide, You will find there that the reference clock from a quad can drive only the adjacent quads.
Andrei