Run two concurrent RFNoC streams (TX and RX) on a single USRP X310 using GNU Radio Companion on the COSMOS Grid testbed.
This tutorial demonstrates how to operate two simultaneous RFNoC (RF Network-on-Chip) streams on a single USRP X310 device using GNU Radio on the COSMOS Grid. RFNoC is Ettus Research's framework for implementing custom signal-processing blocks in the USRP FPGA fabric; running two chains concurrently enables transmit-and-receive workflows that share one radio without host-side routing overhead.
The experiment uses a Grid node (node21-1) connected to a USRP X310 at node23-1. A GNU Radio Companion flowgraph runs a single-tone transmitter alongside an FFT receiver that accumulates an averaged spectrum — both inside the same FPGA image.
After completing this tutorial you will be able to:
uhd_usrp_probe.uhd_image_loader.| Difficulty | Intermediate |
| Estimated time | TODO: verify |
| Domain / sandbox | grid.cosmos-lab.org |
| Topic group | SDR & GNU Radio |
| Last verified | Not re-tested (migrated 2026-06-20) |
Background knowledge
Account & access
Devices / nodes
| Resource | Role | Qty | Notes |
|---|---|---|---|
| node21-1 | Host running GNU Radio | 1 | Grid node; SSH with X11 forwarding required for GRC GUI |
| node23-1 | USRP X310 | 1 | Addressed at 10.10.23.1; must be power-cycled after FPGA reflash |
Disk images
| Image | Load onto | Provides |
|---|---|---|
| rfnoc-tutorial.ndz | node21-1 | GNU Radio + RFNoC-enabled UHD; GRC flowgraph pre-placed in home directory |
Software components
| Component | Version | Source |
|---|---|---|
| GNU Radio Companion (GRC) | TODO: verify | preinstalled in rfnoc-tutorial.ndz |
| UHD (USRP Hardware Driver) | TODO: verify | preinstalled in rfnoc-tutorial.ndz |
RFNoC FPGA image (usrp_x310_fpga_RFNOC_HG.bit) |
TODO: verify | /usr/local/share/uhd/images/ on node21-1 |
Spectrum / RF / special
The USRP X310 performs both TX and RX in the RFNoC flowgraph. Frequency and power settings are defined in the GRC flowgraph (rfnoc_rxtx_fft.grc). Ensure your reservation covers the spectrum used by the flowgraph. The testbed is shielded; check current status via the COSMOS portal.
node21-1 (host) connects to the USRP X310 at node23-1 (10.10.23.1) over the Grid data network. The USRP X310 runs an RFNoC FPGA image (usrp_x310_fpga_RFNOC_HG.bit) that exposes multiple programmable DSP blocks — Radio_0/1, DDC_0, DUC_0, FFT_0, SigGen_0, etc. The GRC flowgraph on node21-1 configures two RFNoC chains inside that FPGA: one chain transmits a single tone and the other receives and FFT-processes the signal, averaging the spectrum over time. Both chains share the single X310 device.
ssh <username>@console.grid.cosmos-lab.org
omf tell -a offh -t node21-1
omf load -i rfnoc-tutorial.ndz -t node21-1
omf tell -a on -t node21-1
ssh -Y root@node21-1
From node21-1, probe the USRP device at 10.10.23.1 and check which RFNoC blocks are present:
uhd_usrp_probe --args "addr=10.10.23.1"
The RFNoC blocks are listed at the end of the output. For the usrp_x310_fpga_RFNOC_HG.bit image, you should see:
_____________________________________________________
/
| RFNoC blocks on this device:
|
| | * DmaFIFO_0
| | * Radio_0
| | * Radio_1
| | * DDC_0
| | * DUC_0
| | * FFT_0
| | * Window_0
| | * FIR_0
| | * SigGen_0
| | * KeepOneInN_0
| | * fosphor_0
| | * FIFO_0
| | * FIFO_1
If those blocks are not listed, the correct FPGA image is not loaded — proceed to Step 2. Otherwise skip to Step 3.
If the blocks from Step 1 are missing, flash the correct bitfile:
uhd_image_loader --fpga-path /usr/local/share/uhd/images/usrp_x310_fpga_RFNOC_HG.bit --args "type=x300,addr=10.10.23.1"
After loading a new image, the USRP X310 must be power-cycled. Run the following from the Grid console (not from node21-1):
omf tell -a offh -t node23-1
omf tell -a on -t node23-1
Wait for the USRP to come back up, then repeat Step 1 to confirm the blocks are now present.
From node21-1 (with X11 forwarding active), confirm the GRC flowgraph file is present in the home directory:
ls ~/rfnoc_rxtx_fft.grc

The original tutorial included a screenshot of the GRC flowgraph (grc-scrot.png). The source file is at /trac/orbit__tutorials__k0sdr__tutorial21__grc-scrot.png and needs to be re-uploaded. The flowgraph can also be downloaded from .
Open the flowgraph in GNU Radio Companion:
gnuradio-companion ~/rfnoc_rxtx_fft.grc
GRC may report an error in the scheme when RFNoC blocks are used — this is a known behaviour with RFNoC blocks in GRC and does not prevent execution. Run the flowgraph by pressing F6.
The flowgraph contains two RFNoC chains:
Both chains operate concurrently on the same USRP X310 device.
uhd_usrp_probe --args "addr=10.10.23.1" lists all expected RFNoC blocks (DmaFIFO_0, Radio_0, Radio_1, DDC_0, DUC_0, FFT_0, SigGen_0, etc.).omf tell -a offh -t node21-1
omf tell -a offh -t node23-1
(No omf save needed unless you modified the image or flowgraph and want to keep the changes.)
| Symptom | Likely cause | Fix |
|---|---|---|
uhd_usrp_probe cannot reach 10.10.23.1 |
USRP node not powered on or wrong address | Verify node23-1 is on (omf stat -t node23-1) and that 10.10.23.1 is reachable from node21-1 (ping 10.10.23.1) |
RFNoC blocks not listed by uhd_usrp_probe |
Wrong FPGA image loaded on X310 | Run uhd_image_loader as in Step 2, then power-cycle node23-1 from the console |
| GRC reports an error when opening the flowgraph | Known RFNoC/GRC compatibility behaviour | Ignore the error and press F6 to execute; the flowgraph will still run |
| GRC window does not appear | X11 forwarding not set up | Reconnect to node21-1 with ssh -Y root@node21-1 |
| After FPGA reflash, USRP still shows old blocks | USRP was not fully power-cycled | Run omf tell -a offh -t node23-1 then omf tell -a on -t node23-1 from the console and wait ~30 s |
Author(s): COSMOS team · Last verified: Not re-tested (migrated 2026-06-20) · Tested image/release: rfnoc-tutorial.ndz · Tags: sdr, gnuradio, rfnoc, usrp, x310, grid