FMCOMMS2/3/4 HDL Project

Overview

The AD-FMCOMMS2/3/4/5-EBZ are a high-speed analog modules designed to showcase the AD9361 or AD9364, a high performance, highly integrated RF agile transceiver intended for use in RF applications.

Tip

The AD9361 consists of 2 receive and 2 transmit paths (2 Rx, 2 Tx).

The only difference between AD9361 and AD9364 (1 Rx, 1 Tx) is the number of channels. Software, HDL, pinout, etc - is all the same.

The AD9361 and AD9364 chips operate in the 70MHz to 6GHz range, covering most licensed and unlicensed bands. The boards, due to discrete external components may have less performance on some of the RF input/output connectors (for example - the FMCOMMS2 and specific connectors on the FMCOMMS5 are specifically tuned to 2.4GHz). The AD9361 and AD9364 both supports channel bandwidths from less than 200kHz to 56MHz by both changing sample rate, and by changing digital filters, and decimation inside the device itself.

The digital interface consists of 12 bits of DDR data and supports full duplex operation in all configurations up to 2×2. The transmit and receive data paths share a single clock. The data is sent or received based on the configuration (programmable) from separate transmit and to separate receive chains.

Supported boards

Supported devices

Supported carriers

Evaluation board

Carrier

FMC slot

FMCOMMS2/3/4

KC705

FMC LPC

KCU105

FMC LPC

VC707

FMC HPC1

ZC702

FMC LPC

ZC706

FMC LPC

ZCU102

FMC HPC0

ZedBoard

FMC LPC

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 external DDR memory via DMA. An optional off-line FFT core may be used to generate a spectrum plot.

In the transmit direction, complex I and Q signals are generated for each RF. The digital source could either be an internal DDS or from the external 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.

FMCOMMS2/3/4 block diagram

Clock scheme

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

The board provides a 40MHz crystal for the AD9361.

Please note that the clock divider module in this project does a divide-by 2 operation to get the desired clock for a single channel in case of mode 1R1T (2x RF channels), and a divide-by 4 in case of 2R2T (4x RF channels).

FMCOMMS2/3/4 clock domains

Configuration modes

The AD9361 IP in this HDL project is configured to work only in LVDS interface; it supports two configuration modes:

  • 2R2T - 2x receive and 2x transmit RF channels

  • 1R1T - 1x receive and 1x transmit RF channel

Both support only the dual port half duplex operating mode. The maximum data rate (for combined I and Q words) is 61.44MSPS in DDR. For more details about these modes, check the AD9361 Reference Manual, Table 48 “Maximum Data Rates and Signal Bandwidths”.

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).

Instance

Zynq/Microblaze

ZynqMP

axi_ad9361_adc_dma

0x7C40_0000

0x9C40_0000

axi_ad9361_dac_dma

0x7C42_0000

0x9C42_0000

axi_ad9361

0x7902_0000

0x9902_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

AD9361

0

PMOD

SPI 1

spi_udc

0

GPIOs

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

GPIO signal

Direction

HDL GPIO EMIO

Software GPIO

Software GPIO

(from FPGA view)

Zynq-7000

Zynq MP

gpio_muxout_tx*

INOUT

50

104

128

gpio_muxout_rx*

INOUT

49

103

127

up_txnrx

IN

48

102

126

up_enable

IN

47

101

125

gpio_resetb

OUT

46

100

124

gpio_sync

OUT

45

99

123

gpio_en_agc

OUT

44

98

122

gpio_ctl[3:0]

OUT

43:40

97:94

121:118

gpio_status[7:0]

IN

39:32

93:86

117:110

Note

* - used only in Zed and ZC702 projects.

gpio_muxout_tx is connected to PMOD JA1.3, used for LO PLL0 TX at ADF4351 and gpio_muxout_rx is connected to PMOD JA1.9, used for LO PLL0 RX at ADF4351.

Interrupts

Below are the Programmable Logic interrupts used in the project.

Instance name

HDL

Linux Zynq

Actual Zynq

Linux ZynqMP

Actual ZynqMP

axi_ad9361_adc_dma

13

57

89

109

141

axi_ad9361_dac_dma

12

56

88

108

140

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.

When building the project for FMCOMMS3/4, it is the same as for FMCOMMS2. The only difference is in the Linux device tree, but in HDL there is no difference. So go to the hdl/projects/fmcomms2/$carrier location and run the make command.

Linux/Cygwin/WSL

~$
cd hdl/projects/fmcomms2/zcu102
~/hdl/projects/fmcomms2/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.