Example: MultiChannelDAQ


The MultiChannelDAQ example design features a GUI enabled by FrontPanel Platform, allowing users to manage 8 near-real-time DAC and ADC channels. The DAC channels function as a signal generator, producing basic waveforms like sine, triangle, and square. The ADC channels function as an oscilloscope. The FrontPanel Platform software and gateware control two ADC and DAC controllers to operate the SZG-MULTIDAQ on the XEM8320. With FrontPanel Platform, users have access to open-source JavaScript libraries, and in this example, we utilize Chart.js to provide a versatile toolkit for data acquisition and oscilloscope display, serving as a foundation for more advanced projects.
Resources
Host Boards
SYZYGY Peripherals
Links
Getting Started
You’ll need:
- XEM8320-AU25P with SZG-MULTIDAQ on Port D
- FrontPanel Platform 6.x installed (see the FrontPanel Platform Getting Started guide)
MultiChannelDAQ.fppfrom the latest MultiChannelDAQ Example Design release
To run the example design:
- Connect the SZG-MULTIDAQ to Port D on the XEM8320. Connect Channel 1 of the DAC to Channel 1 of the ADC using a piece of conductive wire. Connect the board to the PC via USB, and power on.
- Install the
MultiChannelDAQ.fppin the Application Launcher. - Drag the MultiChannelDAQ app card onto the device card.
How to Build the Software
Requirements
- Same development prerequisites as any FrontPanel Platform app (see the Building with NPM Create guide)
- The latest MultiChannelDAQ release source
Build steps
From the Software/ folder in the release:
npm install
npm run packThe packaged .fpp is written to Software/output/MultiChannelDAQ.fpp. Pre-built bitfiles ship with the repository, so you do not need to rebuild the gateware first.
How to Build the Gateware
Requirements
- Latest MultiChannelDAQ-App-vX.Y release Source Code (zip or tar.gz)
- Vivado
Notice: Our tested version is v2023.2. Versions outside of this are not guaranteed to work. - FrontPanel Vivado IP Core v1.0.5 or higher
Building the Gateware
- Extract Example Design Release: Unzip/tar.gz the Example Design release and note the location for step 3.
- Add IP Cores to Vivado: Follow the instructions for Vivado IP Cores’ Distribution v1.0.5 or later and note the installation location for step 4.
- Navigate to Gateware Folder: Open the Vivado GUI and navigate to the MultiChannelDAQ gateware folder using the TCL Console.
- Example:
cd C:/path/to/MultiChannelDAQ/Gateware
- Example:
- Set IP Core Path: Set the fpdir variable to the IP core path.
- Example:
set fpdir C:/path/to/FrontPanel-Vivado-IP-Dist-vX.Y.Z
- Example:
- Run Setup Script: Run source project.tcl.
- Generate Bitstream: Click ‘Generate Bitstream’ once the project is ready.
Gateware Architecture Reference

ADC Path
- ADC FSM (Finite State Machine): Manages SPI communication with the SZG-MULTIDAQ to receive digital values for 8 channels.
- ADC FIFO: Stores the digital values in a header-payload format. The header indicates the channel, and the payload contains the data.
- Data Flow: Digital values are gathered from SZG-MULTIDAQ via SPI → ADC FSM → ADC FIFO → FrontPanel Vivado IP Core (PipeOut) → Host Application.
DAC Path
- 8 CORDIC Modules: Generate sinusoidal output for each of the 8 DAC channels. Frequency is controlled by the user application.
- DAC FSM: Stripes through the 8 CORDIC outputs, collecting output data and transmitting it via SPI to the SZG-MULTIDAQ.
- Data Flow: Frequency control data from FrontPanel Vivado IP Core (WireIn) → 8 CORDIC Modules → DAC FSM → SZG-MULTIDAQ (via SPI).
MCP Description
Signal Generator (3 Tools)
Eight independent DAC channels, each with its own shape, frequency, amplitude, and duty cycle (square waves).
siggen_get_channels— read the current configuration of all eight channels.siggen_set_channel— update one channel (channel, plus any ofenabled,shape,frequency_hz,amplitude_v,duty_cycle).siggen_set_all_enabled— enable or disable all eight channels at once.
Oscilloscope (3 Tools)
Up to eight ADC channels are captured round-robin into a 16384-word frame. Fewer enabled channels means more samples per channel and a higher per-channel sample rate.
scope_set_channel_count— set how many channels (1..8) the scope captures. A count of N captures channels 1..N.scope_get_channel_count— read how many channels the scope is currently capturing.scope_capture— capture the frame currently on screen
Release Notes
Release downloads are available on GitHub at: opalkelly-opensource/MultiChannelDAQ Releases
MultiChannelDAQ Example Design 1.2.0 (2026-08-05)
- Added Frontpanel MCP integration
- Updated app icon
MultiChannelDAQ Example Design 1.1.0 (2026-05-21)
- Added triangle and square waveform generation
- Revised GUI
MultiChannelDAQ Example Design 1.0 (2026-04-15)
- Gateware built with Vivado 2023.2
- Initial Release