Content follows this message If you have enjoyed my articles, please consider these charities for donation: |
Despite playing with my miniSpartan3 board for quite a while, I’d never attempted to write my FPGA designs to the SPI flash on the board. This means that the FPGA board didn’t do anything until I deployed my design onto it manually - quite useless if you were using the board for a real project, and on power-on you needed it to go to work immediately.
Turns out though, it is fairly simple to do, as long as you have the larger XC3S200A variant with an Atmel AT45DB041D flash chip - that’s the only way I’ve been able to validate this method with. Here are the steps you need to follow.
First, you’ll need to use utilities from the xc3sprog project. You use this to deploy your designs anyway, so should be familiar with it. You will want to update to the latest version, and we need to grab a file from the source distribution.
The version I used for testing on Windows is build-win32_rev780_stripped.tar.gz. The other file you’ll need to download is xc3sa_vq100.bit.
The way this works is that we’ll program the xc3sa_vq100.bit file onto our FPGA. What this does is configures the FPGA to use the SPI flash pins in a way that can subsequently be programmed, by allowing the FPGA to forward the commands on to the flash. Just by luck, this bitfile is set up for the Spartan3 200A FPGA on the miniSpartan3 I have.
Once that step completes successfully, we will then re-run xc3sprog with our design .bit, this time with the -I command which lets it know we are programming the SPI flash though the fpga.
The two commands are:
An example output of writing my LED test projct:
C:\dev\xc3sprog>xc3sprog.exe -c ftdi xc3sa_vq100.bit
XC3SPROG (c) 2004-2011 xc3sprog project $Rev$ OS: Windows
Free software: If you contribute nothing, expect nothing!
Feedback on success/failure/enhancement requests:
http://sourceforge.net/mail/?group_id=170565
Check Sourceforge for updates:
http://sourceforge.net/projects/xc3sprog/develop
Libusb not found, expect failure
Could not open FTDI device (using libftdi): usb_find_busses() failed
Using FTD2XX,
DNA is 0xb5513bdfa1138aff
C:\dev\xc3sprog>xc3sprog.exe -c ftdi -I minispartan3_leds.bit
XC3SPROG (c) 2004-2011 xc3sprog project $Rev$ OS: Windows
Free software: If you contribute nothing, expect nothing!
Feedback on success/failure/enhancement requests:
http://sourceforge.net/mail/?group_id=170565
Check Sourceforge for updates:
http://sourceforge.net/projects/xc3sprog/develop
Libusb not found, expect failure
Could not open FTDI device (using libftdi): usb_find_busses() failed
Using FTD2XX,
JEDEC: 1f 24 0x00 0x00
status: 9c
Found Atmel Device, Device ID 0x2400: AT45DB041
Unique number:
108070284c00f8240000d424ffff2fff0c0cec2a6c0c6c9c105490ffffffffff
fcfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
264 bytes/page, 2048 pages = 540672 bytes total
Verify: Success!
And that’s all you need! You should now be able to power cycle the miniSpartan3 board and see your design in action - in this case some FPGA counting LEDs.
The reason I’m writing this post is because I was asked for advice on this very topic, however for the smaller XC3S-50a FPGA variant of miniSpartan3. My miniSpartan3 is the larger one, and this procedure runs fine. I was able to build a version of the xc3sa_vq100.bit file used earlier for the smaller FPGA using the other sources in the xc3sprog repo, but sadly this got even more confusing - as the JEDEC id that was being forwarded during the second part of step was corrupt.
I tweeted out the other day:
Anyone got a miniSpartan3 board to hand with the smaller xc3s50a fpga? Got an odd problem with one and interested to know what flash chip is on your version. My xc3s200a one is working as intended, with an Atmel AT45DB041D spi flash.
— Colin Riley 🎗 (@domipheus) July 22, 2021
This is because the smaller miniSpartan3 board that was failing seems to have a different SPI flash with a completely different pinout - one which will not work here at all.
So yeah - if anyone has one of these boards, please tell me what flash chip you have! Quite puzzled by this one.
Thanks for reading. Any comments or questions can be directed to me on Twitter @domipheus.