Many modern Amiga cards use Xilinx chips for everything from a basic CPLD for auto configuration to full blown CPU replacements. My Terrible Fire 534 accelerator has two of these chips and they are field programmable using JTAG. It turns out a Raspberry Pi can be turned into a programmer for these, so this is how to do it.

Update 2022-10-02: I have designed a Pi JTAG board to make the wiring even easier with protection voltage translators for the Pi. It is available here.

Update 2021-12-04: I have written an updated version of this post covering the new Bullseye version of Raspbian and other updates here.

First of all you need a Raspberry Pi, preferably not version 4. There are ways to make this work with v4 but I haven’t tried them, I’m told they are slower too. I happened to have a spare Pi Zero W which I bought for another project. It needed the GPIO pins soldered on and I have some spare right-angle ones from a previous Amiga repair, so I soldered these on.

The SD card was flashed with Raspbian Lite and setup with SSH access so I could remote into it from my laptop to manage things.

We then need to build the programming software, this is a fork of xc3sprog that supports Raspberry Pi:

sudo apt update
sudo apt install build-essential libusb-dev libftdi-dev libgpiod-dev wiringpi git cmake
git clone https://github.com/matrix-io/xc3sprog
mkdir xc3sprog/build
cd xc3sprog/build
cmake ..
make
sudo make install

UPDATE 2021-11-25: The latest Raspbian Bullseye removed “wiringpi” from its repositories. This will cause the “apt” line above to file. If you are using Bullseye remove “wiringpi” from the “apt” line above and install it using the instructions found here.

Finally we have to wire everything up. Use this table for the wiring map, I also used some very large wire tag labels to label each end.

PinJTAG
1 (or pin 17)3V3
6 (or any Ground pin)GND
7TMS
11TCK
13TDO
15TDI

When wired up to the TF534 it looks a little like this:

Once we have both ends wired up, it is a case of running it. The following command should list all the chips in the JTAG chain, the TF534 has two of them. The “matrix_creator” uses WiringPi to talk to the JTAG:

xc3sprog -c matrix_creator -j

If you wish to download a Xilinx binary to your hard drive you can run the following (assuming you want to talk to item 1 in the chain). The “:r” part at the end means read the chip to file instead of write from file:

xc3sprog -c matrix_creator -v -p 1 myxilinx.jed:r

Finally to write a new image to the Xilinx (again to item 1 in the chain):

xc3sprog -c matrix_creator -v -p 1 newxilinx.jed

You should see something similar to this (screenshot from programming the TF534):

It all worked out really well and I now have a Xilinx programmer I can use for an upcoming project!

13 responses to “Programming Xilinx JTAG from a Raspberry Pi”

  1. […] and the pins to plug it into the 68000 socket on the motherboard. It is at this point I used my Pi Xilinx programmer to flash the firmware. The CPU itself is the newer ceramic 68030 I purchased for my […]

  2. […] all that was needed was to use my Raspberry Pi Xilinx programmer to flash the […]

  3. […] Raspberry Pi Zero is normally used for Xilinx programming so I have the header at a 90° angle. Normally the Pi would sit flat with the Pi’s HDMI and […]

  4. […] a previous post I mentioned how to build a Xilinx programmer using a Raspberry Pi Zero for their basic XC9500XL CPLD range. This has worked great on some projects. But I’ve had a […]

  5. […] a year ago I wrote about a way to program Xilinx XC9500XL series chips from a Raspberry Pi. Since then a new version of Raspberry […]

  6. Thanks for this – very helpful to use to update the CPLD on my Furia.

    1. You managed to do it with no issues? Tried on mine, to no avail: it detects the chain, but when it comes to write to it, insists on the “ERROR: Couldn’t export gpio 22ERROR: Couldn’t export gpio 4ERROR: Couldn’t export gpio 17ERROR: Couldn’t export gpio 27011101110111011101110010101110101010100001” error…

      1. What Pi are you trying this on? It won’t work with an original Pi 1 or a Pi 5.

        1. A Pi Zero W. Worked like a charm to flash my TF1260.

          1. Gustavo Sarmento avatar
            Gustavo Sarmento

            Never did. It became mandatory recently?

          2. I’m not aware of it, just trying to rule out a permissions problem.

      2. Just for anyone looking for similar issue.
        I have found that xc3sprog has issues on new Raspberry Pi OS. SysFS GPIO gas been discontinued and using wiringPi is unreliable (I never could successfully program or validate).
        I have forked and added new cable type based on libgpiod library.

Leave a Reply

Your email address will not be published. Required fields are marked *