Red Pitaya FPGA Board (Xilinx Zynq 7000)

Environment Setup

I’m using Vivado 2020.1 on a Ubuntu 18.04 distro.

Red Pitaya’s repo is currently setup with all projects in 2020.1. Do not use the newest version of Ubuntu, Vivado 2020.1 doesn’t run it it. In addition, the C code development side seems to need SDK 2019.1 command line.

FPGA Hardware Development

The code is all Verilog but pretty straightforward. Builds are strightfoward and nicely the .bit is all that is needed, no conversion to a different file format for the device is needed.

  • The filesystem is by default read-only. To make r/w

mount -o remount,rw /opt/redpitaya

  • To get the .bit from the fpga/prj/v0.94/project/redpitaya.runs/impl_1 directory to the unit:

scp red_pitaya_top.bit root@ipaddress:/tmp

  • To Reconfigure the FPGA while the unit is running:

SSH into the unit with

ssh root@ipaddress

Then configure the FPGA

cat /tmp/red_pitaya_top.bit >/dev/xdevcfg

FPGA/SOC Interface Development

DTB File Update Procedure

At the moment, I haven’t changed any clocks or memory bus widths so I haven’t had to touch the DTB yet…. Update once I have….

Linux C Development

I’m currently compiling the code on the device to avoid cross compiling. Update when I get cross compiling to work….

API/Library Development

The Linux to hardware interface is done through a memory mapped shared library (static also is built).

I’ve made changes largely dealing with the WEA bits and the size of the buffers.

C Program Development

I’m currently using the SCPI connector software from Red Pitaya and modifying just as necessary.


  • To start programs manually, set LD_LIBRARY_PATH first….


  • The filesystem is by default read-only. To make r/w

mount -o remount,rw /opt/redpitaya

VISA/SCPI Control Software

I’m currently using MATLAB to send the command. The things that commonly get me:

  1. The SCPI Connector needs to be started in the Web GUI after startup
  2. The TCP/IP buffer needs to be made bigger to send waveforms.

Any program/language capable of sending strings over TCP/IP would work here….