USB104 A7 Notes
Source Issues

SDR receiver

Introduction

This is a simple SDR receiver that can be used with GNU Radio.

This application requires the Zmod Digitizer module to be connected to the ZMOD A connector of the USB104 A7 board.

Hardware

The implementation of the SDR receiver is quite straightforward:

The tunable frequency range covers from 0 Hz to 122.88 MHz.

The I/Q data rate is configurable and five settings are available: 24, 48, 96, 192, 384, 768 and 1536 kSPS.

The basic blocks of the digital down-converter (DDC) are shown in the following diagram:

SDR receiver

The projects/sdr_receiver directory contains two Tcl files: block_design.tcl, rx.tcl. The code in these files instantiates, configures and interconnects all the needed IP cores.

Software

The projects/sdr_receiver/server directory contains the source code of the ZMQ server (sdr-receiver.py) that receives control commands and transmits the I/Q data streams to the SDR programs.

The projects/sdr_receiver/gnuradio directory directory contains flowgraph configuration examples for GNU Radio Companion.

The screenshot below shows GNU Radio Companion running the FM receiver flow graph (fm_zmq.grc) and communicating with the ZMQ server (sdr-receiver.py).

GNU Radio Companion

Getting started with GNU Radio on Windows

Getting started with GNU Radio on Linux

sudo apt-get install gnuradio python3-usb1
pip install pyhubio
git clone https://github.com/pavel-demin/usb104-a7-notes
cd usb104-a7-notes
make NAME=sdr_receiver bit
cp tmp/sdr_receiver.bit projects/sdr_receiver/gnuradio
cd projects/sdr_receiver/gnuradio
gnuradio-companion fm_usb.grc

Building from source

The structure of the source code and of the development chain is described at this link.

Setting up the Vitis and Vivado environment:

source /opt/Xilinx/Vitis/2023.1/settings64.sh

Cloning the source code repository:

git clone https://github.com/pavel-demin/usb104-a7-notes
cd usb104-a7-notes

Building sdr_receiver.bit:

make NAME=sdr_receiver bit

Configuring the FPGA:

make NAME=sdr_receiver run