Close

Does this project spark your interest?

Become a member to follow this project and don't miss any updates

Arduino-Compatible FPGA Shield

Spartan 6 FPGA Shield includes SPI Configuration Flash, Breakout Headers, SRAM, programmable from Arduino or SPI Programmer

Similar projects worth following

This project was created on 01/21/2014 and last updated 4 months ago.

Description

Motivated by an interest in teaching folks how to use FPGAs and espouse the virtues of FPGA-coolness (& like many, frustrated a bit by a number of limitations of the Arduino incl. IO, peripherals, etc) I’ve endeavored to create the first (that I know of) FPGA-based Arduino shield.


This board - which I'm documenting here as I go along - includes heaps of additional IO, memory resources, etc. and is SPI programmable via SPI flash (including programming from the Arduino Due)...And is just an all-round cool way to introduce programmable device technology (beyond simple logic) to the uninitiated.

Likewise, it will have more than enough grunt for the old-pro to hack together some totally awesome, totally re-configurable systems.  

Details

Intending to keep this as compact as possible I'm looking at BGA packages for SRAM and std package for the SPI Flash.  The several that I've chosen will enable me to keep costs below $30 for the whole board (target = $25) and still have head room to do some really impressive stuff with it.  Likewise, this makes a sizeable "prototype area" available to fill with either additional connectors or PTH pads.

Programming of the SPI flash from Arduino is done via the ICSP header which carries thru to the "daughter" card.  Likewise, I've included a second chipselect (GPIO) to enable the ICSP to connect to the FPGA via SPI (were you to use an SPI slave core in the FPGA to drive FPGA functions...more on this in my next project ;)

Flash is meant to be large enough to be used by an FPGA processor in case someone wanted to use one, and also hold multiple images of the FPGA configuration if someone intends to make this harder to "brick".

Power is still undefined but relatively trivial.  Power supply will offer a few different rails and LEDs and line drivers will be used to provide some visual feedback of programming state and activity.

Git project -- https://github.com/sfgit/FPGA_Arduino_Shield.git

Components
  • 1 × XC6SLX9-2TQG144C Xilinx Spartan 6 LX9 FPGA - Device Playground
  • 1 × S25FL216K0PMFI041 Spansion 16K flash - to hold FPGA configuration
  • 1 × SN74CBTLV3257DBQR SPI Multiplexer - manages access to flash from multiple SPI sources
  • 1 × KC5032A20.0000CM0E00 Kyocera 20MHz CMOS Oscillator - FPGA clock source
  • 1 × IS61WV12816DBLL-10BLI ISSI SRAM - 128Kx16 Asynchronous

Project logs
  • Uploaded first how-to video...Walkthru

    4 months ago • 0 comments

    Just uploaded my first video on actually using the board. There are a few others to follow. The video is found on Youtube:

    This describes the various interfaces, the use of the resources, the jumper settings, power supply, etc.

    I have also uploaded the first "Blinking LEDs" example for use with the Xilinx software, available on Github.

  • More FPGA Boards Back & Working!

    5 months ago • 1 comment

    Whew! Last round of mods were huge because as you come to find out quickly, anytime you add a level translator to a board - much less two & much less 10 channels each - you end up having to reroute most of the PCB layout. And as though that wasn't enough, I decided to make a bunch of other small updates and signaling fixes / improvements such that board (a) is now meaningfully different from board (b). <Shudders>

    Still, today the box of boards came back - first time populated by someone other than me - and they look and (more importantly work) awesome. The board shop this time took their sweet time but the wait was worth the cost (almost 10:1 versus US companies for the same quote).

    A few more small tests and it's away they go to the store to be sold! :)

  • Level Translation Mods

    6 months ago • 0 comments

    The first pass of this board was built with the Due in mind (3V3) and other development boards that I had sitting around, almost all of which *other* than Arduino were 3.3V.   In planning the evolution of this however, it quickly made sense to include support for other 5V devices such as the Uno and other Arduino boards.  So I have gone ahead and added a Level Translation circuit and respun the board now with some level translators that will convert the Arduino's 5V0 outputs to a nice, user-friendly 3V3 signal for the FPGA.  This'll ensure support for the Uno and other Arduino's not using 3V3 IO voltages.  Likewise, I made a few other small improvements and fixed a few snags that deserved some attention.  

    Testing the level translator on a breadboard...

    Schematic for the level translation circuit...

    Above is the schematic (new files will be uploaded to github shortly) for the level translator and because the layout needed to change pretty substantially to accommodate these two new devices, the boards went back to fab and are going thru proper assembly at the moment.  

    The part used for level translation is the SN74CBTD3384.  It's a 24-pin TSSOP and it's relatively small, cheap, and performs pretty well with very low series resistance.  Designed for performance up to about 10 MHz and provides  a nice interface to the arduino UNO and other 5V0 devices.  

