Software Quick Start
Iris and Faros hub services and drivers
Iris and Faros are designed as network devices. Both run an Ubuntu linux system and run full TCP/ IP stack on their ARM core. Many of the system modules such as clocking and networking are cofigured and controlled through services. Each device has a uniquely assigned MAC adderss and setup as a DHCP client. That means, they require to be assigned an IP from a DHCP server, either running on a host server or a network router. However for highest performance (i.e., higher sample streaming rate support and lower latency), it is recommended for them to be directly connected to a host machine.
Control and communicating with Iris and Faros is enabled with SoapySDR ecosystem. SoapySDR is an open-source generalized API and runtime library for interfacing with SDR devices. With SoapySDR, you can instantiate, configure, and stream with an SDR device in a variety of environments. Most off the shelf SDR hardware platforms are supported by SoapySDR, and many open source applications rely on SoapySDR for hardware integration support. Iris and Faros hub are both SoapySDR-supported devices. Each of the SDR devices require a hardware-specific device driver as well. Faros hub and Iris device drivers are called SoapyIris and SoapyFaros. They natively implement a SoapySDR API. For other devices with drivers that don’t natively implement a SoapySDR API, there is a need for shim layer software and translates between SoapySDR calls and the hardware-specific driver calls. For e.g., for UHD devices such as NI USRPS, the shim layer software is called SoapyUHD. In this way, any SDR application using SoapySDR can be readily run on a variety of devices. This demo nicely demonstrates this.
SoapySDR also has a remote support for running the API calls remotely on a device. All the control procedure such as setting frequency, sample rate, etc., need to be actually run on the linux system running on the Iris or Faros hub. However the call usually originates from the application running on the host machine. The remote call support is provided by the SoapyRemote library. SoapyRemote also implements other useful features such as network device discovery. Using services like SSDP and MDNS, Iris and Faros hub can be discovered from a host machine in the same network. For more details on device discovery and other SoapyRemote features, see the SoapyRemote Wiki Page
The baseband data communication between the Iris and host machine is handled by the Iris device driver, called SoapyIris. SoapyIris sets up streaming between an Iris and the host machine through UDP sockets. The FPGA on each Iris, encapsulates baseband samples in UDP packets and subsequently in an Ethernet frame and forwards them to the network. To enable high-performance and predictable latency, the data flow between the originating FPGA and the outgoing physical Ethernet port whether on the same Iris or another Iris in the same chain or on the Faros hub, is only made up of FPGA fabric. In other words, data does not pass through any CPU element until it reaches the host machine. The data streaming occurs with IPv6 headers. To see more details on SoapyIris, see this wiki page.
The following figure shows the architecture of the Iris and Faros System and the relationship with various Soapy ecosystem components.
To run SDR apps on Iris or the Faros system, install SoapySDR, SoapyRemote, and Sklk-SoapyIris (Skylark) drivers on Ubuntu 16.04 or later. This script will also install all the required dependencies: install_soapy.sh.
After the install is complete, run
SoapySDRUtil --find. If no Iris device (or any other Soapy supported device) are detected, you will get a
no device found! message. Make sure to properly connect the Iris or Faros hub to your host PC. In that case, a list of detected Irises or soapy devices are listed with a format similar to the following example:
Found device 0 driver = iris feSerial = FE3B000111 feVersion = 72efe6b firmware = 2018.05.2.1-28-3fe1afc fpga = 2018.05.2.1-b30d907 frontend = IRIS-FE-03-CBRSb label = IRIS-030B - 0294 remote = tcp://10.224.120.19:55132 remote:driver = iris-arm remote:type = iris revision = Iris-030b serial = 0294
To run RENEW demos, additionally run the two following scripts in the RENEW repository.
To install all additional libraries required to use the C++ RENEW Desing Flow, run install_cclibs.sh.
To install all additional libraries required to use the Python RENEW Desing Flow, run install_pylibs.sh