Hello. My name is Julien Roy, and today I will talk about the ZeptoSDR platform and how to move a remote application on a PC to the embedded ARM processor on the ZeptoSDR. The embedded processor is an ARM and is embedded in the Zynq Xilinx system-on-chip.
First, I will run the default remote application that can be found in the windows_package of the ZeptoSDR release, for example, BSDK. We have the remote_host folder, and inside, we have a Visual Studio project.
First, the application is a simple pass-through of the raw data of the ZeptoSDR on the PC, so it receives the raw I/Q samples from the ZeptoSDR and sends them back to it.
We have some INCLUDEs to use the ADP library. After that, we specified the IP address of the ZedBoard. The radio RF front end of the ZedBoard is initialized and calibrated. After that, a TCP connection is opened with the ZedBoard. It uses the Nutaq RTDEx library. RTDEx stands for “real-time data exchange.”
The connection is started, and after that, a simple WHILE loop receives the raw I/Q data from the radio from the ZeptoSDR and sends them back to it.
That’s it. It’s a really simple application, but if you want to do some signal processing or implement the upper layer of some radio protocols, you can do it between these functions.
We can run the demo. The radio is initialized, calibrated, and what we see at the bottom of the console is the data rate for the transfer with the ZeptoSDR. Currently, we see that 5.8 Megabytes per second are received and sent with the ZeptoSDR, so everything is running smoothly. We can close the application.
Now, we can connect to the ZeptoSDR using a SSH connection. Here I’ve used PuTTY. I only enter the IP address of the ZeptoSDR and select SSH connection so I can log in.
Currently, I am in the root folder, so I have access to some embedded examples. If I go to this folder, I see I have some applications — radio loopback, radio TX, RX, and configure. What I want to do is use my C code on this computer and run it in the embedded ARM processor.
The ZeptoSDR is running a SSH server. That’s why we are able to connect to it. We can also connect to the ZeptoSDR file system using the same SSH server. Right now, I’m using FileZilla. I can connect to the ZedBoard. Here, I have all the same files that I can see in the connection with the ZedBoard. In the root folder, I can see the cli, the gnuradio-examples, and the embedded_host folder.
What I will do is create a new folder. I have my new folder, and I will copy the existing folder. That’s the include folder and the library folder of the embedded_host example. These folders include the INCLUDE file for the Nutaq library and the pre-compile library for the ARM processor. We’ll copy these directories.
Here we have my new application with the include and lib folders.
I downloaded the linux_package from the Nutaq website. In example_zedbaord, BSDK, remote_host, I have the same source file as the demo I just ran, but instead of having a Visual Studio project, here I have a MAKEFILE to build it on the remote host computer that runs Linux.
I can copy the Linux project and the source file to the ZedBoard. Here, I can go in the new_application folder and the prj_linux folder. We have some scripts. We can add the execute mode to this file. Now I can build a demo. Everything works fine, and now I can launch the application. As you can see, that is exactly the same code and the same display. We have the same data rate.
Now we’ll open a second SSH connection with the ZeptoSDR, and I’m able to monitor the processing power used by the ARM computer. To do the bridge between a remote computer and the FPGA logic inside the ZeptoSDR, there is an RTDEx TCP server that is running. This TCP server is a TCP server that receives data and sends them to the RTDEx file descriptor in the ZedBoard. We can see that it uses a small amount of CPU, around 10%.
But now we are in embed mode, so there is no need to go through a TCP server. The application can directly write to the RTDEx file descriptor. We can modify the source code by opening the streaming file here. So Edit.
Here in the code, we open an RTDEx TCP connection. Instead of TCP, we can open an AXI connection, and instead of giving the server IP address, we can enter the path of the RTDEx file descriptor.
We just modified the open function. We can modify the close function. At the top of the file, there is an INCLUDE that includes adp_rtdex_tcpip. We can rename it to adp_rtdex_axi.
That’s it. We can close the file and rebuild the application. We can restart it. It’s exactly the same application. We see the same data rate. If we monitor the processor activity, we see barely any CPU usage. Sometimes there’s the RTDEx driver or the ZedBoard application that use a lot of CPU, but globally, it uses less CPU because there is not all the overhead of the TCP server.
That’s it. That’s how we move a remote application for the ZeptoSDR from a host computer to the embedded ARM processor. Thank you for watching.