here’s a quick update on where RFNoC is right now.
For the uninitiated, RFNoC is a system/framework/design/paradigm to
easily create heterogeneous flow graphs between FPGAs and GPPs. To
actually run it, you’ll need a generation-3 USRP, but to get most out of
it you’ll also need GNU Radio. In fact, while RFNoC is by itself
independent from GNU Radio, it was designed in a way that they work
really well together.
A lengthy, but fairly comprehensive introduction can be found on our
YouTube page; a presentation we gave at the most recent Wireless
Symposium : https://www.youtube.com/watch?v=8cPd3t88djE
However, a shorter and much more fun video can be found here:
…where Sylvain M. actually used RFNoC to make an FPGA-accelerated
version of fosphor.
For those interested in the state of developmment of RFNoC, here’s some
GNU Radio integration is pretty smooth at this point, in fact, the
only issue I know of in this area is that when connecting RFNoC blocks
in GRC, the companion might issue a block mismatch warning (“red
arrows”) even though it’s actually fine. Other than that, the block
domain concept makes RFNoC + GRC a very smooth experience (big thanks to
Sebastian Koslowski for helping with the domains).
In order to use RFNoC, you still need to go through these steps: 1.
Install rfnoc-devel branch of UHD, 2. reinstall GNU Radio and then 3.
install the gr-ettus OOT module on top of that.
gr-ettus is used as our staging ground for RFNoC stuff in GNU Radio.
It’s available through PyBOMBS, assuming you’ve installed UHD correctly.
It provides GRC bindings and some blocks required.
At this time, X3x0 and E310 are the supported devices for RFNoC.
Adding RFNoC blocks is becoming easier and easier, too. On the FPGA
side, we have multiple modules to make integration of your own
components very easy, e.g. such as easy integration of coregen’d
components. In the video linked above, Jonathon explains in detail what
you need to do to create your own blocks.
RFNoC blocks require some host-side code to run, too, but we’ve put a
lot of work into making this as easy as possible. We recently released
NocScript, which allows you to fully configure your blocks with one
simple XML file (plus some snippets of NocScript, an interpreted
language). This mean no setting up build environments and recompiling
C++ code while developing your FPGA block.
GNU Radio-side modifications are usually also necessary. However, in
many cases, you can simply add GRC bindings for your block and you’re
To develop and run RFNoC, GNU Radio is definitively our recommended
framework of choice, since it’s tightly integrated, and you’ll have all
the GNU Radio blocks (such as graphical widgets) at your disposal.
Our API is stabilizing, too, thanks to the feedback we’ve been getting
from our early users. I would like to encourage you to give more
feedback, in particular if you’re planning to use RFNoC heavily, as now
is still the time to make major modifications.
There still are some open issues, and we are working on them. Among the
most requested here are the ability to create FPGA-only flow graphs
(radio to radio) and the ability to use larger packets than the network
I usually give minor updates on the usrp-users mailing list, but I do
want to make sure this list is also up-to-date. Feel free to ask
questions about RFNoC either here or on usrp-users.