View all 34 project logs

Build instructions
  • 1

    Step 6 - Wire up JTAG connections for JTAG programming.

  • 2

    Step 1 - Don't panic.

  • 3

    Step 3 - Build major footprints:  Costing the available board area requires building the major footprints and placing them on the PCB.  Built early footprints and placed to determine what additional space is avail.  Files in git.

See all instructions

Discussions

Nicolas Siret wrote 9 days ago point

Great project Technolomaniac! Will you have more boards for sell in the coming weeks/months? We have developed a new language & an IDE to make easy and quick the design and verification of hardware (www.synflow.com) and I would like to propose this board to our users. 

Are you sure? [yes] / [no]

Stephan Mühlstrasser wrote 2 months ago point

I found this board because I'm interested in an FPGA board that can be combined with an Arduino. I'm searching for a platform for implementing an emulator of a floppy disk controller and the floppy drives themselves for an old 6502-based BASIC computer (Ohio Scientific Challenger 1P).

I have zero experience so far with FPGAs. Would it be feasible to implement such an emulator with this FPGA board?

Are you sure? [yes] / [no]

ajcrm125 wrote 2 months ago point

Question... does the Arduino program the SPI Config Flash which in-turn, programs the FPGA? Or does the Arduino program the FPGA directly?

Thanks!

Are you sure? [yes] / [no]

midnitesnake wrote 2 months ago point

Is it possible for you to post a quick beginners tutorial on programming the device. I bought this board to practise and learn FPGA programming; so I am new in this area. I've been having a hard time working out Xilinx s/w. I found the ISE version you need is 13.6 as opposed to the later Vivaldo versions; following another online example I've generated some blink-led code. But can't progress any further - I'm now stuck on the Impact design?

I think FPGA beginners (like me) need a simple walkthrough from loading code, compiling, and programming the device. Thanks in advance.

Are you sure? [yes] / [no]

signal7 wrote 3 months ago point

So - one problem I see here is that not all of the IOs are brought out to a connector. All of bank 3 is soldered to the board, but it looks as though there are no traces. While I certainly *could* deadbug solder to those pins with some wirewrap wire, I'd really rather not fill the swear jar in a single afternoon. The problem is I need 52 IO lines and there's 24 of them that seem to go nowhere.

Is it possible to do a board with all of the connections brought out to a header? I might take a stab at changing your board, but I'm really not sure I have the capability to solder all of the parts. Any BGAs are pretty much beyond my equipment capability at the moment. Otherwise it looks perfect.

Are you sure? [yes] / [no]

Daniel Wisehart wrote 3 months ago point

Nice board. I just ordered two.

Any thoughts on what will plug into the FPGA I/O pins? (besides flying headers.) It would be nice if this Arduino prototyping board would just plug in, but that is probably asking too much I am thinking: https://www.sparkfun.com/products/7914

I guess I can take your board file and create a two-layer board similar to the prototype board I linked to. Anyone else interested in buying something a plug-in prototyping board if I had several made?

Are you sure? [yes] / [no]

technolomaniac wrote 3 months ago point

I'd be keen and if you want some help in dreaming up plug-in boards, I'm game! :) I have a few in mind for when I get some time but time is pretty tight atm. [

Are you sure? [yes] / [no]

pd20012000 wrote 3 months ago point

I just received my board , and I'm not quite sure how to interface it with either my Due or Uno. Are the header pins supposed to be pointing upward or downwards?

Are you sure? [yes] / [no]

technolomaniac wrote 3 months ago point

So this batch I chose to populate the standard headers and provide Arduino headers if you wanted them, in the box. I tend to use the board stand-alone so it was a choice I made assembling the thru hole pins, which I had done myself. If you'd like to swap them out, you should have the additional headers or I can send you a version with the Arduino headers populated.

Are you sure? [yes] / [no]

counter.culture wrote 3 months ago point
I don't understand why the pins come out the top, if this is supposed to be a shield. Every picture of this board tells a different story.
0) The picture on the store page shows no pins or sockets, just "through hole" vias...
1) The project page picture shows a socket on top, and it apparently plugged "normally" into some kind of Ardunio.
2) The board I received had pins, instead of sockets, soldered in and pointing skyward. I asked politely "what the deuce?", and received no response from the project owner.

What am I missing here? Is it rework time, or return to store time?
That xess.com XuLA2-LX25 is looking more attractive right about now.

