Electronics

Programming Xilinx JTAG from a Raspberry Pi

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!

LinuxJedi

View Comments

  • Thanks for this - very helpful to use to update the CPLD on my Furia.

    • 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…

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

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

Share
Published by
LinuxJedi
Tags: AmigaXilinx

Recent Posts

Two special Amiga 4000s: Jops video

I finally got Jops to generate a good DiagROM serial output, but the video output…

6 days ago

Restoration of a barn find Amiga 2000: part 3

All the motherboard issues were resolved in my previous post in this series, now it…

1 week ago

Restoration of a barn find Amiga 2000: part 2

With this Amiga 2000, I previously got it into a state where it would boot…

2 weeks ago

Two special Amiga 4000s: Repairing Jops

Last time I worked on Jops, I left myself a lot of work to do.…

4 weeks ago

Restoration of a barn find Amiga 2000: part 1

I recently acquired an Amiga 2000 for £350 which was in an unknown state, but…

4 weeks ago

Diagnosing an Amiga 1200 Data Path Fault

I recently acquired an Amiga 1200 motherboard in a spares/repairs condition for about £100 recently.…

1 month ago