wiki:Tutorials/k0SDR/Tutorial19

Version 18 (modified by prasanthi, 8 years ago) ( diff )

Getting started with RFNoC X310

Table of Contents

  1. SDR Tutorials
    1. Working with USRP2 - Universal Software Radio Peripheral
      1. Description
      2. Hardware / Software Resources utilized
      3. Set up
      4. Usage
      5. Capture waveform and record to file & add time-domain plot of waveform
      6. Troubleshooting
    1. Working with USRP X310
      1. Description
      2. Hardware / Software Resources Utilized
      3. Set Up
        1. Imaging
        2. Accessing the Nodes
        3. Configuring the Network Interface
        4. Setting up GNU Radio
      4. Building the GNU Radio Flowgraphs
        1. Transmitter
        2. Receiver
      5. Running the Experiment
      6. Troubleshooting
        1. xterm Executable Not Found
        2. FPGA Compatibility Mismatch
    1. Simple radio example with GNURADIO benchmark scripts
      1. Description
      2. Hardware / Software Resources utilized
      3. Set up
      4. Running GNU Radio benchmark scripts
      5. Outputs from transmitter and receiver
      6. Troubleshooting
    1. Simple radio example with GNURADIO benchmark scripts (OEDL)
      1. Description
      2. Hardware / Software Resources utilized
      3. Set up
      4. Running OEDL script and viewing results
      5. OEDL script
    1. OFDM radio example with GNURADIO benchmark scripts
      1. Description
      2. Hardware / Software Resources utilized
      3. Set up
      4. Running OEDL script
    1. Spectrum sensing with USRP2 and wiserd
      1. Description
      2. Hardware / Software Resources utilized
      3. Set up
      4. Generate signal source file using octave
      5. Set up transmitting node
      6. Set up receiving node(s)
    1. Spectrum sensing with USRP2 and wiserd (OEDL and OML)
      1. Description
      2. Hardware / Software Resources utilized
      3. Transmit predefined tone
      4. Record spectrum data to an OML file
      5. Performing the experiment using OEDL
    1. Transmitting wideband signals using USRP X310 and wiserd
      1. Description
      2. Transmitting a signal using wiserd
      3. Creating the signal
    1. Running DSC match script from the grid console
    1. Working with GNURadio and Nutaq ZeptoSDR
      1. Description
      2. Set up
      3. Run the GRC scripts
    1. Realtek 2832 EZCap - A Frugal SDR
      1. Prereqs
      2. A cheap spectrum analyzer
    1. MacSwitch (Obsolete)
      1. Prerequisites
      2. Start Mac Switch
    1. Zynq-based WISER platform - Start-up test
      1. Description
      2. Hardware / Software Resources utilized
      3. Set up
      4. Loading the Zedboard
      5. Running a start up test
    1. Zynq-based WISER platform - Spectrum Sensing
      1. Description
      2. Hardware / Software Resources utilized
      3. Set up
      4. Start spectrum sensing
    1. Zynq-based WISER platform - Spectrum sensing with multiple nodes (OEDL)
      1. Description
      2. Hardware / Software Resources utilized
      3. Spectrum sensing with an OEDL script
    1. Zynq-based WISER platform - Building the Firmware
      1. Description
      2. Getting the FPGA source code
      3. Building the FPGA design
      4. Building ARM core software
    1. Nutaq - PicoSDR start-up and configuration
      1. Description
      2. Set up
      3. Launch demo scripts
    1. Multi channel sample collection with x310
      1. Description
      2. Set up
      3. Collect samples
    1. Getting started with RFNoC X310
      1. Description
      2. Set up
      3. Find USRP X310s
      4. Program the FPGA
    1. Multi Channel Sample Processing & Visualization
      1. Hardware / software resources utilized
      2. Receive multi channel signal for processing and plotting
      3. Transmit a signal using a single usrp
    2. Plot the IQ Constellation of received signal
      1. Multi-channel Uhd STreamer (MUST)
      2. Description
      3. How it works (without going into the source-code :-D
      4. Source code & compilation
      5. Hardware interface application
      6. XML file
      7. Command server
      8. Usage Example
      9. Signal handler applications
      10. Tutorials
    1. Using two RFNoC streams simultaneously on a single USRP device
      1. Description
      2. Set Up
      3. Running the Simulation
    1. Using 2 transmit or 2 receive antennas simultaneously
      1. Description
      2. Set Up
      3. Running the Experiment
    1. Generate random transmissions emulating Primary Transmitters
      1. Description
      2. Set Up
      3. Running the Experiment
    1. RFNoC Spectrum Sensing
      1. Description
      2. Set Up
        1. Prepare Receive Node
        2. Prepare Receive USRPs
        3. Prepare Transmit Node
        4. Prepare Transmit USRP
        5. Set up SSH tunnel from your local port 5100 to grid.orbit-lab.org:5100
        6. Set up a web proxy for the receive node
      3. Run the experiment
    1. Full-Duplex Wireless using USRP N210
      1. Description
        1. Technical Report
        2. Updates
      2. Hardware / Software Resources Utilized
      3. Set Up
      4. Run the Experiments
      5. Example Experiment 1: A Real-Time Full-Duplex Radio with OFDM PHY (GNU …
      6. Example Experiment 2: A Simple Full-Duplex Radio Experiment (Terminal …
        1. In Terminal 1
          1. In Terminal 2 (SUB-20)
        2. A Secondary Transmitter Using Node13-8
        3. Acknowledgements
    1. LTE Traffic Trace Collection
      1. Description
      2. Setup OAI emulation framework
      3. Connecting UE to LTE network
      4. Connecting Multiple UEs
      5. Enabling OAI logging Module
      6. Application Design
      7. Running OAI using scripts
    1. Simple Radio Example with USRP X310 on ORBIT Sandbox 2
      1. Description
      2. Set Up
        1. Prepare the nodes
        2. Prepare network setup for USRP access
      3. Run the experiment
    1. Wideband Channel Sounding with USRP X310s
      1. Description
      2. Set Up
        1. Prepare Receive Node
        2. Prepare Receive USRPs
        3. Prepare Transmit Node
        4. Prepare Transmit USRP
        5. Set up SSH tunnel from your local port 5100 to grid.orbit-lab.org:5100
        6. Set up a web proxy for the receive node
      3. Run the experiment

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 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
    
    
Note: See TracWiki for help on using the wiki.