AD7616-SDZ HDL project
Overview
The AD7616 is a 16-bit, data acquisition system (DAS) that supports dual simultaneous sampling of 16 channels. It operates from a single 5 V supply and can accommodate ±10 V, ±5 V, and ±2.5 V true bipolar input signals while sampling at throughput rates up to 1 MSPS per channel pair with 90 dB SNR. Higher SNR performance can be achieved with the on-chip oversampling mode; 92 dB for an oversampling ratio of 2.
The input clamp protection circuitry can tolerate voltages up to ±20 V. The AD7616 has 1 MΩ analog input impedance regardless of sampling frequency. The single supply operation, on-chip filtering, and high input impedance eliminate the need for driver op-amps and external bipolar supplies.
Each device contains analog input clamp protection, a dual, 16-bit charge redistribution successive approximation analog-to-digital converter (ADC), a flexible digital filter, a 2.5 V reference and reference buffer, and high-speed serial and parallel interfaces.
Supported boards
Supported devices
Supported carriers
Other required hardware
Block design
The data path of the HDL design is simple as follows:
the parallel interface is controlled by the axi_ad7616 IP core
the serial interface is controlled by the SPI_Engine Framework
data is written into memory by a DMA (axi_dmac core)
all the control pins of the device are driven by GPIOs
Block diagram
The data path and clock domains are depicted in the below diagrams:
AD7616_SDZ serial interface
AD7616_SDZ parallel interface
Configuration modes
The INTF configuration parameter defines the interface type (Serial or Parallel). By default it is set to Parallel (0). Depending on the required interface mode, some hardware modifications need to be done on the board and/or make command:
In case of the PARALLEL interface:
~$
make INTF=0
In case of the SERIAL interface:
~$
make INTF=1
Note
This switch is a hardware switch. Please rebuild the design if the variable has been changed.
SL5 - unmounted - Parallel interface
SL5 - mounted - Serial interface
Jumper setup
Jumper/Solder link |
Position |
Description |
---|---|---|
SL1 |
Unmounted |
Channel Sequencer Enable |
SL2 |
Unmounted |
RC Enable Input |
SL3 |
Mounted |
Selects 2 MISO mode |
SL4 |
Unmounted |
Oversampling Ratio Selection OS2 |
SL5 |
Mounted |
If mounted, selects serial interface |
SL6 |
Unmounted |
Oversampling Ratio Selection OS1 |
SL7 |
Unmounted |
Oversampling Ratio Selection OS0 |
LK40 |
A |
Onboard 5v0 power supply selected |
LK41 |
A |
Onboard 3v3 power supply selected |
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_ad7616_dma |
0x44A3_0000 |
ad7616_pwm_gen |
0x44B0_0000 |
spi_ad7616_axi_regmap ** |
0x44A0_0000 |
axi_ad7616 * |
0x44A8_0000 |
Legend
*
instantiated only for INTF=0 (parallel interface)**
instantiated only for INTF=1 (serial interface)
I2C connections
I2C type |
I2C manager instance |
Alias |
Address |
I2C subordinate |
---|---|---|---|---|
PL |
iic_fmc |
axi_iic_fmc |
0x4162_0000 |
— |
PL |
iic_main |
axi_iic_main |
0x4160_0000 |
— |
SPI connections
SPI type |
SPI manager instance |
SPI subordinate |
CS |
---|---|---|---|
PL |
axi_spi_engine |
AD7616 |
0 |
GPIOs
The Software GPIO number is calculated as follows:
Zynq-7000: if PS7 is used, then offset is 54
GPIO signal |
Direction |
HDL GPIO EMIO |
Software GPIO |
---|---|---|---|
(from FPGA view) |
Zynq-7000 |
||
adc_reset_n |
OUT |
43 |
97 |
adc_hw_rngsel[1:0] |
OUT |
42:41 |
96:95 |
adc_os[2:0] ** |
OUT |
40:38 |
94:92 |
adc_seq_en |
OUT |
37 |
91 |
adc_burst ** |
OUT |
36 |
90 |
adc_chsel[2:0] |
OUT |
35:33 |
89:87 |
adc_crcen ** |
OUT |
32 |
86 |
Legend
**
instantiated only for INTF=1 (serial interface)
Interrupts
Below are the Programmable Logic interrupts used in this project.
Instance name |
HDL |
Linux Zynq |
Actual Zynq |
---|---|---|---|
axi_ad7616_dma |
13 |
57 |
89 |
spi_ad7616 ** |
12 |
56 |
88 |
axi_ad7616 * |
10 |
54 |
87 |
Legend
*
instantiated only for INTF=0 (parallel interface)**
instantiated only for INTF=1 (serial interface)
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, and then build the project as follows:.
Linux/Cygwin/WSL
~$
cd hdl/projects/ad7616_sdz/zed
~/hdl/projects/ad7616_sdz/zed$
make INTF=0
The default configuration is Parallel Mode (0).
The result of the build, if parameters were used, will be in a folder named by the configuration used:
if the following command was run
make INTF=0
then the folder name will be:
INTF0
A more comprehensive build guide can be found in the Build an HDL project user guide.
Connections and hardware changes
Warning
The following hardware changes are required:
(Please note: Because of the SDP-I-FMC the level of the VADJ in the carrier board needs to be set to 3.3V.)
Depending on the required interface mode, some hardware modifications need to be done.
SL5 - unmounted - Parallel interface
SL5 - mounted - Serial interface
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.