PLUTO HDL Project

Overview

The ADALM-PLUTO Active Learning Module (PlutoSDR) is an easy to use tool available from Analog Devices Inc. (ADI) that can be used to introduce fundamentals of Software Defined Radio (SDR) or Radio Frequency (RF) or Communications as advanced topics in electrical engineering in a self or instructor lead setting.

Based on the AD9363, it offers one receive channel and one transmit channel which can be operated in full duplex, capable of generating or measuring RF analog signals from 325 to 3800 MHz, at up to 61.44 Mega Samples per Second (MSPS) with a 20 MHz bandwidth. The PlutoSDR is completely self-contained, fits nicely in a shirt pocket or backpack, and is entirely USB powered with the default firmware. With support for OS X™, Windows™ and Linux™, it allows exploration and understanding of RF systems no matter where the user is or when.

The 2nd Rx/Tx channel internal to the rev D is not test during production test. If it works - bonus! If it doesn’t work, Pluto is only advertised as a 1 Rx, 1 Tx radio, and that is guaranteed/production tested on each unit - and that is what you received.

Supported boards

Supported devices

Block design

In both receive and transmit directions, complex I and Q signals are generated for each RF.

Block diagram

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

PLUTO 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 AD9363. For more details about the clocking, check the AD9361 Reference Manual, page 14, “Reference Clock Requirements”.

Configuration modes

The AD9361 IP in this HDL project is configured to work only in CMOS 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”.

The following are the parameters of this project that can be configured:

  • TDD_SUPPORT: set to 1, adds the TDD; enables external synchronization through TDD. Must be set to 1 when SHARED_DEVCLK=1

  • TDD_CHANNEL_CNT

  • TDD_SYNC_WIDTH

  • TDD_SYNC_INT

  • TDD_SYNC_EXT

  • TDD_SYNC_EXT_CDC: if enabled, the CDC circuitry for the external sync signal is added

  • Check out this guide on more details regarding these parameters: AXI TDD

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

axi_ad9361_adc_dma

0x7C40_0000

axi_ad9361_dac_dma

0x7C42_0000

axi_spi

0x7C43_0000

axi_tdd_0

0x7C44_0000

axi_ad9361

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

GPIOs

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

GPIO signal

Direction

HDL GPIO EMIO

Software GPIO

(from FPGA view)

Zynq-7000

pl_muxout

OUT

17

71

phaser_enable

IN

14

68

gpio_resetb

INOUT

13

67

gpio_en_agc

INOUT

12

66

gpio_ctl[3:0]

INOUT

11:8

65:62

gpio_status[7:0]

INOUT

7:0

61:54

Note

The user can select the Programmable Logic GPIO operation through the phaser_enable software-controlled pin.

The phaser_enable pin defaults to 0, selecting the Pluto functionality. If set to 1, the GPIOs switch to Phaser functionality.

Processor System (PS)

Zynq 7010 Pin

Zynq Pin Name

S chematic Net

PCB Test Point

Pluto Funct ionality

Phaser Funct ionality

K13

IO_L1 0P_T1_34

PL_GPIO0

L10P

SPI MOSI

TXDATA

M12

IO _L12N_T1 _MRCC_34

PL_GPIO1

L12N

SPI MISO

BURST

R10

IO_L2 4N_T3_34

PL_GPIO2

L24N

SPI CLKO

MUXOUT

N14

IO_L 7N_T1_34

PL_GPIO3

L7N

IIC SDA

IIC SDA

M14

IO_L9N_T 1_DQS_34

PL_GPIO4

L9N

IIC SCL

IIC SCL

Processor System (PS)

Zynq 7010 Pin

Zynq Pin Name

Schematic Net

PCB Test Point

D8

PS_MIO0_500

PS_GPIO0

MIO0

B10

PS_MIO11_500

PS_GPIO1

MIO10

D6

PS_MIO10_500

PS_GPIO2

MIO11

B5

PS_MIO9_500

PS_GPIO3

MIO09

C13

PS_MIO53_501

PS_GPIO4

MIO53

D13

PS_MIO49_501

PS_GPIO5

MIO49

B12

PS_MIO48_501

PS_GPIO6

MIO48

Interrupts

Below are the Programmable Logic interrupts used in the project.

Instance name

HDL

Linux Zynq

Actual Zynq

axi_ad9361_adc_dma

13

57

89

axi_ad9361_dac_dma

12

56

88

axi_spi

11

55

87

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.

Go to the hdl/projects/pluto location and run the make command.

Linux/Cygwin/WSL

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