FPGA Toolchain Notes

Setup Xilinx 13.3 WebPack on Ubuntu 11.10 64bit

Installer archive is ~5gb, extracted will be about 5gb, install will be about 14gb. You'll probably need root.

Download the appropriate WebPack ISE archive from the Xilinx website; you'll need to create an account. While the download is running, generate a WebPack license file (Xilinx.lic) and save that to your home folder.

$ mkdir /tmp/ise_install $ cd /tmp/ise_install $ tar xvf ~/Xilinx_ISE_DS_Lin_13.3_O.76xd.1.0.tar $ cd Xilinx_ISE_DS_Lin_13.3_O.76xd.1.0/ $ sudo ./xsetup # install as root!

# agree to license agreements # # select WebPack # # defaults for license: "Acquire or Manage..." and "Ensure Linux # System...". "Install Cable Drivers" failed for me. # # extract to /opt/Xilinx/13.3 # # in the license manager that pops up, go straight to "manage licenses" and # import the one you generated # # done!

To start the IDE run /opt/Xilinx/13.3/ISE_DS/ISE/bin/lin64/ise (set it up as an alias or with a wrapper script).

Xilinx Vivado 2014.4 on Debian Wheezy 64bit

Download is 5.0GB; unziped installer is 5.2GB. /opt/Xilinx/Vivado/2014.4 is 6.9GB; /opt/Xilinx/SDK/2014.4 is 4.9GB. So in total you'll want more than 22GB to download and install.

Run the installer as sudo (no strictly necessary?). Select Vivado WebPACK. Install Cable Drivers and Software Development Kit (this later is big, another ~5GB unextracted).

When the install is done and license manager pops up, do the "Save link" thing (because you are running as root, browser probably won't work), then find that .html file and open it as your regular user; it will redirect. Select the Vivado WebPACK and SDK licenses (the ones with no expiration, not the evaluation ones).

Create a ~/.profile or ~/.bashrc alias like:

alias vivadoenv2014.4="source /opt/Xilinx/Vivado/2014.4/settings64.sh"

Xilinx Platform Cable USB II Drivers on Debian Wheezy 64-bit

Follow these directions

Use an alias like:

alias xilinxenv147='source /opt/Xilinx/14.7/ISE_DS/settings64.sh; export LD_LIBRARY_PATH=:/usr/local/lib/libusb-driver.so'

Lattice Diamond 3.1 on Debian Linux 64-bit

Lattice Semi offers no-cost software development tools for their FPGA parts, called Lattice Diamond. The toolchain is based on Synopsys Synplify Pro for synthesis and Aldec Active-HDL for simulation, and runs on Linux. The non-supscription version of the toolchain can target most parts, but not some of the LatticeECP2 product line, any LatticeECP3 parts, or the LatticeSC/LatticeSCM devices.

First you need to register for an account to get a no-cost license, and agree to a EULA. Doves cry. Generate a free license following a link from the "Licensing" tab of the Diamond Software page. You won't get the license immediately, it will be emailed to you (after human approval?). It's a 1.2 GB download, which is way smaller than Xilinx ISE. The below was tested with version 3.1 for 64 bit linux.

The IDE comes as an .rpm file for Fedora/RedHat. To install on debian/ubuntu, the 'alien' tool can be used to convert this to a .deb. This process can take a long time (20+ minutes?), particularly at the "debian/rules binary" step. Run:

sudo alien --to-deb --scripts diamond_3_1-base_x64-96-x86_64-linux.rpm

Unfortunately, this won't install as-is because the package will try to use uname i to determine the architecture type, when it probably should use uname -p (at least on linux / debian). So we need to extract, edit, and re-build the .deb:

# extract chown $USER:$USER diamond-3-1-base-x64_3.1-97_amd64.deb dpkg-deb -x diamond-3-1-base-x64_3.1-97_amd64.deb diamond dpkg-deb --control diamond-3-1-base-x64_3.1-97_amd64.deb diamond/DEBIAN

# edit: uname -i => uname -m $EDITOR diamond/DEBIAN/preinst

# rebuild: this is slow dpkg -b diamond .

Then (finally) install the package:

sudo dpkg -i diamond-3-1-base-x64_3.1-97_amd64.deb

You'll need to add the following to your $PATH (or could have edited the install prefix above):


Also install the license file which was emailed to you:

sudo cp license.dat /usr/local/diamond/3.1_x64/license

Then run ''diamond''.

Ref: effluviaofascatteredmind

Diamond Programmer

The programmer (for uploading bitfiles, eg via an FTDI chip on a breakout board or a JTAG cable) breaks if the ftdi_sio (FTDI USB-Serial) kernel module loaded for the bare USB device. This driver will automatically load on most linux platforms (which is normally the desired behavior), but we need to disable this to use the Lattice programmer. It's possible to disable the ftdi_sio driver system-wide using a blacklist entry in /etc/modprobe.d, but then no other FTDI-based devices (which are extremely common) will work. So instead we'll use a udev rule to match only on Lattice "upload cables".


sudo vim /etc/udev/rules.d/10-lattice-diamond

# Disable "ftdi_sio" driver for Lattice dev boards SUBSYSTEM=="usb",DRIVER=="ftdi_sio",ATTRS{interface}=="Lattice FTUSB Interface Cable",ATTRS{bInterfaceNumber}=="00",RUN+="/bin/sh -c 'basename %p > /sys/bus/usb/drivers/ftdi_sio/unbind'"

sudo /etc/init.d/udev restart

Then you can load the GUI:

sudo /usr/local/diamond/3.1_x64/bin/lin64/programmer

or via command line, if you already have a .xcf upload configuration file generated (NB: this is distinct from the .jed bitfiles which actually get uploaded, and can be created with the programmer GUI):

sudo /usr/local/diamond/3.1_x64/bin/lin64/pgrcmd -infile program_breakout_example.xcf -cabletype USB2

Troubleshooting Notes

When programming, only the programmer GUI can be open; if the IDE is run at the same time it will connect to and block the device. Aka, "Another instance of this program is running".

Perhaps a better way to handle permissions is with udev rules or a DIY script. To test udev rules, try:

sudo udevadm test /dev/bus/usb/###/###

A permissions problem that comes us is, eg:

unable to open device '/sys/dev/bus/usb/003/004'

An error that comes up with the bundled FTDI driver is:

[122032.033366] pgrcmain[10879]: segfault at 50 ip 00007f4cf1508b5e sp 00007fffb86dc210 error 4 in libftd2xx.so[7f4cf14fe000+2c000]

Other problems needing solutions:

Board with FTDI USB Host Chip detected.

Programming XCF Contents... Connected to Lattice Cable Server. Failed.