Xilinx Vivado

Arch Linux is not officially supported by Vivado, but as happens with
Xilinx ISE WebPACK
, most of its features can be used with a bit of hacking.
Installation
Xilinx Vivado can be downloaded from its official website
[1]
. It is recommended to download "Vivado HLx <year>.<version>: All OS installer Single-File Download" tarball, but make sure not to be in a hurry, as it is a large download (over 70 GB). Update tarballs can also be downloaded and installed later. The other installer can also be used, but see the troubleshooting section below first.
AUR Package
The
vivado
AUR
package can be used to create a Vivado installation managed by
pacman
. Since the download of the installer is locked behind a login wall, it needs to be downloaded manually as outlined above and placed in the same directory as the
PKGBUILD
. The package only builds the latest major version (<year>.<version>), not the minor updates (<year>.<version>.<update>); if these are required, install Vivado manually instead.
Digilent USB-JTAG Drivers
To use Digilent Adept USB-JTAG adapters (e.g. the onboard JTAG adapter on the
ZedBoard
) from Vivado, you need to install the Digilent
Adept Runtime
.
Make sure you have installed
fxload
AUR
.
To install the Digilent Adept Runtime, it is recommended to install
digilent.adept.runtime
AUR
.
In addition, installing
digilent.adept.utilities
AUR
may do good to configuring your board.
Tips and tricks
Enable display scaling
Start Vivado, then set the scaling rate through
Tools > Setting > Display > Scaling
.
Disable WebTalk
The free WebPACK license does not let you disable this feature which uploads usage data to Xilinx's servers when generating a bitstream, but synthesis will complete just fine if the connection fails. A simple way to make it fail consistently for Vivado tools only is to set an invalid HTTPS proxy for it.
/opt/Xilinx/Vivado/<version>/bin/setupEnv.sh
...

export HTTPS_PROXY=localhost
# Optional whitelist
#export NO_PROXY="1.2.3.4,comma,separated,*.list:port"
This method will not pollute your environment, only the temporary environment that is configured upon startup of the tools, so it should not break anything else.
Troubleshooting
HTML links under Help menu do not open in browser
See
https://support.xilinx.com/s/article/76524?language=en_US
Create file
/Xilinx_path/Vitis_HLS/yyyy.Q/bin/compat_firefox
#!/bin/sh
unset LD_LIBRARY_PATH
firefox $@
then configure the script at
Window > Preferences > Web Browser
.
Vitis HLS no response or only splash screen visible
See
https://support.xilinx.com/s/question/0D52E00006hpY4PSAU/vitishls-20202-not-starting-only-splash-screen-visible
When you run
/Xilinx_path/Vitis_HLS/yyyy.Q/bin/vitis_hls
(the path of Vitis_HLS in *.Desktop file), you may get
/Xilinx_path/Vitis_HLS/yyyy.Q/bin/vitis_hls
****** Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2021.2 (64-bit)
  **** SW Build 3367213 on Tue Oct 19 02:47:39 MDT 2021
  **** IP Build 3369179 on Thu Oct 21 08:25:16 MDT 2021
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.

