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: https://vjordan.info/log/fpga/setting-up-the-xilinx-platform-cable-under-gnulinux-debian-wheezy-74.html 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)[0]. 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): /usr/local/diamond/3.1_x64/bin/lin64 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: http://effluviaofascatteredmind.blogspot.com/2010/10/lattice-diamond-on-ubuntu-1004-64-bit.html [0] https://lists.debian.org/debian-user/2013/05/msg01416.html 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". Setup: 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: - only the programmer can be open; otherwise the IDE latches on? - better way is DIY with a script or using udev rules - udevadm test /dev/bus/usb/###/### - programming might not work ever? - bundled ftdi errors ("[122032.033366] pgrcmain[10879]: segfault at 50 ip 00007f4cf1508b5e sp 00007fffb86dc210 error 4 in libftd2xx.so[7f4cf14fe000+2c000]") - "Another instance of this program is running":