ADRV9001 DUAL HDL Project

Overview

This design allows controlling, receiving and transmitting sample stream from/to two ADRV9001/ADRV9002 devices(2x eval b) through four independent source synchronous interfaces for each direction and for each device. Supports both CMOS and LVDS interface, but not in the same time. The selection of the I/O standard must be done with a parameter during build.

The design supports SDR or DDR modes in CMOS mode with one of four lanes, as in LVDS mode one or two lane mode. This is runtime selectable. 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

2x ADRV9002

ZCU102

FMC HPC0 FMC HPC1

Block design

In the receive direction, each component of the delineated data is passed to a PN monitor. The monitors 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 four receive paths and four transmit paths. Two of the receive paths (Rx12) have 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 axi_adrv9001 core will take ownership of both of its source synchronous interfaces. The requirement in this case is that both interfaces, of an axi_adrv9001 core, 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 description section of AXI ADRV9001.

Clock scheme

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

Independently a board provides a 38.4MHz crystal for the ADRV9002. An external reference clock can also be used.

CPU/Memory interconnects addresses

Instance

ZynqMP

axi_adrv9001_1

0x84A00_0000

axi_adrv9001_1_rx1_dma

0x84A30_0000

axi_adrv9001_1_rx2_dma

0x84A40_0000

axi_adrv9001_1_tx1_dma

0x84A50_0000

axi_adrv9001_1_tx2_dma

0x84A60_0000

axi_adrv9001_2

0x84A70_0000

axi_adrv9001_2_rx1_dma

0x84A80_0000

axi_adrv9001_2_rx2_dma

0x84A90_0000

axi_adrv9001_2_tx1_dma

0x84AA0_0000

axi_adrv9001_2_tx2_dma

0x84AB0_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_1

0

PS

SPI 1

ADRV9002_2

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

FMC

adrv1_gpio_tx2_enable_in

OUT

76

154

HPC0

adrv1_gpio_tx1_enable_in

OUT

75

153

HPC0

adrv1_gpio_rx2_enable_in

OUT

74

152

HPC0

adrv1_gpio_rx1_enable_in

OUT

73

151

HPC0

adrv1_sm_fan_tach,

INOUT

72

150

HPC0

adrv1_reset_trx,

INOUT

71

149

HPC0

adrv1_mode,

INOUT

70

148

HPC0

adrv1_gp_int,

INOUT

69

147

HPC0

adrv1_dgpio_11,

INOUT

68

146

HPC0

adrv1_dgpio_10,

INOUT

67

145

HPC0

adrv1_dgpio_9,

INOUT

66

144

HPC0

adrv1_dgpio_8,

INOUT

65

143

HPC0

adrv1_dgpio_7,

INOUT

64

142

HPC0

adrv1_dgpio_6,

INOUT

63

141

HPC0

adrv1_dgpio_5,

INOUT

62

140

HPC0

adrv1_dgpio_4,

INOUT

61

139

HPC0

adrv1_dgpio_3,

INOUT

60

138

HPC0

adrv1_dgpio_2,

INOUT

59

137

HPC0

adrv1_dgpio_1,

INOUT

58

136

HPC0

adrv1_dgpio_0

INOUT

57

135

HPC0

adrv1_tdd_sync_loc

INTERNAL

56

134

HPC1

adrv1_vadj_err

IN

55

133

HPC1

adrv1_mssi_sync

INTERNAL

54

132

HPC1

adrv1_gpio_tx2_enable_in

OUT

51

129

HPC1

adrv1_gpio_tx1_enable_in

OUT

50

128

HPC1

adrv1_gpio_rx2_enable_in

OUT

49

127

HPC1

adrv1_gpio_rx1_enable_in

OUT

48

126

HPC1

adrv1_sm_fan_tach

INOUT

47

125

HPC1

adrv1_reset_trx

INOUT

46

124

HPC1

adrv1_mode

INOUT

45

123

HPC1

adrv1_gp_int

INOUT

44

122

HPC1

adrv1_dgpio_11

INOUT

43

121

HPC1

adrv1_dgpio_10

INOUT

42

120

HPC1

adrv1_dgpio_9

INOUT

41

119

HPC1

adrv1_dgpio_8

INOUT

40

118

HPC1

adrv1_dgpio_7

INOUT

39

117

HPC1

adrv1_dgpio_6

INOUT

38

116

HPC1

adrv1_dgpio_5

INOUT

37

115

HPC1

adrv1_dgpio_4

INOUT

36

114

HPC1

adrv1_dgpio_3

INOUT

35

113

HPC1

adrv1_dgpio_2

INOUT

34

112

HPC1

adrv1_dgpio_1

INOUT

33

111

HPC1

adrv1_dgpio_0

INOUT

32

110

HPC1

Interrupts

Below are the Programmable Logic interrupts used in the project.

Instance name

HDL

Linux ZynqMP

axi_adrv9001_1_rx1_dma

15

111

axi_adrv9001_1_rx2_dma

14

110

axi_adrv9001_1_tx1_dma

13

109

axi_adrv9001_1_tx2_dma

12

108

axi_adrv9001_2_rx1_dma

11

107

axi_adrv9001_2_rx2_dma

10

106

axi_adrv9001_2_tx1_dma

9

105

axi_adrv9001_2_tx2_dma

8

104

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_dual/zcu102
~/hdl/projects/adrv9001_dual/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.