The USRP FPGA build system requires a UNIX-like environment with the following dependencies:
The following USRPs work with the free versions of the Xilinx tools as well as the full licensed versions:
In general, a high-performance PC with a lot of disk space and memory is recommended for building FPGA images. For USRP FPGA builds, the following system RAM is recommended:
For other system requirements related to the Xilinx tools, see the appropriate Xilinx documentation for the build tool required by your FPGA type.
USRP | FPGA | Design Tool |
---|---|---|
USRP B200 | Spartan-6 XC6SLX75 | ISE |
USRP B210 | Spartan-6 XC6SLX150 | ISE |
USRP B200mini | Spartan-6 XC6SLX75 | ISE |
USRP B205mini | Spartan-6 XC6SLX150 | ISE |
USRP X300 | Kintex-7 XC7K325T (7 Series: Kintex-7) | Vivado |
USRP X310 | Kintex-7 XC7K410T (7 Series: Kintex-7) | Vivado |
USRP E31x | Zynq-7000 XC7Z020 (SoCs: Zynq-7000), Speed grade 1 or 3 (depending on revision) | Vivado |
USRP E320 | Zynq-7000 XC7Z045 (SoCs: Zynq-7000) | Vivado |
USRP N300 | Zynq-7000 XC7Z035 (SoCs: Zynq-7000) | Vivado |
USRP N310/N320 | Zynq-7000 XC7Z100 (SoCs: Zynq-7000) | Vivado |
USRP X410 | RFSoC XCZU28DR Speed grade 1 (SoCs: Zynq UltraScale+ RFSoC) | Vivado |
USRP X440 | RFSoC XCZU28DR Speed grade 2 (SoCs: Zynq UltraScale+ RFSoC) | Vivado |
Note: The Xilinx installation must include support for the specified FPGA family. You can save disk space and installation time by only installing support for the FPGAs you intend to use.
Download and install Xilinx Vivado or Xilinx ISE based on the target USRP.
/opt/Xilinx/
for Linux and C:\Xilinx
in Windows.If you prefer to use ModelSim, download and install Mentor ModelSim using the link above.
/opt/mentor/modelsim
for Linux and C:\mentor\modelsim
in WindowsYou can install all the dependencies through the package manager:
sudo apt-get install python3 bash build-essential doxygen
Your actual command may differ.
For building any RFNoC-capable device (out of the list above, that is all devices except for the B200 series USRPs), you also need to have rfnoc_image_builder
installed. This will be installed as part of a regular UHD installation.
You can install all the dependencies through the package manager:
sudo dnf -y install python bash make doxygen
Your actual command may differ.
NOTE: Windows is only supported with Vivado. The build system does not support Xilinx ISE in Windows.
Download the latest version on Cygwin (64-bit is preferred on a 64-bit OS) and install it using these instructions. The following additional packages are also required and can be selected in the GUI installer
python3 patch patchutils bash make gcc-core doxygen
Important: Starting with UHD 4.7, all RFNoC capable targets must be built using rfnoc_image_builder
, which is installed as part of UHD.
<repo>/fpga/usrp3/top/{project}
where {project}
is:x300
: For USRP X300 and USRP X310e31x
: For USRP E310e320
: For USRP E320n3xx
: For USRP N300/N310/N320x400
: For USRP X410/X440Then, call rfnoc_image_builder
to set up a build environment for Vivado and start the build:
rfnoc_image_builder -y <IMAGE CORE FILE>.yml [--target <TARGET_NAME>] \ [--vivado-path <VIVADO_PATH>] [--image_core_name <IMAGE_CORE_NAME>]
Notes:
--vivado-path
is not necessary. Otherwise, use this to allow the image builder to identify the Vivado path.--target
may or may not be necessary. See the individual device documentation further down.<repo>/fpga/usrp3/top/{project}/build
directory. Run make help
for more device-specific information.Some make targets can be called directly, and do not require rfnoc_image_builder
(e.g., all USRPs have an 'IP' target which pre-builds all IP). To call those, it is necessary to run
source ./setupenv.sh
first, before calling make.
The build environment also defines many ease-of-use utilities. Please use the Vivado Utility Reference page for a list and usage information.
Problem:
A sporadic routing error has been observed when building an FPGA with Vivado 2021.1, which prevents a bitfile from being generated:
ERROR: [Route 35-9] Router encountered a fatal exception of type 'N2rt13HDRTExceptionE' - 'Trying to tool lock on already tool locked arc ERROR: [Common 17-39] 'route_design' failed due to earlier errors.
Attempting to rebuild the FPGA on the same Git hash does not resolve the problem.
Solution:
Use a different Git hash or make a non-functional source code change to the HDL to rebuild the design.
According to Xilinx Support, this issue will be fixed in a future version of Vivado.
Problem:
When using the Vivado hardware manager (JTAG), the following error is observed:
ERROR: [Labtools 27-3733] Error during cs_server initialization: Vivado<->cs_server version mismatch, cs_server: [2021.1], Vivado: [2021.1_AR76780]. To remedy this error, terminate the cs_server exectuable, and relaunch with version 2021.1_AR76780. ERROR: [Common 17-39] 'connect_hw_server' failed due to earlier errors.
Solution:
This is a known issue in Vivado 2021.1. See Xilinx AR76681 for details.
Issue the following TCL command to disable the version check before attempting to connect to the hardware:
set_param labtools.override_cs_server_version_check 1
source <install_dir>/Xilinx/14.7/ISE_DS/settings64.sh
(64-bit platform)source <install_dir>/Xilinx/14.7/ISE_DS/settings32.sh
(32-bit platform)<repo>/fpga/usrp3/top/{project}
where {project}
is:b200
: For USRP B200 and USRP B210b200mini
: For USRP B200minimake <target>
where the target is specific to each product. To get a list of supported targets run make help
.<repo>/fpga/usrp3/top/{project}/build
directory. Run make help
for more information.build/usrp_<product>_fpga.bit
: Configuration bitstream with headerbuild/usrp_<product>_fpga.bin
: Configuration bitstream without headerbuild/usrp_<product>_fpga.syr
: Xilinx system reportbuild/usrp_<product>_fpga.twr
: Xilinx timing reportbuild/usrp_<product>_fpga.bit
: Configuration bitstream with headerbuild/usrp_<product>_fpga.bin
: Configuration bitstream without headerbuild/usrp_<product>_fpga.syr
: Xilinx system reportbuild/usrp_<product>_fpga.twr
: Xilinx timing reportUse make help
to produce a list of valid targets, as well as how to build them using rfnoc_image_builder
.
build/usrp_<product>_fpga_<image_type>.bit
: Configuration bitstream with headerbuild/usrp_<product>_fpga_<image_type>.bin
: Configuration bitstream without headerbuild/usrp_<product>_fpga_<image_type>.lvbitx
: Configuration bitstream for PCIe (NI-RIO)build/usrp_<product>_fpga_<image_type>.rpt
: System, utilization and timing summary reportUse make help
to produce a list of valid targets, as well as how to build them using rfnoc_image_builder
.
build/usrp_<product>_fpga.bit
: Configuration bitstream with headerbuild/usrp_<product>_fpga.dts
: Device tree overlaybuild/usrp_<product>_fpga.rpt
: System, utilization and timing summary reportUse make help
to produce a list of valid targets, as well as how to build them using rfnoc_image_builder
.
build/usrp_<product>_fpga.bit
: Configuration bitstream with headerbuild/usrp_<product>_fpga.dts
: Device tree overlaybuild/usrp_<product>_fpga.rpt
: System, utilization and timing summary reportThe targets depend on the actual hardware the FPGA image is being deployed to. Unlike the X300 Series, the daughterboards are an integral part of the module and not meant to be removed. Therefore, the target is specific to the combination of motherboard and daughterboards.
Use make help
to produce a list of valid targets, as well as how to build them using rfnoc_image_builder
.
For the N320 targets see also the N320 manual page on the UHD manual.
build/usrp_<product>_fpga.bit
: Configuration bitstream with headerbuild/usrp_<product>_fpga.dts
: Device tree overlaybuild/usrp_<product>_fpga.rpt
: System, utilization and timing summary reportUnlike other USRPs, the target types do not only describe the connector configuration, but also the available master clock rates. For example, the FPGA target type X4_200
is configured for a 200 MHz analog bandwidth, and can support a 245.76 MHz or 250 MHz master clock rate.
Furthermore, the image core YAML file itself describes the connector configuration, not the chosen target. Therefore, the --target
option on the image builder is generally not necessary.
A more detailed description of the targets can be found at FPGA Image Flavors. Run make help
in the <repo>/fpga/usrp3/top/x400/
directory to see the complete list of options available. It will list targets for both X410 and X440.
build/usrp_<product>_fpga.bit
: Configuration bitstream with headerbuild/usrp_<product>_fpga.dts
: Device tree overlaybuild/usrp_<product>_fpga.rpt
: System, utilization and timing summary reportIt is possible to make a target and specify additional options in the form VAR=VALUE
in the command. For example:
$ make X310 GUI=1
The options available are described in the following subsections.
GUI=1
: Run the Vivado build in GUI mode instead of batch mode. After the build is complete, Vivado provides an option to save the fully configured project for customizationCHECK=1
: Run elaboration only to check HDL syntaxSYNTH=1
: Run synthesis onlyTOP=<module>
: Specify an alternate top-level module for syntax checkingPROJECT_ONLY=1
: Only create a Xilinx project for the specified target(s). Useful for use with the ISE GUI.EXPORT_ONLY=1
: Export build targets from a GUI build to the build directory. Requires the project in build-*_* to be built.