Are you sure? [yes] / [no]

technolomaniac wrote 3 months ago point

You should have an extra set of headers included in the box if you want to use it with Arduino. The vertical headers were populated this go-round but I think I'll change that for future batches. If you want a version with the headers reversed, I can shoot you one. PM me and I'll be happy to swap them out.

Are you sure? [yes] / [no]

antti.lukats wrote 4 months ago point
Too bad Xilinx only support S6 family in their legacy tools and not with Vivado.

Are you sure? [yes] / [no]

Chris Arena wrote 4 months ago point
Some of the photos are upside down.

Are you sure? [yes] / [no]

Chris Arena wrote 5 months ago point
Great project!
I would still like to get one. Is someone selling them for you?
Thanks!

Are you sure? [yes] / [no]

technolomaniac wrote 5 months ago point
You can get them on Hackaday Store. New rev is 5V0 tolerant and has std barrel for power connector. http://store.hackaday.com/products/arduino-compatible-fpga-shield

Are you sure? [yes] / [no]

mac_ha wrote 5 months ago point
Great, how could I order one, is it still within your targeted $30 price?!

Are you sure? [yes] / [no]

technolomaniac wrote 5 months ago point

Are you sure? [yes] / [no]

Thomas wrote 5 months ago point
Great Project, although I would have prefered some Altera FPGA, I dont like the Xilinx Software :/

Anyway, thumbs up!

Are you sure? [yes] / [no]

technolomaniac wrote 5 months ago point
Thanks mate! I'll do a cyclone version very soon. :)

Are you sure? [yes] / [no]

augustodn wrote 5 months ago point
Hey really nice project!! Just a suggestion, why don't you add the biggest SRAM of it series? It's just ~$2 more and maybe it'll make the difference in a nice big acquisition project. A link to digikey SRAM family http://bit.ly/1qpKJnf

Are you sure? [yes] / [no]

zakhounet wrote 6 months ago point
How could I get one ??

Are you sure? [yes] / [no]

technolomaniac wrote 5 months ago point
You can buy them at: http://store.hackaday.com/products/arduino-compatible-fpga-shield. Let me know if you have questions. :)

Are you sure? [yes] / [no]

Chris Arena wrote 6 months ago point
Great project!! How can I get one?

Are you sure? [yes] / [no]

Xark wrote 6 months ago point
I am a bit bummed that I got my new FPGA board and I can't use it because it is using some wacky non "Arduino standard" barrel connector for power. A few guesses at barrel connectors for a power adapter at Radio Shack failed too. Take note if you order one of these (as well as 3.3v only, so pretty much "Due" Arduino only).

Other than that, looked like a pretty nice board...

Are you sure? [yes] / [no]

mattberggren wrote 6 months ago point
Thanks for the feedback mate. Heads up, if you prefer the 5V version, let me know. I have them being tested atm and they should be ready in a week. I'd be happy to swap it out if you prefer one for the Uno, etc. I chose the 3V3 version as most of the dev boards I have hanging around are 3V3 and most FPGAs have long moved past 5V0 for anything. Actually the only thing I have that is 5V0 was Arduino but I tend toward using Due. :)

Still, I can appreciate it could be frustrating so just let me know and I'll swap it out (you can rock that one until these are fully tested). Want you to be happy with what you got! I've put a lot of thought into this so I want you to have a great experience. My email is just my username at gmail.com.

Are you sure? [yes] / [no]

Xark wrote 6 months ago point
Thanks for your reply.

I am actually mostly fine with 3.3v as I have a Due. However, it could have been a bit more clear on the product page (I didn't not even know it was 3.3v only until I read the note that came with the board).

The non-standard power connector is much more annoying (and AFAIK not mentioned anywhere - I spent five minutes trying to find the type on this project page and github using my phone at Radio Shack). I am quite puzzled about why you decided to use the "odd" connector making an "Arduino compatible" FPGA? Please consider changing this in future revisions. I probably have over a dozen development boards and all use either USB or "normal" barrel connector (albeit some at 5v not ~9v).

I'll have to go back to Radio Shack with board in hand and keep trying power adapter connectors (each sold separately) for my universal adapter until I find the right one (my earlier two "eye-balled" guesses were incorrect at ~$5 a pop - who knew there were so many barrel connector "flavors").

It also would be helpful if there was a page about what all the jumpers and connectors do and FPGA pinouts etc. (and maybe include a few jumpers...I had to salvage an old PC for some). The silk screen is difficult to read (and a tad cryptic). I think I figured everything out from studying the schematic (but I probably shouldn't have to).

Sorry if I came off grumpy and unhappy, but I was indeed a bit bummed to get home and not be able to (easily) play with my cool new FPGA board. Thanks for your offer to try to make me happy. Mostly I think I needed more and better information about your board presented on the product page ("tech specs" seems to be missing some critical info) :-)

Are you sure? [yes] / [no]

Xark wrote 6 months ago point
I just wanted to mention that I finally had time to find a suitable power connector (as I suspected, same outer dimensions as Arduino barrel connector, but with insidiously wider inner + pin).

Once the board was powered, I had no trouble hooking up JTAG and managed to get my LED blinky to work on the first try (after studying the schematics to get the constraints file right).

Am am still puzzled by how to program the FPGA SPI config flash with Impact (perhaps you can't - it doesn't seem to list the Spansion part number used). Any info you have on this would be helpful.

So, overall a happy customer. :-)

