RapidWright Data Files

RapidWright maintains support for the full set of devices publicly available in the latest Vivado release. The information needed to populate RapidWright device models is stored in binary data files distributed with RapidWright. Starting in the 2021.1.0 release, these data files began to be distributed via a download on-demand model. This was done to accelerate installation, reduce disk space requirements and provided an easier path to upgrade.

On-demand Data File Downloads

All of the code involved in downloading and checking for data files is in the open source portion of RapidWright. Most of the code is found in com.xilinx.rapidwright.util.FileTools. All data files are specified by an MD5 checksum with a master list checked in at src/com/xilinx/rapidwright/util/DataVersions.java. When the user calls an API that requires a RapidWright data file, it will check the local file MD5 against the DataVersions.java to ensure they match. RapidWright caches the current data file’s MD5 by creating a small file alongside the data file with a .md5 extension for speed. If the file is missing or doesn’t match that expected MD5, it will attempt to download the file. This will happen behind the scenes transparent to the user with the exception that the first time call will take a bit longer since it is downloading the file.

If desired, a user can turn off the on-demand data file download feature by calling FileTools.setOverrideDataFileDownload(true) at the start of their RapidWright program.

Local Storage of Data Files

RapidWright data files are stored in two ways depending on how RapidWright has been installed.

Standalone Jar (Binary)

If RapidWright is installed using the standalone jar downloaded directly from a GitHub release or a Python pip install, the files are located in an OS-specified user directory:

  • For Windows, %USER%\AppData\Roaming\RapidWright or a path set by the environment variable APPDATA

  • For Linux, ~/.local/share/RapidWright or a path set by the environment variable XDG_DATA_HOME

It should be noted that the first time RapidWright is invoked using the standalone jar method, it will unpack a minimal set of data files that were included with the standalone jar to the directory cited above.

GitHub Clone (Source Code)

If RapidWright is installed by a clone of the GitHub repository (or a snapshot of the source code), the default directory is the directory created by the clone of the code (./RapidWright).

Override Data File Location

Both standalone jar and GitHub clone options can be overriden by setting the environment varable RAPIDWRIGHT_PATH. This will avoid the creation of the default OS/user specific directories.

Avoiding On-demand Download & Generation of Data Files

Two potential challenges exist for on-demand data file download and generation:

  1. Lack of persistent Internet connectivity

  2. Collisions due to independent, parallel instances of RapidWright runs

To alleviate the need for Internet access, the easiest option is to invoke the API FileTools.updateAllDataFiles() when Internet connectivity is available. After successful completion of calling this method, every potential data file that RapidWright could download will have been downloaded on the local system. To run this method from the command line run:

rapidwright jython -c 'FileTools.updateAllDataFiles()'

Note that this does not generate device cache files that can also potentially cause collisions if independent RapidWright instances are run simultaneously.

To eliminate file download/generation collisions, the API FileTools.ensureDataFilesAreStaticInstallFriendly(String... devices) has been created. Due to the overhead of generating a device cache file for each device, the user can specify the specific devices anticipated during future runs. As an example, to run this API from the command line for the xc7a100t and xc7a200t devices, run:

rapidwright jython -c "FileTools.ensureDataFilesAreStaticInstallFriendly("xc7a100t", "xc7a200t")'

Another option to avoid on-demand download is to obtain the rapidwright_data.zip file associated with the current release (see assets from the corresponding `GitHub Releases<https://github.com/Xilinx/RapidWright/releases>`_) and replace the data directory in the RapidWright directory with its contents.

Note

Due to GitHub size limitations, starting with the 2022.1.0 through 2022.2.3

release, the data files were split into two downloads (rapidwright_data.zip and rapidwright_data2.zip). In 2023.1.0, we switched to Zstandard compression for all our data files that has allowed the release to be consolidated back to a single release zip file. rapidwright_data.zip and rapidwright_data2.zip.