/ise14

Xilinx ISE 14.7 in a container

Primary LanguageShell

Xilinx ISE WebPack 14.7 - Docker image builder

After Wikipedia:

Since 2012, Xilinx ISE has been discontinued in favor of Vivado Design Suite that serves the same roles as ISE with additional features for system on a chip development.[8][9] Xilinx released the last version of ISE in October 2013 (version 14.7), and states that "ISE has moved into the sustaining phase of its product life cycle, and there are no more planned ISE releases."[1]

As such, ISE gets no updates and is notoriously annoying to run on a modern Linux box. Unfortunately, Vivado doesn't support older FPGAs, like Spartan-II or Spartan-3. I want to use it occasionally for my Spartan-3 boards, so, to make my life easier, I've created this repository. It compiles various hacks that can be found elsewhere, saving me a lot of googling and head scratching.

Important notes

  • the resulting Docker image is huge - 24.7GB on my PC. I've tried to make it smaller using Docker's multi-stage build feature (to avoid including installation files in the final image), but it turned out much bigger than expected, not sure why. I decided it was not a battle worth fighting.

  • it needs X11, no Wayland, sorry!

  • if FPGA Editor crashes for you, it's most likely due to missing fonts (seriously!). If you run Debian or Ubuntu on the host machine, it should be enough to execute the following command and restart X11 afterwards.

    $ apt-get install xfonts-75dpi
    

​ Be patient, FPGA Editor needs ~10s to start on my Ryzen 5700G!

  • Docker image uses Ubuntu 14.04.6 LTS as its base image. Anything newer caused more problems for me.
  • Docker container is spawned with --init, so it collects the zombie processes. However, for some reason _pn process (ISE Project Navigator, main GUI) doesn't seem to wait() for spawned child processes, producing zombies anyway. The same happens with regular installation outside Docker, so blame Xilinx, not me :)

Building the Docker image

How to build the image:

  • download Xilinx_ISE_DS_Lin_14.7_1015_1.tar file from AMD (you need to register on the site first) into this directory

    $ sha1sum Xilinx_ISE_DS_Lin_14.7_1015_1.tar
    4a1d86acd78854b039c88c429854612823942977  Xilinx_ISE_DS_Lin_14.7_1015_1.tar
  • build the container image (default tag: ise:14.7) with:

    $ ./build.sh

Running it

See bin for scripts:

  • ise14_spawn starts a container named ise14 (you can override it via CONTAINER_NAME env variable) and executes whatever command is given as argument.

    • it sets all the typical environment variables (usually set by sourcing settings64.sh), so you can directly execute any ISE tool in a container, e.g.:

      $ ./bin/ise14_spawn fpga_editor
      
    • it runs with current user's UID /GID and mounts user's home directory, so you can feel at home, literally :)

    • the container is started in the background (-d) and removed after exit (--rm). In case of any troubles, it might be useful to remove --rm temporarily (e.g. to check the logs).

    • it looks for the license file at $HOME/.Xilinx/Xilinx.lic by default - set XILINXD_LICENSE_FILE to override, if needed.

  • ise script is a 1-liner calling ise14_spawn ise to start the main ISE Project Navigator.

USB programming cable drivers

The last important thing is to setup Xilinx cable drivers. These dongles use Cypress CY7C68013A microcontroller which requires firmware to be uploaded to operate. It's best to handle this outside Docker. Do the following:

  • build Docker image, as described above

  • run ./udev/get_firmwares.sh as root to extract firmware hex files from the image (they get copied to /usr/local/lib/xilinx/)

  • install fxload, tool used to upload firmware to Cypress MCUs, e.g. with:

    $ apt-get install fxload
    
  • copy ./udev/90-xilinx.rules to /etc/udev/rules.d/ and reload udevd (as root):

    $ cp ./udev/90-xilinx.rules /etc/udev/rules.d/
    $ udevadm control -R
    

Now you should be able to see the cable in the ISE iMPACT tool.