summaryrefslogtreecommitdiffstats
path: root/electronics/fpga-toolchain.page
blob: df4a36d4095d70598f30942c7622d88e9e71fb42 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
---
format: rst
toc: yes
title: 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).

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_). 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: `effluviaofascatteredmind <http://effluviaofascatteredmind.blogspot.com/2010/10/lattice-diamond-on-ubuntu-1004-64-bit.html>`_

.. _debian 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 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.