Are you sure? [yes] / [no]

Christoph wrote 7 months ago point
So is this ready for trying myself or do you still need to do some work on the boards? What would it take to assemble one?

Are you sure? [yes] / [no]

technolomaniac wrote 7 months ago point
Sorry for the delayed reply! So the board is ready. This first iteration is 3V3 tolerant and there is a second type that uses level translators to support the Arudino UNO voltages. So the long and the short is: if you want to use with Arduino, just be sure it's one of the 3V3 versions of the Arduino (i.e. Due). I chose to do the 3V3 version first because most of my other dev HW is 3V3 and *not* 5V0 like the Uno.

That being said, this is totally ready for the road. I have a few on my desktop and they are all working brilliantly. The thing that can be a sticking point in assembling these is the BGA and the QFM but I promise, with a decent stencil, you're good to go, and if you can nag a friend with a laser cutter to make a solder paste stencil for you, you should be able to build them yourself no probs. This is a process I would strongly encourage anyone with a little bit of patience to go thru as it's super useful.

With a stencil, just use hot air. You don't need a hot plate or reflow or such. You can of course use it, but it's not a hard fast req. I use hot air most of the time and it works a treat.

Sadly, I did notice stock on the LM1086 is super low. That said, I bought 1000. If you need some, let me know and I'll ship you some at cost + shipping. TI is lagging on making more and it forced me to buy a bunch to get things moving on my end. Now I have inventory! :)

Are you sure? [yes] / [no]

dan wrote 7 months ago point
Hi! Sorry for a bit stupid question, but can you tell me is it possible to use FPGA as a lines swithcher/connector for electronic components? What I mean - I thinking on implementation more convenient breadboard for prototypes. This mean, that it has pinholes but all connectors hided inside it and switched automatically. Each pin can be connected to each another pin. You can attach to this board all needed electronic component one by one in any order and than "just" set switches to make needed connections. I was thinking a lot on mechanical implementation, but may be FPGA solution also may serve well enough for this purpouse?

Can you please tell me - is it possible to use FPGA as completely "transparent" (without any modifications of incoming signal) programmable electrical switcher so it can connect different pins in any order? And if it's possible what max electrical parameters of these signals?

Thanks a lot.

Are you sure? [yes] / [no]

technolomaniac wrote 7 months ago point
Yes. You can completely do what you are asking. There are a few small things I would say could get in the way and that is mostly around voltage levels, but I otherwise, I use FPGAs as a virtual breadboard all the time. It's just easy to control the IO and they can always be reused for something else later on. This is largely why I love having a board on my desktop as once stuff is wired up, I can make things input, output, bidirectional, and swap this on a whim. It's much cleaner than having a mess of wires to move around. What's more, when something is wrong, it's easy to switch pins internally (simple port swap).

If you have more detail on the application I can help you out. My email is just my username @ gmail.com.

Are you sure? [yes] / [no]

Eric Han wrote 8 months ago point
Hello there. This is Eric from ISSI. Please email me at ehan@issi.com if you need any help with design, etc. We also provide mixed signal, led, audio amplifiers, serial flash, as well as a broad range of high performance SRAM/DRAMs. Great work on this, it's truly inspirational to see one person come up with something like this. I am currently working on integrating our newly aquired SPI Flash department. Let me know if you need any help! = )

Are you sure? [yes] / [no]

technolomaniac wrote 7 months ago point
Love you memories guys! I would love to hear more about the SPI flash line. I have always used spansion because they were a) cheaper than xilinx platform flash ($$$) and the b) the documentation for using them with Xilinx devices is awesome. If you want to discuss, I'm happy to chat. My email is just my username @gmail.com.

Are you sure? [yes] / [no]

Similar projects