Open RF Prototyping

RF Blocks Software and Firmware

rfblocks Software Stack

Software support for rfblocks consists of:

  1. Low level embedded control software intended to run on either a dedicated microcontroller or as a process or thread within an embedded host environment (for example, a Linux environment running on a Zynq FPGA).

  2. The rfblocks Python framework containing classes for control of hardware modules. These classes model the internal hardware registers of the modules and allow for configuration and command via Python class method call.

  3. Software applications for reference designs built using the rfblocks hardware modules.

The software stack is illustrated in Figure 1.

Applications make use of the rfblocks Python package to control the prototype hardware via the ECApp embedded control software. ECApp takes plain ASCII text commands as input and drives associated SPI and GPIO hardware.

When testing or when developing software for controlling new hardware modules the ECApp control software can be used directly via USB/RS-232 devices or over the network using the TCP to USB/RS-232 bridge.

At the lowest level, hardware modules are controlled via some variant of the serial peripheral interface (SPI) generally in conjunction with the control of one or more general purpose I/O (GPIO) lines. In simple cases this might be done using for example an SPI Driver.

rfblocks qtrfblocks RPyC PythonUSB/RS-232TCP/IP Bridge SPI/GPIO ECApp Hardware Applications Zephyr OS

Figure 1: rfblocks software stack.

rfblocks Runtime Environment

The rfblocks software runtime environment is illustrated in Figure 2a and Figure 2b.

SW arch

Figure 2a: Software control

SW arch

Figure 2b: Distributed control

Control of RF Blocks hardware modules and module assemblies is via microcontrollers running the ECApp embedded device control firmare. Client applications send commands to the microcontroller via a USB serial communications channel. The microcontroller software then directly programs and controls the hardware modules via SPI and GPIO signalling. Many hardware module assemblies can be attached to a given client application host - see Figure 2a.

Multiple networked client hosts can each have RF Blocks hardware module assemblies connected via USB. Client applications distributed across the network can then connect to any of these assemblies using a TCP to serial bridge. This kind of arrangement is illustrated in Figure 2b.

Application Architecture

Applications used with the reference designs make use of PyQt for on screen controls and notifications. See for example, A DDS Based Signal Generator.

RPyC is a transparent Python library which provides remote procedure calls, clustering and distributed computing. The reference designs make use of RPyC to implement network transparency and to allow the distribution of RF Blocks hardware and associated control software across networks. Some examples of this can be found here: Red Pitaya ADC/DAC Service, Dual RF Power Meter Service, and Direct Down Conversion RF Frontend Service.