== Getting started with RFNoC X310 == [[TOC(Tutorials/k0SDR*)]] === 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 http://static1.squarespace.com/static/543ae9afe4b0c3b808d72acd/t/55ddc6d6e4b09069ee81e20c/1440597718379/3.+braun_pendlum--rfnoc+2015-08-26.pdf https://kb.ettus.com/Getting_Started_with_RFNoC_Development === Set up === * Make a reservation on the [https://www.orbit-lab.org/schedule/ 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 9000 }}} Now, 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: x300 }}} If 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: niusrpriorpc }}} Now, 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 }}}