Friday, April 8, 2022

Making Xilinx ISE iMPACT 14.7 run on Ubuntu 20.04

This article assumes you already have Xilinx ISE 14.7 installed and running on your system. If not, follow the instructions in this article, which are still valid for Ubuntu 20.04.

There are two issues with running iMPACT from ISE 14.7 on an Ubuntu 20.04 system (similar problems exist with 18.04). One is related to changes in the udev dynamic device management system, and the other is related to the libusb library used to communicate with devices connected via USB.

Fixing the udev configuration

The ISE 14.7 distribution provides an installation procedure "setup_pcbusb" that is intended to configure udev. Unfortunately, it does not work for recent versions of Ubuntu and other Linux systems. Rather than deal with this mess, I suggest setting it up manually.

1. Install the fxload package. This is used to download firmware into the Xilinx Platform Cable USB pod:
sudo apt install fxload

2. Next, copy the firmware from the Xilinx installation directory to /usr/share:

sudo cp /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/*.hex /usr/share

Note: A previous version of this post gave the wrong source directory, which may result in fxload failing to load the firmware. Using the firmware from the correct directory should fix this issue.

3. Create the udev rules file by copying the following text into /etc/udev/rules.d/xusbdfwu.rules. This is needed because the rules file provided by ISE doesn't work with more recent versions of udev:

# version 0003
ATTR{idVendor}=="03fd", ATTR{idProduct}=="0008", MODE="666"
ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $tempnode"
ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D $tempnode"
ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $tempnode"
ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D $tempnode"
ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xp2.hex -D $tempnode"
ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0015", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xse.hex -D $tempnode"

Fixing the libusb problems

The version of iMPACT provided by ISE 14.7 wants to use libusb version 0.1 rather than the current 1.0 version. This is available in the 20.04 repo. Unfortunately, iMPACT wants to access it by a file name which doesn't end up in the file system. In prior Ubuntu releases, installing the libusb-dev package would create the appropriate symlink, but the latest packaging creates what appears to be a linker text file instead. So we must create the symlink ourselves.

1. Install the libusb-0.1-4 package:

sudo apt install libusb-0.1-4

2. Provide a symbolic link to libusb-0.1.so.4:

ln -s /lib/x86_64-linux-gnu/libusb-0.1.so.4 \
    /opt/Xilinx/14.7/ISE_DS/common/lib/lin64/libusb.so

 

This should be sufficient to let iMPACT run on an Ubuntu 20.04 system. Let me know if it doesn't work for you.

No comments:

Post a Comment