RapidWright Data Files¶
Table of Contents
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 variableAPPDATA
For Linux,
~/.local/share/RapidWright
or a path set by the environment variableXDG_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:
Lack of persistent Internet connectivity
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, 2022.1.0 to 2022.2.3 and
2024.1.0 and later releases, the data files are 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, but newer devices starting in 2024.1.0
caused the release to exceed the limit again. All files
except Series 7 devices are in rapidwright_data.zip
and
Series 7 devices are in rapidwright_data2.zip
.