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 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
mkdir xc3sprog/build
cd xc3sprog/build
cmake ..
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.

1 (or pin 17)3V3
6 (or any Ground pin)GND

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!