philpem.me.uk ISE 11.1 on Ubuntu 9.10  

HOWTO: Xilinx ISE 11.1 on Ubuntu Linux 9.10 (64-bit)

Quick note -- it seems this works on Ubuntu 10.04 too, with no significant modifications.

ISE 12 Notes

It seems that this HOWTO also (more or less) applies to ISE 12, except ISE 12 installs into /opt/Xilinx/12.1/ISE_DS by default. This means that we have to make a few changes (replace 'lin64' with 'lin' if you're using a 32-bit installation of ISE):

  1. In step 2, "cd $XILINX/ISE/bin/lin64" becomes "cd $XILINX/ISE_DS/ISE/bin/lin64"
  2. In step 5, "sudo cp libusb-driver.so $XILINX/ISE/lib/lin64" becomes "sudo cp libusb-driver.so $XILINX/ISE_DS/ISE/lib/lin64"
  3. In step 6, "cd $XILINX/ISE/bin/lin64" becomes "cd $XILINX/ISE_DS/ISE/bin/lin64"

Now we need to get ChipScope working. There are a few shell scripts which use bash shell commands but declare themselves as 'sh' type shell scripts -- Ubuntu's version of bash doesn't like this...

  1. Open $XILINX/ISE_DS/ISE/bin/lin64/unwrapped/analyzer in a text editor (sudo gedit... or sudo vim...)
  2. On the first line, replace "#!/bin/sh" with "#!/bin/bash".
  3. Repeat for the following files:
    • ibertgenerate
    • inserter
    • ibertgengui
    • cs_common.sh

The original ISE 11.1 HOWTO

Xilinx ISE 11.1 seems to have a few "problems" with Linux. Number one is its reliance on a buggy, unreliable kernel driver called "WinDriver" for its cable drivers. This HOWTO explains how you can install ISE 11.1 on a 64-bit (x86_64) Ubuntu Linux 9.10 system, without using WinDriver, and while still (hopefully!) retaining your sanity.

This is a bit of a fiddly procedure -- ideally you need to know where things are on a Linux filesystem, and the basics of using the build tools provided by the system. If you can handle a text editor and run commands inside a shell (terminal, console, whatever you want to call it) then you can do this.

Installing ISE 11.1 on a 32-bit system should be very similar, with two exceptions: * The lin64 subdirectories won't be present. Substitute lin for lin64. * You may need to build the cable driver differently. See the README for libusb-driver for more information, but you might need to run make lib32 instead of make.

The advantage of this method is that you gain support for parallel cables without having to install kernel drivers (which have to be recompiled every time the kernel is upgraded). All the Xilinx parallel cables (and most of the Parallel Cable III clones) should work fine -- I've personally tested with the Enterpoint PROG3 (a Xilinx USB cable clone) and a homebrew Xilinx Parallel Cable III clone.

  1. First you need to install ISE itself. Grab the tarball from Xilinx's website (it's about 5GB!) and un-TAR it. Open a terminal and 'cd' into the directory you untarred the files into. Type:

    sudo ./xsetup
    

    Follow the instructions on-screen. Make sure you remember where you installed ISE (the "base path") -- this will typically be /opt/Xilinx/11.1. For the rest of this tutorial, I'll use $XILINX to refer to this directory.

  2. Now you need to install the USB cable drivers:

    sudo -i
    cd $XILINX/ISE/bin/lin64
    source setup_pcusb
    
  3. But there's a problem... the udev script for the cable drivers is broken! We need to fix that... There are two ways to do that (pick one or the other!)

    • Type sudo gedit /etc/udev/rules.d/xusbdfwu.rules, and replace the contents of the file with:

      ATTR{idVendor}=="03fd", ATTR{idProduct}=="0008", MODE="666"
      SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D %N"
      SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D %N"
      SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D %N"
      SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D %N"
      SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xp2.hex -D %N"
      SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03fd", ATTR{idProduct}=="0015", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xse.hex -D %N"
      
    • Run sudo sed -i -e 's/TEMPNODE/%N/' -e 's/SYSFS/ATTRS/g' -e 's/BUS/SUBSYSTEMS/' /etc/udev/rules.d/xusbdfwu.rules, which will "auto-magically" fix everything...
  4. Unplug and replug the Platform Cable. Note that iMPACT (the ISE device programmer utility) won't detect USB cables unless it sees the firmware files in /usr/share, even if the cable has already had its firmware loaded.

  5. Now we need to get rid of WinDriver. Grab a copy of Michael Gernoth's "libusb-driver" cable driver and compile it:

    sudo apt-get install libusb-dev libftdi-dev
    mkdir ~/xlnx_usb_driver
    cd ~/xlnx_usb_driver
    wget -O usb-driver-HEAD.tgz "http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver?a=snapshot;h=HEAD;sf=tgz"
    tar -zxf usb-driver-HEAD.tgz
    cd usb-driver
    make
    

    Now copy the cable driver into the Xilinx library path:

    sudo cp libusb-driver.so $XILINX/ISE/lib/lin64
    
  6. Now we need to make iMPACT use the cable driver...

    cd $XILINX/ISE/bin/lin64
    sudo mv _impact _impact.bin
    sudo gedit _impact
    

    Copy-and-paste this into the gedit window that just appeared...

    #!/bin/sh
    #
    # Preload driver binary
    LD_PRELOAD=libusb-driver.so $0.bin $*
    

    Save it and close gedit. Go back to the shell.

    sudo chmod +x _impact
    
  7. Now do the same for ChipScope...

    cd $XILINX/ChipScope/bin/lin64
    sudo mv cse cse.bin
    sudo cp $XILINX/ISE/bin/lin64/_impact cse
    sudo chmod +x cse
    
  8. Finally, do the same to the EDK/XMD tool...

    cd $XILINX/EDK/bin/lin64
    sudo mv xmd xmd.bin
    sudo cp $XILINX/ISE/bin/lin64/_impact xmd
    sudo chmod +x xmd
    
  9. Done! Now create a script to start ISE...

    sudo gedit $XILINX/startise.sh
    

    Paste this into the file:

    #!/bin/bash
    source /opt/Xilinx/settings64.sh
    ise
    

    And back to the shell...

    sudo chmod +x startise.sh
    
  10. Finished! Add a launcher icon to your desktop environment's menu, and make it run $XILINX/startise.sh. If you want to create an icon to run iMPACT, copy startise.sh as startimpact.sh, and replace the last line of the copy (ise) with impact.

If you want to run the FPGA Editor, you need to install a few extra packages:

  1. Install Motif (this installs LibXm.so.3):

    sudo apt-get install libmotif3 libmotif-dev
    
  2. Download libstdc++5 from the Ubuntu package repository. Get the "amd64" package for 64-bit, or the "i386" package for 32-bit.

  3. Install libstdc++5:

    sudo dpkg -i libstdc++5_3.3.6-17ubuntu1_amd64.deb
    
  4. Unfortunately FPGA Editor is still built against an ancient X11 toolkit which can't handle the new-style ":0.0" $DISPLAY strings. This means that to actually start the FPGA Editor, you need to be a bit sneaky. Open your startise.sh script and add this line right at the top, just after the hash-bang (#!/bin/sh) line:

    export DISPLAY=`echo $DISPLAY | sed 's/\.[0-9]*$//'`
    

Now you should be able to run ISE, the FPGA Editor and XPower with no trouble at all (unless you're running a remote X session or using SSH X11 forwarding, in which case you'll need to find another solution -- VNC maybe?).