ZedBoard Quickstart

https://media.githubusercontent.com/media/analogdevicesinc/documentation/main/docs/solutions/reference-designs/images/ZedBoard.png

Figure 1 ZedBoard

This guide provides quick instructions on how to set up the EVAL-ADAQ23875FMCZ on:

All the products described on this page include ESD (electrostatic discharge) sensitive devices. Electrostatic charges as high as 4000V readily accumulate on the human body or test equipment and can discharge without detection. Although the boards feature ESD protection circuitry, permanent damage may occur on devices subjected to high-energy electrostatic discharges. Therefore, proper ESD precautions are recommended to avoid performance degradation or loss of functionality. This includes removing static charge on external equipment, cables, or antennas before connecting to the device.

Using Linux as software

Necessary files

Note

The SD card includes several folders in the root directory of the BOOT partition. In order to configure the SD card to work with a specific FPGA board and ADI hardware, several files must be copied onto the root directory. Using the host PC, drag and drop the required files onto the BOOT partition, and use the EJECT function when removing the SD card from the reader.

The following files are needed for the system to boot:

  • HDL boot image: BOOT.BIN

  • Linux Kernel image: uImage

  • Linux device tree: devicetree.dtb

They can either be taken from the SD card – already generated by us, or you can build them manually:

Important

Some projects provide multiple devicetree files in the SD card’s boot folders. Make sure you select the devicetree that matches your specific use case.

Required Software

  • SD card (16 GB or larger) imaged with Kuiper Linux (check out that guide on how to do it, then come back to this section)

  • A UART terminal (Putty/Tera Term/Minicom, etc.) with baud rate 115200 (8N1)

Required Hardware

  • ZedBoard and its 12 V DC power supply

  • EVAL-ADAQ23875FMCZ evaluation board

  • SD card with at least 16 GB of memory

  • 2x Micro-USB cables (one for UART, one for JTAG)

  • LAN cable (Ethernet)

  • Low-noise signal source (e.g. Audio Precision APX525 audio analyser)

  • XLR-to-SMA adapter cable

  • SMA cable

More details as to why you need these can be found at Prerequisites.

Testing

Creating the setup

In the following example, we will prepare the evaluation setup by connecting the EVAL-ADAQ23875FMCZ evaluation board to the ZedBoard and applying a test input signal.

https://media.githubusercontent.com/media/analogdevicesinc/documentation/main/docs/solutions/reference-designs/adaq2387x/images/adaq23875x_zed.jpg

Figure 2 EVAL-ADAQ23875FMCZ + ZedBoard setup

Follow the steps in this order, to avoid damaging the components:

  1. Get the ZedBoard

  2. Configure ZedBoard for SD BOOT by placing the jumpers: JP7 on pins 1-2, JP8 on pins 2-3, JP9 on pins 2-3, JP10 on pins 1-2 and JP11 on pins 1-2.

  3. Insert the configured SD card into the ZedBoard SD card slot (J12).

  4. Connect the XLR-to-SMA adapter cable between the Audio Precision analyser output and the SMA connectors (VIN+ and VIN−) on the evaluation board.

  5. Attach the EVAL-ADAQ23875FMCZ to the ZedBoard FMC LPC connector (J1). Ensure all pins are fully seated and properly aligned.

  6. Plug the power supply into the 12 V power input connector (J20) (DO NOT turn the device on yet).

  7. Plug in an Ethernet cable from your router/switch to the Ethernet port on the ZedBoard.

  8. Connect the UART port of ZedBoard to a PC via Micro-B USB cable.

  9. Connect the Audio Precision analyser USB cable to the host PC.

  10. Turn on the power switch on the ZedBoard (SW8).

  11. Observe kernel and serial console messages on your terminal (use the first ttyUSB or COM port registered, baud rate 115200 (8N1)).

Boot messages

The following is what is printed in the serial console, after you have connected to the proper ttyUSB or COM port:

