Getting started with RFNoC X310
Table of Contents
- SDR Tutorials
Description
This tutorial is a guide for getting started with RFNoC using an USRP X310 on ORBIT grid. Before starting to experiment with RFNoC, here are a couple of useful presentations, write ups from Ettus Research, that one should go through.
https://github.com/EttusResearch/uhd/wiki/RFNoC:-Getting-Started
https://kb.ettus.com/Getting_Started_with_RFNoC_Development
Set up
- Make a reservation on the Orbit Scheduler for using the grid.
- Load baseline-rfnoc-labtools.ndz on an ORBIT node.
omf load -i baseline-rfnoc-labtools.ndz -t node18-1
- Once imaging is done, turn the node on
omf tell -a on -t node18-1
- Wait for the node to turn on and log in
ssh root@node18-1
Find USRP X310s
ORBIT grid has 8 USRP X310s in a MIMO rack ((23,1) … (23,8)) and 4 nodes with locally connected USRP X310s ((18,1),(18,20),(3,1),(3,20)). Of these 4 nodes, (18,20) and (3,1) have a PCI express link to their local X310, where as the other 2 have 10G Ethernet links.
- Finding X310s in the MIMO rack
X310s in the MIMO rack can be accessed from any node in the grid. Their IP addresses go from 10.10.23.1 to 10.10.23.8. X310 (23,1) is accessed from node (18,1) as shown below. Since the image used has UHD rfnoc-devel branch installation, the UHD version is shown as UHD_4.0.0.rfnoc-devel-211-g2cf80a69.
root@node18-1:~# uhd_find_devices --args="addr=10.10.23.1" linux; GNU C++ version 4.8.4; Boost_105400; UHD_4.0.0.rfnoc-devel-211-g2cf80a69 -------------------------------------------------- -- UHD Device 0 -------------------------------------------------- Device Address: serial: 30A3570 addr: 10.10.23.1 fpga: HG name: Mercury product: X310 type: x300
- Finding local X310 (10G Ethernet)
Nodes (18,1) and (3,20) have 10G Ethernet links to their local X310s. To access these X310s, please make sure the interface eth0 is configured as below.
root@node18-1:~# ifconfig eth0 192.168.10.1 netmask 255.255.255.0 mtu 9000Now, running uhd_find_devices with IP address 192.168.10.2 gives the following
root@node18-1:~# uhd_find_devices --args="addr=192.168.10.2" linux; GNU C++ version 4.8.4; Boost_105400; UHD_4.0.0.rfnoc-devel-211-g2cf80a69 -------------------------------------------------- -- UHD Device 0 -------------------------------------------------- Device Address: serial: F4E34F addr: 192.168.10.2 fpga: HG name: product: X310 type: x300If you do not specify an IP address in the args option, the node tries to access the X310s in the MIMO rack also.
root@node18-1:~# uhd_find_devices linux; GNU C++ version 4.8.4; Boost_105400; UHD_4.0.0.rfnoc-devel-211-g2cf80a69 -------------------------------------------------- -- UHD Device 0 -------------------------------------------------- Device Address: serial: 30A3570 addr: 10.10.23.1 fpga: HG name: Mercury product: X310 type: x300 -------------------------------------------------- -- UHD Device 1 -------------------------------------------------- Device Address: serial: F4E34F addr: 192.168.10.2 fpga: HG name: product: X310 type: x300
- Finding local X310 (PCI express)
Nodes (18,20) and (3,1) have PCI express links to their local X310s. To access these X310s, run the following command (https://files.ettus.com/manual/page_ni_rio_kernel.html)
root@node3-1:~# /usr/local/bin/niusrprio_pcie start Loading: NiRioSrv niusrpriok Starting: niusrpriorpcNow, running uhd_find_devices with resource RIO0 gives the following
root@node3-1:~# uhd_find_devices --args="resource=RIO0" linux; GNU C++ version 4.8.4; Boost_105400; UHD_4.0.0.rfnoc-devel-211-g2cf80a69 -------------------------------------------------- -- UHD Device 0 -------------------------------------------------- Device Address: serial: F4FCFF fpga: HG name: product: X310 resource: RIO0 type: x300
Program the FPGA
- To download the current default and RFNoC images, run uhd_images_downloader
root@node18-1:~# uhd_images_downloader Images destination: /usr/local/share/uhd/images Downloading images from: http://files.ettus.com/binaries/images/uhd-images_4.0.0.rfnoc-devel-209-gddd6608a.zip Downloading images to: /tmp/tmp9kHlI7/uhd-images_4.0.0.rfnoc-devel-209-gddd6608a.zip 77724 kB / 77724 kB (100%) Images successfully installed to: /usr/local/share/uhd/images
usrp_x310_fpga_RFNOC_HG.bit is the pre-built FPGA image with a subset of existing RFNoC blocks. https://kb.ettus.com/Getting_Started_with_RFNoC_Development#Testing_the_default_FPGA_image_and_building_from_existing_blocks has more information about the different images that are stored.
- The script usrp_x3xx_fpga_jtag_programmer.sh found in uhd/tools can be used to program the FPGA using jtag. When the jtag programmer is used, the FPGA image is lost on power cycling.
root@node18-1:~/uhd/tools# ./usrp_x3xx_fpga_jtag_programmer.sh --fpga-path="/usr/local/share/uhd/images/usrp_x310_fpga_RFNOC_HG.bit" ======================================= Copyright 2014 Ettus Research LLC JTAG Programming Tool ======================================= ==== Generating impact batch file cps1iXL9.impact.cmd... ==== Running impact -- loading /usr/local/share/uhd/images/usrp_x310_fpga_RFNOC_HG.bit into the FPGA...
- Now running uhd_usrp_probe should print out a lot of messages with this at the end : the list of RFNoC blocks in the current FPGA image.
/ | | | 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