ADRV9001 HDL Project

Overview

This design allows controlling, receiving and transmitting sample stream from/to an ADRV9001/ADRV9002 device through two independent source-synchronous interface. Supports both CMOS and LVDS interface, but not at the same time. The selection of the I/O standard must be done by setting a parameter before building the project.

The design supports SDR or DDR modes in CMOS mode with 1 or 4 lanes, and in LVDS mode with 1 or 2 lanes. This is runtime configurable.. The complete list of supported modes can be consulted in the AXI ADRV9001 Interface Core documentation.

Supported boards

Supported devices

Supported carriers

Evaluation board

Carrier

FMC slot

ADRV9002

ZC706

FMC LPC

ZCU102

FMC HPC0

ZedBoard

FMC LPC

A10SoC

FMC HPCA

Block design

In the receive direction, each component of the delineated data is passed to a PN monitor. The monitor validates the digital interface signal capture and timing. The data then optionally DC-filtered, corrected for I/Q offset and phase mismatches and is written to the DDR memory via DMA.

In the transmit direction, complex I and Q signals are generated for each RF channel. The digital source could either be an internal DDS or from the DDR via VDMA. The internal DDS phase and frequency are programmable.

Block diagram

The data path and clock domains are depicted in the below diagram.

ADRV9001 block diagram

Configuration modes

The AXI ADRV9001 IP in this HDL project is configured to work in LVDS and CMOS interface; it supports two configuration modes:

  • 2R2T - 2x Rx and 2x Tx independent control and DMAs for the two RF channels

  • 1R1T - 1x Rx and 1x Tx common control and DMAs for the two RF channels also noted as R1_MODE

For any mode the number of RF channels(two) doesn’t change only the controlling instance and the DMAs.

The design has two receive paths and two transmit paths. One of the receive paths (Rx12) has four channels and the other (Rx2) two channels. These only work independently, not concomitantly. One must chose between two active paths (2R2T), or just the Rx12 (1R1T) path, which has four active channels, while Rx2 is disabled. The same applies to the transmit path but in the other direction.

When only the Rx12 path is active with four channels mode, the core will take ownership of both source synchronous interfaces. The requirement in this case is that both interfaces run at the same rate.

Regarding the INDEPENDENT_1R1T_SUPPORT and COMMON_2R2T_SUPPORT parameters, related to the above modes, their purpose is to remove the unused data paths, reducing in this way the resource utilisation. By default all modes/paths are available.

For more info see the parameter section of AXI ADRV9001.

Clock scheme

The clocks are managed by the device and are software programmable. Please refer to the device datasheet for the various clocks within the device.

The board provides a 38.4MHz crystal for the ADRV9002. It can also use an external reference clock.

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 CPU/Memory interconnects addresses).

AMD

Instance

Zynq/Microblaze

ZynqMP

axi_adrv9001

0x44A0_0000

0x84A00_0000

axi_adrv9001_rx1_dma

0x44A3_0000

0x84A30_0000

axi_adrv9001_rx2_dma

0x44A4_0000

0x84A40_0000

axi_adrv9001_tx1_dma

0x44A5_0000

0x84A50_0000

axi_adrv9001_tx2_dma

0x44A6_0000

0x84A60_0000

Intel

Instance

HPS

axi_adrv9001

0x0002_0000

axi_adc_dma

0x0004_0000

axi_adc_dma2

0x0004_1000

axi_dac_dma

0x0004_4000

axi_dac_dma2

0x0004_5000

avl_adrv9001_gpio

0x0006_0000

SPI connections

The SPI signals are controlled by a separate AXI based SPI core.

SPI type

SPI manager instance

SPI subordinate

CS

PS

SPI 0

ADRV9002

0

GPIOs

The device control and monitor signals are interfaced to a GPIO module.

GPIO signal

Direction (from FPGA view)

HDL EMIOGPIO

Software GPIO Zynq MP

tdd_sync_loc

OUT

56

134

vadj_err

IN

55

133

mssi_sync

INTERNAL

54

132

gpio_tx2_enable_in

OUT

51

129

gpio_tx1_enable_in

OUT

50

128

gpio_rx2_enable_in

OUT

49

127

gpio_rx1_enable_in

OUT

48

126

sm_fan_tach

INOUT

47

125

reset_trx

INOUT

46

124

mode

INOUT

45

123

gp_int

INOUT

44

122

dgpio_11

INOUT

43

121

dgpio_10

INOUT

42

120

dgpio_9

INOUT

41

119

dgpio_8

INOUT

40

118

dgpio_7

INOUT

39

117

dgpio_6

INOUT

38

116

dgpio_5

INOUT

37

115

dgpio_4

INOUT

36

114

dgpio_3

INOUT

35

113

dgpio_2

INOUT

34

112

dgpio_1

INOUT

33

111

dgpio_0

INOUT

32

110

Interrupts

Below are the Programmable Logic interrupts used in the project.

Instance name

HDL

Linux Zynq

Linux ZynqMP

axi_ad9361_adc_dma

13

57

109

axi_ad9361_dac_dma

12

56

108

axi_ad9361_dac_dma

10

54

106

axi_ad9361_dac_dma

9

53

105

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 ADI Kuiper Linux. If you want to build the sources, ADI makes them available on the HDL repository. To get the source you must clone the HDL repository.

Linux/Cygwin/WSL

~$
cd hdl/projects/adrv9001/zcu102
~/hdl/projects/adrv9001/zcu102$
make

A more comprehensive build guide can be found in the Build an HDL project user guide.

Resources

More information

Support

Analog Devices, Inc. will provide limited online support for anyone using the reference design with ADI components via the EngineerZone FPGA reference designs forum.

For questions regarding the ADI Linux device drivers, device trees, etc. from our Linux GitHub repository, the team will offer support on the EngineerZone Linux software drivers forum.

For questions concerning the ADI No-OS drivers, from our No-OS GitHub repository, the team will offer support on the EngineerZone microcontroller No-OS drivers forum.

It should be noted, that the older the tools’ versions and release branches are, the lower the chances to receive support from ADI engineers.