Booting Linux on physical CPU 0x0
Linux version 6.12.0-27394-g4f42b36e9a82-dirty (daniel@HYB-aFjnqsVU6Ag) (arm-linux-gnueabihf-gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #20 SMP PREEMPT Tue Aug 18 11:35:01 EEST 2026
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: Xilinx Zynq ZED
OF: fdt: earlycon: stdout-path /amba@0/uart@E0001000 not found
Memory policy: Data cache writealloc
cma: Reserved 128 MiB at 0x16800000 on node -1
Zone ranges:
  Normal   [mem 0x0000000000000000-0x000000001fffffff]
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000000000-0x000000001fffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
percpu: Embedded 16 pages/cpu s34828 r8192 d22516 u65536
Kernel command line: console=ttyPS0,115200 ip=10.2.5.201::10.2.5.1:255.255.255.0 root=/dev/mmcblk0p2 rw earlycon rootfstype=ext4 rootwait clk_ignore_unused cpuidle.off=1
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
Built 1 zonelists, mobility grouping on.  Total pages: 131072
mem auto-init: stack:off, heap alloc:off, heap free:off
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
trace event string verifier disabled
rcu: Preemptible hierarchical RCU implementation.
rcu:      RCU event tracing is enabled.
rcu:      RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
  Trampoline variant of Tasks RCU enabled.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
RCU Tasks: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=2.
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
efuse mapped to (ptrval)
slcr mapped to (ptrval)
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
rcu: srcu_init: Setting srcu_struct sizes based on contention.
zynq_clock_init: clkc starts at (ptrval)
Zynq clock init
sched_clock: 64 bits at 167MHz, resolution 6ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x26703d7dd8, max_idle_ns: 440795208065 ns
Switching to timer-based delay loop, resolution 6ns
Console: colour dummy device 80x30
Calibrating delay loop (skipped), value calculated using timer frequency.. 333.33 BogoMIPS (lpj=1666666)
CPU: Testing write buffer coherency: ok
CPU0: Spectre v2: using BPIALL workaround
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x100000 - 0x100060
rcu: Hierarchical SRCU implementation.
rcu:      Max phase no-delay instances is 1000.
smp: Bringing up secondary CPUs ...
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
CPU1: Spectre v2: using BPIALL workaround
smp: Brought up 1 node, 2 CPUs
SMP: Total of 2 processors activated (666.66 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
Memory: 355440K/524288K available (15360K kernel code, 1639K rwdata, 11816K rodata, 1024K init, 516K bss, 36316K reserved, 131072K cma-reserved, 0K highmem)
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 512 (order: 3, 32768 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 256 KiB pool for atomic coherent allocations
thermal_sys: Registered thermal governor 'step_wise'
platform axi: Fixed dependency cycle(s) with /axi/interrupt-controller@f8f01000
platform replicator: Fixed dependency cycle(s) with /axi/etb@f8801000
amba f8801000.etb: Fixed dependency cycle(s) with /replicator
platform replicator: Fixed dependency cycle(s) with /axi/tpiu@f8803000
amba f8803000.tpiu: Fixed dependency cycle(s) with /replicator
platform replicator: Fixed dependency cycle(s) with /axi/funnel@f8804000
amba f8804000.funnel: Fixed dependency cycle(s) with /axi/ptm@f889d000
amba f8804000.funnel: Fixed dependency cycle(s) with /axi/ptm@f889c000
amba f8804000.funnel: Fixed dependency cycle(s) with /replicator
amba f8804000.funnel: Fixed dependency cycle(s) with /axi/ptm@f889c000
amba f889c000.ptm: Fixed dependency cycle(s) with /axi/funnel@f8804000
amba f8804000.funnel: Fixed dependency cycle(s) with /axi/ptm@f889d000
amba f889d000.ptm: Fixed dependency cycle(s) with /axi/funnel@f8804000
platform 70e00000.lcd-controller: Fixed dependency cycle(s) with /fpga-axi@0/i2c@41600000/hdmi@39
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 26, base_baud = 3125000) is a xuartps
printk: legacy console [ttyPS0] enabled
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
mc: Linux media interface: v0.10
videodev: Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
PTP clock support registered
jesd204: found 0 devices and 0 topologies
FPGA manager framework
Advanced Linux Sound Architecture Driver Initialized.
clocksource: Switched to clocksource arm_global_timer
NET: Registered PF_INET protocol family
IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
TCP bind hash table entries: 4096 (order: 4, 65536 bytes, linear)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp-with-tls transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
workingset: timestamp_bits=30 max_order=17 bucket_order=0
NFS: Registering the id_resolver key type
Key type id_resolver registered
Key type id_legacy registered
nfs4filelayout_init: NFSv4 File Layout Driver Registering...
nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
fuse: init (API version 7.41)
io scheduler mq-deadline registered
io scheduler kyber registered
io scheduler bfq registered
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
ledtrig-cpu: registered to indicate activity on CPUs
dma-pl330 f8003000.dma-controller: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dma-controller:        DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
brd: module loaded
loop: module loaded
Registered mathworks_ip class
spi-nor spi0.0: found s25fl256s1, expected n25q128a11
5 fixed-partitions partitions found on MTD device spi0.0
Creating 5 MTD partitions on "spi0.0":
0x000000000000-0x000000500000 : "boot"
0x000000500000-0x000000520000 : "bootenv"
0x000000520000-0x000000540000 : "config"
0x000000540000-0x000000fc0000 : "image"
0x000000fc0000-0x000002000000 : "spare"
MACsec IEEE 802.1AE
tun: Universal TUN/TAP device driver, 1.6
hwmon hwmon0: temp1_input not attached to any thermal zone
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 40 (00:0a:35:00:01:41)
usbcore: registered new interface driver asix
usbcore: registered new interface driver ax88179_178a
usbcore: registered new interface driver cdc_ether
usbcore: registered new interface driver net1080
usbcore: registered new interface driver cdc_subset
usbcore: registered new interface driver zaurus
usbcore: registered new interface driver cdc_ncm
usbcore: registered new interface driver r8153_ecm
usbcore: registered new interface driver uas
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic
usbcore: registered new interface driver ftdi_sio
usbserial: USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver upd78f0730
usbserial: USB Serial support registered for upd78f0730
ULPI transceiver vendor/product ID 0x0451/0x1507
Found TI TUSB1210 ULPI transceiver.
ULPI integrity check: passed.
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.12
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: EHCI Host Controller
usb usb1: Manufacturer: Linux 6.12.0-27394-g4f42b36e9a82-dirty ehci_hcd
usb usb1: SerialNumber: ci_hdrc.0
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
i2c_dev: i2c /dev entries driver
platform 70e00000.lcd-controller: Fixed dependency cycle(s) with /fpga-axi@0/i2c@41600000/hdmi@39
i2c 0-0039: Fixed dependency cycle(s) with /fpga-axi@0/lcd-controller@70e00000
adv7511 0-0039: supply avdd not found, using dummy regulator
adv7511 0-0039: supply dvdd not found, using dummy regulator
adv7511 0-0039: supply pvdd not found, using dummy regulator
adv7511 0-0039: supply bgvdd not found, using dummy regulator
adv7511 0-0039: supply dvdd-3v not found, using dummy regulator
at24 1-0050: supply vcc not found, using dummy regulator
at24 1-0050: 4096 byte 24c32 EEPROM, writable, 1 bytes/write
gspca_main: v2.14.0 registered
usbcore: registered new interface driver uvcvideo
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer with timeout 10s
Xilinx Zynq CpuIdle Driver started
failed to register cpuidle driver
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537538477 ns
timer #0 at (ptrval), irq=46
hid: raw HID events driver (C) Jiri Kosina
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
SPI driver fb_seps525 has no spi_device_id for syncoam,seps525
armv7-pmu f8891000.pmu: hw perfevents: no interrupt-affinity property, guessing.
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 (8000003f) counters available
mmc0: SDHCI controller on e0100000.mmc [e0100000.mmc] using ADMA
axi_sysid 45000000.sysid: AXI System ID core version (1.01.a) found
axi_sysid 45000000.sysid: [adaq23875] [TWOLANES=1  ADC_RES=16] on [zed] git branch <update_adaq2387x> git <bc32127c9e6dfde1b5c63ad37fbcdb1c4b941746> clean [2026-06-11 08:24:57] UTC
fpga_manager fpga0: Xilinx Zynq FPGA Manager registered
usbcore: registered new interface driver snd-usb-audio
axi-i2s 77600000.i2s: probed, capture enabled, playback enabled
NET: Registered PF_INET6 protocol family
Segment Routing with IPv6
In-situ OAM (IOAM) with IPv6
sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
NET: Registered PF_PACKET protocol family
mmc0: new high speed SDHC card at address 0001
NET: Registered PF_IEEE802154 protocol family
Key type dns_resolver registered
Registering SWP/SWPB emulation handler
mmcblk0: mmc0:0001 USD 29.1 GiB
 mmcblk0: p1 p2 p3
of-fpga-region fpga-region: FPGA Region probed
[drm] Initialized axi_hdmi_drm 1.0.0 for 70e00000.lcd-controller on minor 0
axi-hdmi 70e00000.lcd-controller: [drm] Cannot find any crtc or sizes
debugfs: File 'Capture' in directory 'dapm' already present!
axi-hdmi 70e00000.lcd-controller: [drm] Cannot find any crtc or sizes
input: gpio-keys as /devices/soc0/gpio-keys/input/input0
of_cfs_init
of_cfs_init: OK
macb e000b000.ethernet eth0: PHY [e000b000.ethernet-ffffffff:00] driver [Marvell 88E1510] (irq=POLL)
macb e000b000.ethernet eth0: configuring for phy/rgmii-id link mode
macb e000b000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
IP-Config: Complete:
     device=eth0, hwaddr=00:0a:35:00:01:41, ipaddr=10.2.5.201, mask=255.255.255.0, gw=10.2.5.1
     host=10.2.5.201, domain=, nis-domain=(none)
     bootserver=255.255.255.255, rootserver=255.255.255.255, rootpath=
clk: Not disabling unused clocks
ALSA device list:
  #0: HDMI monitor
  #1: ZED ADAU1761
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem fe619be6-c956-479a-bc60-0077ef6179a7 r/w with ordered data mode. Quota mode: disabled.
VFS: Mounted root (ext4 filesystem) on device 179:2.
devtmpfs: mounted
Freeing unused kernel image (initmem) memory: 1024K
Run /sbin/init as init process
systemd[1]: System time advanced to built-in epoch: Mon 2026-04-13 15:38:05 EDT
systemd[1]: Failed to find module 'autofs4'
systemd[1]: systemd 257.13-1~deb13u1 running in system mode (+PAM +AUDIT +SELINUX +APPARMOR +IMA +IPE +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -BPF_FRAMEWORK -BTF -XKBCOMMON -UTMP +SYSVINIT +LIBARCHIVE)
systemd[1]: Detected architecture arm.

Welcome to Debian GNU/Linux 13 (trixie)!

systemd[1]: Hostname set to <analog>.
systemd[1]: Queued start job for default target graphical.target.
[  OK  ] Reached target slices.target - Slice Units.
[  OK  ] Reached target swap.target - Swaps.
[  OK  ] Reached target basic.target - Basic System.
[  OK  ] Started iiod.service - IIO Daemon.
[  OK  ] Started ssh.service - OpenBSD Secure Shell server.
[  OK  ] Reached target network.target - Network.
[  OK  ] Reached target multi-user.target - Multi-User System.

Debian GNU/Linux 13 analog ttyPS0

analog login: root (automatic login)

Linux analog 6.12.0-27394-g4f42b36e9a82-dirty #20 SMP PREEMPT Tue Aug 18 11:35:01 EEST 2026 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@analog:~#

Useful commands for the serial terminal

The below commands are to be run in the serial terminal connected to the FPGA.

Login Information

user: analog password: analog

To find out the IP of the FPGA board, run the following command and take the IP specified at “eth0 inet”:

~$
ifconfig

To see the IIO devices detected, run:

~$
iio_info | grep iio:device
iio:device0: xadc
iio:device1: ltc2387 (buffer capable)

To power off the system, run the following command, and wait for the final message to be printed, then power off the FPGA board from the switch as well.

~$
poweroff

To reboot the system, run:

~$
reboot

Important

Even though this is Linux, this is a persistent file system. Care should be taken not to corrupt the file system – please shut down things, don’t just turn off the power switch. You can do this from the terminal with sudo shutdown -h now or the above-mentioned command for powering off.

EVAL-ADAQ23875FMCZ

IIO Oscilloscope

Important

Make sure to download/update to the latest version of IIO Oscilloscope.

  1. Once done with the installation or an update of the latest IIO Oscilloscope, open the application. The user needs to supply a URI which will be used in the context creation of the IIO Oscilloscope.

  2. Press Refresh to display available IIO Devices and press Connect.

  3. After the board is connected, enable the desired channel and press the play button to start the time domain capture.

https://media.githubusercontent.com/media/analogdevicesinc/documentation/main/docs/solutions/reference-designs/adaq2387x/images/osc_time.jpg

Figure 3 Time domain capture of the ltc2387 channel in ADI IIO Oscilloscope

  1. Select Frequency Domain for the plot type and set the FFT window to Blackman-Harris to view the frequency domain capture.

https://media.githubusercontent.com/media/analogdevicesinc/documentation/main/docs/solutions/reference-designs/adaq2387x/images/osc_freq.png

Figure 4 Frequency domain FFT capture of the ltc2387 channel in ADI IIO Oscilloscope