Modern FPGAs, such as the Xilinx™ 7-series devices in the third generation of USRP products, provides an incredible amount of computational capability in the form of programmable logic. Taking advantage of this tremendous computational power with traditional FPGA design flows can be difficult, though, and accelerating host-based designs with FPGAs has historically been a complex task. This is the challenge that RFNoC™ (RF Network-on-Chip) addresses.

The goal of the RFNoC software is to decrease the development time for experienced FPGA engineers seeking to integrate IP into the USRP signal processing chain. With RFNoC, you can create FPGA applications directly from the GNU Radio Companion using the same workflow you use to create host-based flowgraphs (applications).

Here is an example of an RFNoC flowgraph built using the GNU Radio Companion. With these four blocks, data is being generated on an x86 host PC, off-loaded to the USRP’s FPGA for filtering, and then brought back to the host for graphical plotting:

RFNoC is a network-distributed heterogeneous processing tool with a focus on enabling FPGA processing in USRP devices. It allows you to move data on & off of an FPGA in a transparent way, thus enabling seamless use of both host-based and FPGA-based processing in an application. Signal processing algorithms are contained modules known as “NoC Blocks”, and an interface wrapper is provided to encapsulate existing or external IP to use with RFNoC. This allows you to import Xilinx™ CoreGen™ IP blocks, for example, and use them immediately in your RFNoC application. The internals of a NoC block is wholly independent of any other block and can be designed with any tool that supports AXI stream interfaces, including VHDL, Verilog, and Xilinx™ Vivado™ HLS.

RFNoC is integrated with the UHD™ software, and all USRP devices from the third-generation on (X300 Series, E300 Series) are supported by RFNoC out-of-the-box. Like UHD, RFNoC is also Free & Open Source Software (LGPL), and the full source code can be found in our public code repositories.