Skip to content
Jonas Beuke edited this page Oct 1, 2017 · 21 revisions

Introduction

This project provides a basis for using the Red Pitaya (or now STEMlab 125-14) for data acquisition. This alone is nothing that can't be achieved with the standard libraries and images. But sometimes, having only two fast ADCs and two fast DACs is not enough. With the FPGA image and the server provided in this project, you can daisy chain multiple units and synchronize them to use the same clock. This allows for using all DACs and ADCs together without having to worry about phase shifts due to small clock speed differences. The general idea of this synchronization is to distribute the clock of a master device to the slave devices via the SATA daisy chain connectors. Depending on your networking hardware you can continuously acquire the signals of the fast ADCs at a decimation of up to 8.

For building your own version you need

  • the amount of Red Pitayas you need for your project
  • SATA cables for the daisy chaining
  • some cables for connecting the extension connector ports used for the synchronization signal
  • soldering skills for changing the clock source of the ADCs
  • a gigabit (or more) switch for connecting all the RPs to the network

Features

The project does not only provide means for synchronization but also

  • the ability to generate four tone sine signals on the fast DACs
  • upload of LUTs for the slow DACs
  • access to the slow ADCs
  • a watchdog mode for using e.g. an Arduino or Raspberry Pi as a security device for your whole setup
  • an instant stop pin for stopping all DACs in case of a system failure

Getting started

Since a certain amount of RAM has to be untouched by the operating system, a special image for the SD card is needed. For this, we would like to point out the excellent work of Pavel Demin and especially this page:

Reroute your slave's ADC clock source by resoldering the resistors according to this documentation. The required mode for this project is 'Directly from FPGA'.

Connect the master Red Pitaya with the first slave via a SATA cable. Then connect the first slave with the second slave and so on. In order to send a mutual trigger signal for starting the acquisition and the signal generation, you also have to connect the master's DIO5_P pin (see link) with the DIO0_P pin of all devices including the master.

The Bitfiles for programming the FPGAs of the different Red Pitayas are in the repository, so you just have to SSH into the units and do

git clone https://github.com/tknopp/RedPitayaDAQServer.git

in the root users home directory. Then cd into RedPitayaDAQServer and run make. Then you're good to go and can start the server by hand with ./build/server/daq_server.

Using the server

Setting up the server as a service

Building the bitfiles yourself

If you want to make changes to the FPGA design, you need to install Vivado. For this, we would like to point at the work of Pavel Demin again:

After following the installation steps, you need to clone the repository into a directory of your choice and then build the IP cores used in the blockdesign by running

vivado -mode batch -source make_cores.tcl

in the repositories root directory.

Then do a cd ./src/fpga followed by

vivado -mode batch -source build.tcl.

Afterwards you can start Vivado and open the recreated project in ./build/fpga/firmware/RedPitayaDAQServer.xpr. Apply the changes you need and then create the bitfile by using 'Flow -> Generate Bitstream'. This runs the synthesis and implementation steps and output the Bitfile to ./build/fpga/firmware/RedPitayaDAQServer.runs/impl_1/system_wrapper.bin. Please note, that you have to create both the master and the slave image. This can be done by simply changing the value of xlconstant_masterslave. A '1' denotes the use of the internal ADC clock and is used for the master. A '0' selects the clock distributed via the daisy chain connectors and is therefore used for the slaves.

Clock selection in the blockdesign

After creating the respective bitfile you need to copy it to your Red Pitayas. You can use

scp ./build/fpga/firmware/RedPitayaDAQServer.runs/impl_1/system_wrapper.bin root@<IP>:/root/RedPitayaDAQServer/bitfiles/<master,slave>.bin

for this. Set your IP and master/slave accordingly.

Since using git with Vivado can be annoying here are some hints how you can make your changes ready for git:

  • If you only changed some stuff in the blockdesign, you just have to export the blockdesign to ./src/fpga/bd by using 'File -> Export -> Export Block Design' in Vivado.
  • Changes to the project settings have to be exported by using 'File -> Write Project Tcl...'. The build process for this repository requires some changes to the project's .tcl-files, so please use your favourite diff tool in order to adapt ./src/fpga/build.tcl and not lose the ability to recreate your changed project.
  • For your own IP cores, just create a new directory in ./src/fpga/cores and copy and adapt the core_config.tcl of another core. Afterwards re-run make_cores.tcl.
Clone this wiki locally