source /opt/Xilinx/Vitis_HLS/2021.2/scripts/vitis_hls/hls.tcl -notrace
INFO: [HLS 200-10] Running '/opt/Xilinx/Vitis_HLS/2021.2/bin/unwrapped/lnx64.o/vitis_hls'
INFO: [HLS 200-10] For user 'username' on host 'hostname' (Linux_x86_64 version 5.14.16-arch1-1) on Sun Nov 07 21:57:50 CST 2021
INFO: [HLS 200-10] On os "Arch Linux"
INFO: [HLS 200-10] In directory '$HOME'
INFO: [HLS 200-10] Bringing up Vitis HLS GUI ...
Then it is stuck here or exit directly.
To fix this issue, first change the file
/Xilinx_path/Vitis_HLS/yyyy.Q/common/scripts/autopilot_init.tcl
line 40
from
----%r&-'%rl%&n$&lt'v-=
to
----%r&-'%rl%&n$&lt'v->
Then add
osgi.locking=none
to file
/Xilinx_path/Vitis_HLS/yyyy.Q/lnx64/tools/eclipse/configuration/config.ini
Synthesis segfaults
See
https://support.xilinx.com/s/feed/0D52E00006hpUycSAE?language=en_US
You will need to recompile
glibc
(just take the
PKGBUILD
from the
abs
) with
--disable-lock-elision
. Instead of patching the system libc in
/usr/lib
, copy the newly
compiled
libpthread-2.25.so
and
libc-2.25.so
to
/opt/Xilinx/Vivado/2016.4/ids_lite/ISE/lib/lin64
Do not forget to repeat this when
glibc
gets upgraded.
xsct, xsdb, xmd, and tclsh segfault
The Xilinx Vivado command-line tools xsct, xsdb, xmd, and tclsh may crash with a message similar to the following:
Segmentation fault (core dumped) "$RDI_BINROOT"/unwrapped/"$RDI_PLATFORM$RDI_OPT_EXT"/rlwrap -rc -f "$RDI_APPROOT"/scripts/xsdb/xsdb/cmdlist -H "$HOME"/.xsctcmdhistory "$RDI_BINROOT"/loader -exec rdi_xsct "${RDI_ARGS[@]}"
This is a problem with the rlwrap version bundled with Vivado, probably due to the lack of legacy vsyscall emulation in Arch Linux.
To fix this issue, either drop rlwrap altogether (losing command history and auto-completion), or install
rlwrap
and edit the path to the rlwrap binary in the affected command startup script(s) from:
/opt/Xilinx/{Vivado,SDK}/YYYY.Q/bin/{xsct,xsdb,xmd,tclsh}
# Use rlwrap to invoke the tool
"$RDI_BINROOT"/unwrapped/"$RDI_PLATFORM$RDI_OPT_EXT"/rlwrap ...
To the following:
/opt/Xilinx/{Vivado,SDK}/YYYY.Q/bin/{xsct,xsdb,xmd,tclsh}
# Use rlwrap to invoke the tool
/usr/bin/rlwrap ...
# OR run the tool without rlwrap
#"$RDI_BINROOT"/loader -exec rdi_{xsct,xsdb,xmd,tclsh} "${RDI_ARGS[@]}"
Vivado HLS testbench error with GCC
Vivado requires an older version of
glibc
(2.26).
The solution proposed in
this thread
from Xilinx forums suggests to update the fixed headers shipped by Xilinx.
Run:
# /opt/Xilinx/Vivado/2018.1/lnx64/tools/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.3/install-tools/mkheaders /opt/Xilinx/Vivado/2018.1/lnx64/tools/gcc
To update Vivado from 2020.1 to Vivado 2020.1.1
If your 2020.1 installation failed to launch and needed to be installed in batch mode, you will need to update using batch mode:
# ./xsetup -b Update
If Vivado was originally installed by the root user, you will need to launch the update as the root user.
Configuring an IP in Vivado 2021.2 causes a crash
See
[2]
When editing an IP with Vivado 2021.2, Vivado may crash and report the following error:
hs_err_pid*.log
#
# An unexpected error has occurred (11)
#
Stack:
/opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib//server/libjvm.so(+0xbefecb) [0x7fd1e21efecb]
/opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib//server/libjvm.so(JVM_handle_linux_signal+0xd1) [0x7fd1e21f6c81]
/opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib//server/libjvm.so(+0xbead23) [0x7fd1e21ead23]
/usr/lib/libc.so.6(+0x42560) [0x7fd246e38560]
/opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib/libharfbuzz.so(+0x3574d) [0x7fd1bc03574d]
/usr/lib/libharfbuzz.so.0(hb_font_funcs_set_glyph_shape_func+0x36) [0x7fd24503e886]
/usr/lib/libharfbuzz.so.0(+0x9a802) [0x7fd2450ab802]
/usr/lib/libharfbuzz.so.0(hb_ft_font_create+0x37) [0x7fd2450abcc7]
/usr/lib/libfreetype.so.6(+0x5e2f0) [0x7fd2464912f0]
/usr/lib/libfreetype.so.6(+0x6b7ad) [0x7fd24649e7ad]
/usr/lib/libfreetype.so.6(FT_Load_Glyph+0x681) [0x7fd2464471a1]
/opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib/libfontmanager.so(+0x7abf) [0x7fd1bc407abf]
/opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib/libfontmanager.so(Java_sun_font_FreetypeFontScaler_getGlyphAdvanceNative+0x14) [0x7fd1bc4082b4]
[0x7fd1c8e87710]
This is due to a conflict between Vivado's and system's version of
harfbuzz
library.
A possible workaround is to force Vivado to use the system
libharfbuzz
, by renaming the
.so
# mv /opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib/libharfbuzz.so /opt/Xilinx/Vivado/2021.2/tps/lnx64/jre11.0.11_9/lib/libharfbuzz.so.bak
Synthesis fails on certain locales
If your system locale does not use a dot
.
as the decimal seperator, but for example a comma
,
(e.g.
de_DE
), synthesis may fail with errors such as wrong operator types for
+
.
A possible workaround is to force Vivado to use
en_US.UTF-8
as the locale for numerics. This can be easily done by appending
export LC_NUMERIC=en_US.UTF-8
to
<your-vivado-installation-path>/bin/setupEnv.sh
.
Fonts ignore system anti-aliasing settings
With OpenJDK 11 and Vivado display scaling activated, the menu and other UI element fonts may render without any anti-antialiasing regardless of desktop environment settings.  This can be fixed by editing the Vivado launch script to append
awt.useSystemAAFontSettings=on
to the JVM options.
Assuming Vivado is installed in the default location of
/opt/Xilinx/Vivado/YYYY.Q
where
YYYY.Q
is the verion (i.e. 2020.2), modify
vivado
to include the following:
/opt/Xilinx/Vivado/YYYY.Q/bin/vivado
...
export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true"
...
Blank/grey window
See
Java#Gray window, applications not resizing with WM, menus immediately closing
.
Vitis: cannot open libssl.so.10
While creating a new platform component, cmake errors on:
cmake: error while loading shared libraries: libssl.so.10: cannot open shared object file: No such file or directory
As suggested in an
upstream support answer
:
# ln -sf /path/to/Vitis/2023.2/tps/lnx64/cmake-3.24.2/libs/Rhel/9/* /usr/lib
Vitis: Can't load library: ... libswt-pi4-gtk.so ...
You run vitis:
$ /tools/Xilinx/Vitis/2022.2/bin/vitis
You get error messages here
/home/<user>/.Xilinx/Vitis/2022.2/<a-long-numbers>.log
...
	no swt-pi4-gtk-4932r18 in java.library.path: [/tools/Xilinx/Vitis/2022.2/tps/lnx64/java-cef-95.0.4638.69/bin/lib/linux64, /tools/Xilinx/Vitis/2022.2/tps/lnx64/javafx-sdk-11.0.2/lib, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o/Default, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/tps/lnx64/jre11.0.11_9/lib/, /tools/Xilinx/Vitis/2022.2/tps/lnx64/jre11.0.11_9/lib//server, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o/Default, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/tps/lnx64/python-3.8.3/lib, /tools/Xilinx/Vitis/2022.2/aietools/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/bin/../lnx64/tools/dot/lib, /usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
	no swt-pi4-gtk in java.library.path: [/tools/Xilinx/Vitis/2022.2/tps/lnx64/java-cef-95.0.4638.69/bin/lib/linux64, /tools/Xilinx/Vitis/2022.2/tps/lnx64/javafx-sdk-11.0.2/lib, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o/Default, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/tps/lnx64/jre11.0.11_9/lib/, /tools/Xilinx/Vitis/2022.2/tps/lnx64/jre11.0.11_9/lib//server, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o/Default, /tools/Xilinx/Vitis/2022.2/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/tps/lnx64/python-3.8.3/lib, /tools/Xilinx/Vitis/2022.2/aietools/lib/lnx64.o, /tools/Xilinx/Vitis/2022.2/bin/../lnx64/tools/dot/lib, /usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
	Can't load library: /home/<user>/.swt/lib/linux/x86_64/libswt-pi4-gtk-4932r18.so
	Can't load library: /home/<user>/.swt/lib/linux/x86_64/libswt-pi4-gtk.so
...
This problem is due to
libstdc++.so.6
.
Make sure
libstdc++.so.6
has been installed in your computer:
$ find /usr/lib -iname 'libstdc++.so.6'
Let's fix it:
# cd /tools/Xilinx/Vitis/2022.2/lib/lnx64.o/Default/
# mv libstdc++.so.6 libstdc++.so.6.bak
# ln -sf /usr/lib/libstdc++.so.6 ./libstdc++.so.6
Above way should solve this problem when you run Vitis.
The self-extracting web installer hangs at "Generating installed devices list"
Install
ncurses5-compat-libs
AUR
.
Error while loading shared libraries: libcrypt.so.1
Install
libxcrypt-compat
.
Segfault if an LDAP user compiles a Vitis kernel
Symptom: LDAP users encounter segmentation faults, but local users do not.
Example error when a Vitis kernel is compiled using
v++
:
/opt/Xilinx/Vivado/2023.2/bin/rdiArgs.sh: line 369: ... Segmentation fault      (core dumped) "$RDI_PROG" "$@"
segfault in /opt/Xilinx/Vivado/2023.2/bin/unwrapped/lnx64.o/vivado -exec vivado -notrace -mode batch -source run_ippack.tcl, exiting...
ERROR: [IMPL 213-28] Failed to generate IP.
...
command 'ap_source' returned error code
   while executing
"source vadd.tcl"
   ("uplevel" body line 1)
   invoked from within
"uplevel \#0 [list source $tclfile] "
If you remove
ldap
from the name service switch configuration file, the symptom is gone, however the LDAP users cannot login:
/etc/nsswitch.conf
...
passwd: files systemd [success=return] #ldap
...
The workaround is to create local users.
Vivado shows an empty screen on Sway
This behavior happens in versions 2024.{1,2}. Set
_JAVA_AWT_WM_NONREPARENTING=1
in your environment. See
https://github.com/swaywm/sway/wiki#issues-with-java-applications
.
Missing libtinfo.so.5 library
When launching Vivado GUI, you may encounter:
application-specific initialization failed: couldn't load file "libxv_commontasks.so": libtinfo.so.5: cannot open shared object file: No such file or directory
This occurs because Vivado requires an older version of the ncurses library, which can be installed from
ncurses5-compat-libs
AUR
.
Alternatively, you can try to create a symbolic link to the newer version:
# ln -s /usr/lib/libtinfo.so.6 /usr/lib/libtinfo.so.5
Licensing
Xilinx Vivado contains modules called Intelectual Property (IP) cores and as the name suggests, you should expect licenses to be required for these modules. Two modes of licensing are possible: Floating (server) or Nodelocked (license file).
Floating License
Set the environment variable
XILINX_LICENSE_FILE
to point to a floating server license. You will have to be on the same network as the server, so connecting with a VPN might be required.
your-vivado-installation-path
/bin/setupEnv.sh
...
# Add your floating license
export XILINXD_LICENSE_FILE=2100@<server_name>
Nodeblocked License
Generate a license file at
https://www.xilinx.com/getlicense
. You will shortly receive an automatically generated email with the license file
Xilinx.lic
. Download this to
${HOME}/.Xilinx
directory.