summaryrefslogtreecommitdiffstats
path: root/electronics/fpga-toolchain.page
blob: 010e88a9a9a6f3bc787244768cd38118b8e4d29a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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 <http://bugmenot.com>`_. 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).

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":