BGA in Container

Running Xilinx ISE 14.7 Inside Of Docker

Table of Contents

Summary

Running ISE inside of a virtual machine ensures a great deal of compatibility. However, there is additional overhead due to the virtualized hardware. If instead, you can run ISE out of a lightweight container, then the ISE UI will be more responsive and the overall experience will be better.

To install Xilinx ISE 14.7 in a Docker container, you will need to extract the files from the Xilinx installation material. Check out this article on how to grab the files from Xilinx’s latest Win10 download.

Environment Setup

You would need to install Docker on Mac OS X or Linux. Best way to get Docker onto your workstation is via the latest instructions from Docker itself:

Same story with Docker Compose:

DockerFile

For my docker container, I will be basing it on Ubuntu 20.10. I will also be making use of a folder from the host to provide the Xilinx ISE files.

My DockerFile:

# Using Ubuntu 20.20 base image
FROM ubuntu:20.10

# Ensure that package installations won't prompt docker while building image
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y update

# Install Java JRE/JDK 
RUN apt-get -y install openjdk-11-jre openjdk-11-jdk 

# Install build and cross-build environments. 
RUN apt-get -y install build-essential crossbuild-essential-armel crossbuild-essential-riscv64 crossbuild-essential-powerpc crossbuild-essential-arm64 crossbuild-essential-armhf crossbuild-essential-mips crossbuild-essential-mips64

# Tools for grabbing, decompressing, and extracting
RUN apt-get -y install wget screen curl htop ncftp unzip unrar cabextract unshield 

# Graphical environment support. Mainly for the X11 bits
RUN apt-get -y install xterm 
RUN apt-get -y install openssh-client openssh-server
RUN apt-get -y install net-tools vim inetutils-ping

EXPOSE 9922 22

COPY ./startup.sh /startup.sh
RUN chmod 700 /startup.sh
CMD ["/opt/startup.sh"]

This will build a Docker image that makes use of Ubuntu 20.10, installs various support packages. I include Java and the crossbuild tools since there is a possibility I might do some embedded code compilation. The other tools are for extraction of files from the ZIP/OVA/VMDK.

The startup.sh referred to in the Dockerfile is:

#!/usr/bin/env bash
/etc/init.d/ssh start

while :
do
  sleep 20
done

Basically, make sure ssh is started up and then run in a loop until we are ready to make use of the instance.

It would be a good idea to add in ssh-keys as well, so you can login without too much trouble.

docker-compose.xml

With the Dockerfile from above, you can configure the externally mounted folders as well as ports:

version: "3.9"

services:
    xilinx:
        build: .
        ports:
            - "9980:80"
            - "9988:8080"
            - "9922:22"
        volumes:
            - "./installmedia:/installmedia"
            - "./runtime/opt:/opt"
        network_mode: bridge

I have some cruft there from debugging. But the expectation is that the /opt folder in the container is actually a folder shared from the host. In this case, from the ./runtime/opt folder, which will contain the extracted Xilinx ISE /opt/Xilinx tree.

Starting Up The Container

If everything has been setup, the container should fire up and stay up when you start it using docker-compose:

docker-compose up -d

If this doesn’t work ,them you have some debugging to do. 🙂 But the files above are pretty straightforward.

Starting Up Xilinx ISE 14.7

With the way I have things setup above, the ISE application will run as a normal Linux application and expects an X11 environment to display on. If you are on a Linux system with a GUI, you are already halfway there.

Linux Host

# On the Host System
xhost +localhost
ssh -X ubuntu@localhost -p 9922

# After you are SSH'd in, you can then run ISE
source /opt/Xilinx/14.7/ISE_DS/settings64.sh
ise

Mac OS X

# On the Host System
# Start XQuartz
# From xquartz terminal
xhost +localhost
ssh -X ubuntu@localhost -p 9922

# After you are SSH'd in, you can then run ISE
source /opt/Xilinx/14.7/ISE_DS/settings64.sh
ise

The Xilinx ISE should show up on your host/laptop/etc. The localhost assumes the Docker container is running on your laptop/desktop locally. If not, then use the IP address or hostname of the machine with the Docker container running.

If your Docker container’s port 9922 isn’t accessible for some reason, you can always tunnel out from the container to the host:

# On the machine with the Docker instance... could be the main host. 
# Run from the docker-compose folder you have put the config files in.

# Start a shell in the container
docker-compose exec xilinx bash

# This will forward port 9922 on the host(HOSTIP) you want the UI to show up on. 
ssh -R9922:localhost:22 HOSTIP

Now, you can run the above commands replacing localhost with the remote host, if not on the same machine.

At this point, the only thing you need to add to the Dockerfile will be the xilinx.lic file you will need to get from Xilinx, so you can run your copy of Xilinx ISE 14.7.

For Extracting Installation Media from Xilinx ISE 14.7 Downloads

You can check out this article on how to get the installation media from the Xilinx ISE 14.7 downloads.

Author: Wing Wong
Husband, Father, and all around technology tinkerer. :)

1 thought on “Running Xilinx ISE 14.7 Inside Of Docker

Comments are closed.