A Low Cost Arduino FPGA Shield

[technolomaniac] is kicking butt over at Hackaday Projects. He’s creating a low cost Arduino based FPGA shield. We’ve seen this pairing before, but never with a bill of materials in the $25 to $30 range. [technolomaniac’s] FPGA of choice is a Xilinx Spartan 6. He’s also including SDRAM, as well as an SPI Flash for configuration. Even though the Spartan 6 LX9 is a relatively small FPGA, it can pack enough punch that the Arduino almost becomes a peripheral. The main interconnect between the two will be the Arduino’s ability to program the Spartan via SPI. Thanks to the shared I/O pins though, the sky is the limit for parallel workflow.

[technolomaniac] spent quite a bit of time on his decoupling schematic. Even on a relatively small FPGA power decoupling is a big issue, especially when high speed signals come into play. Thankfully Xilinx provides guides for this task. We have to mention the two excellent videos [technolomaniac] created to explain his design. Documenting a project doesn’t have to be hours of endless writing. Sometimes it’s just easier to run a screen capture utility and click record. As of this writing, the schematic has just been overhauled, and [technolomaniac] is looking for feedback before he enters the all important layout stage. The design is up on his github repository in Altium format. Due to its high cost, Altium isn’t our first pick for Open Hardware designs. There are free viewers available, but [technolomaniac] makes it simple by putting up his schematic in PDF format (PDF link). Why not head over to projects and help him out?

46 thoughts on “A Low Cost Arduino FPGA Shield

          1. Agreed. I suspect that those people who are actually too skilled to need the Arduino aren’t the ones badmouthing it. On the other hand, if one wants to come off as an advanced hacker without being one, talking smack about a product that’s beneficial to beginners is the way to go.

          2. @vpoko: My exact thoughts. To me, if something makes a job easier, I think it’s pointless to even carve your way into “more advanced methods”. Unless of course there are significant benefits in doing so.

      1. There are multiple ‘AVR’ cores in VHDL/Verilog at open cores.org that be used. From just cloning the standard core to ones that are fully pipelined and more ‘cycle efficient’ than Atmels. Most need interrupts and such defined, but the pAVR is fairly complete (see the link to his website for a complete/recent set of project files). There are some that have been through synthesis, verification, etc… and can run code produced from arm-none-eabi-gcc.

        Not a great place to start learning FPGA programming as the learning curve is steep jumping into VHDL at this level, but after you have VHDL experience, opencore is source for some really great work to further your education.

    1. The day the free (or even open source) programs can match the functionality of Altium Designer will be a great day indeed. But I don’t see that happening any time soon. Altium really is fantastic.

      1. I’m a fan of Altium’s functionality – I started using it back in the Protel days. Once I changed jobs I no longer had access to it. The closest “Open Hardware Friendly” CAD package I’ve found is DipTrace.

  1. I’m curious why the hatred for arduino? I’ve found that it can be a great alternative especially for little projects to PLC’s and many other form factors out there. Would I trust an an allen bradley plc in a hostile work environment over an arduino, absolutely. However if I’m messing around and want a simple pan/tilt for lets say a Halloween zombie head show me something easier or faster to use to prototype and throw in there.

    this is a nice little addition that adds yet more functionality to the little guy. So again why all the hatred for it?

    1. I’ve always figured it was a form of geek elitism (I can design that digital logic by hand fusing individual grains of sand together with a fine point soldering iron, therefore this story doesn’t belong on MY hackaday!).. Of course, some of it is probably just plain old trolling.

    2. Plus they make electronics readily accessible to the general public. They’re a great introduction and make quite complex things really easy.

      Why spend time reinventing the wheel for a one off personal project when an Arduino, or clone, costs quite little?

    3. I think of the Arduino as a standardized and easy to use platform. I personally use PIC/dsPIC as it’s far more diverse than Arduino, but the PIC/dsPIC development environment does have a steeper learning curve.

      If PIC were the de facto platform, would the Arduino users jump out to criticize it?

  2. Interesting project as well. My thoughts to encourage learning about FPGA using with arduino. FPGA are more complex to beginners. And wich HDL language author wil be offer? VHDL or Verilog or even pure schematic logic, when you create circuit from only logic elements.

    Looking towards using Xilinx FPGA you have to use Xilinx Ise Webpack. That is a lot of learning, how to program circuit, adress pinouts and more complex work i.e. to tumble Xilinx Ise GUI.

    Would not it be better to use for beginners CPLD’s? Not as powerfull as FPGA.

    Things about HW. Arduino suck at pin headers that are not each from another by standart 2,54 mm step over distance. And how about stackable headers as Texas Instruments Launchpads and Boosterpacks?

    As I see, the FPGA wil bee 144 TQFP. The most of ~100 are user configurable I/O. That is actualy a lot. And needs a good pin header wich enable convenient connect to other things. How many layers PCB will be? 2 or 4? And only for Arduino Uno?

    And another thing, how fast will be oscillator? 50 MHz? Or using PLL to fasten? Many FPGA dev boards have a VGA socket for connecting a monitor. Offcourse vga is old but lots projects are created to use VGA by visualizing something cool as fractals etc.

    1. So the board is 4 layers, two signal and two planes(-ish..though the planes are split a bit here and there). The signal routing is small (5:5) and the vias are also pretty small. Power will be large enough to support the current req’s of most things.

      Because I don’t like this being tethered to the Arduino (and dont get me wrong, I like Arduino…not a duino-hater :) I will also add a fully independent power supply able to supply bucket-loads of current for anything you might want to hang off of this (hard to know, but I always seem to want more).

      I will use 0.1″ pin spacing for the breakout areas but I haven’t decided on the actual layout. I prefer this. I am also using 3V3 IO voltage so the interface to most components should be super easy.

      The oscillator I’m using is 20 MHz and of course you’ll have access to the DCMs and clock dividers Xilinx provides.

      After the board is done, the next video series will take beginners thru the Xilinx tools with an emphasis on using the Xilinx SW, including Schematic, VHDL and some Verilog. I really want to emphasize using cores as much as possible also so I will spend some time bringing people thru Wishbone and using Wishbone compliant cores from OpenCores in the Xilinx environment. This should introduce some interesting possibilities. Also look at using Xilinx IP however because I’m a fan of OpenHardware, I would prefer to use as little commercial IP as possible.

      Before that happens though, I really want this video series to go the whole way thru building prototypes, soldering, and everything else in the process. It is more about my personal build log and I haven’t seen much in way of a video series that shows the whole process from start to finish.

      Regarding a display, perhaps I can get a processor running on board and then use the VGA controller from OpenCores to drive a VGA display. Could just include the core and drive from another CPU. Ahhhh…options. :) All a matter of time.

      Of course, once the board is done, anyone can have access to it and build whatever they want. I’ll also do some cool breakout boards with sensors and actuators and stuff on them that work with cores that are openly available on the web. This should cement the concepts of how to source cores, how to implement them on the FPGA, and then how to interface them to a CPU (whether on the FPGA or off-board).

      If anyone is interested in access to one of the prototypes, let me know. I’ll make them available at my cost in exchange for some feedback. I’ve ordered parts to build about 20 of them so far and just received them today. Only thing I’m waiting on is SDRAM.

      Also, I know the video quality for the last two videos stinks. Mic was fiddly and they were recorded in the wee hours. :) The next one (on SPI MUX’ing and the IO routing, power, SDRAM, etc) will sound awesome (new mic :)

      Please pm me if anyone wants a prototype to play around with. I’ll figure out the cost soon-ish. Should be right-around my $30 USD target.

    1. In general, yes. Early versions show only a few parts and there are more – rest assurred – but mostly decoupling and connectors and such. This is one area where FPGAs make a huge amount of sense as the connectivity and components are all (relatively) simple and the problem is moved into the FPGA and onto the FPGA fabric where the signals are all pristine and configurable to suit the application. Makes the world much easier to not have to bother with analyzing each connection, when they are inside of the FPGA.

      Still req’s some work to implement at the board level, but this is one area that FPGAs make experimentation and rework awesome.

  3. I like this but I can’t see it taking off. It’s confusing how it may fit into the Arduino landscape.

    Some back ground –
    I have several Arduino’s – UNO mini-pro.
    I can write raw micro-controller code but I have never done so for the atMega series, I have done mostly PIC’s and older uC’s.
    I bought a Gameduino (Spartan 3E FPGA) to learn VHDL but gave up with that hardware.
    I then bought a Papilio (Spartan 3E / 500K FPGA) along with a LogisStart MegaWing (approx USD100) and I am happy with that for now.
    I have programmed everything I could get my hands on for the last 35 years. From machine code on Z80 6802 to modern languages RISC ARM PHP MySQL HTML Javascript LUA , the list is too long to write.

    What I see the Arduino as –
    The simplest Integrated Design Environment Software I have ever seen
    An extremely simple high level language for coding
    Good community building and skill sharing
    High quality, easy to navigate documentation

    Personally I think the it is foremost the quality of the documentation and second the simple IDE that has made the Arduino the huge success it is. Then next in order is the simple programming language.

    We have seen every version of the ‘duino’ imaginable. Higher powered ‘duinos’ using STM32F, Various ARM and so many other micro-controllers. Even my Papilio has a bit code for a ‘duino’ mode.

    Here are the problems I see with this project –
    Asking someone to go from the Arduino’s simple high level language to VHDL is like asking a carpenter to take on brain surgery. On top of that they would have to move from ‘The simplest IDE I have ever seen’ to Xilinx ISE which is total brainf.ck!

    The shields for the Arduino are designed to work with a ~16 MIPs uC so none of them can take advantage of the vastly increased power of using FPGA.

    I think this will be too big a step for most. Perhaps an intermediate step of using a simple CPLD as a shield only would help.

    If this is to take off then this is what I think it would need.

    Documentation, Documentation, Documentation, Documentation! and good documentation.
    Onboard USB (RS232) that is compatible with the ISE to run stand alone.
    Shipped with a ‘Duino’ bit code that is compatible with the Arduino IDE out of the box.
    A third party software build for programming VHDL (perhaps just a front end GUI for ISE) that makes coding easy.

    Hardware wise I would –
    Have USB onboard RS232 / FTDI / CP230x
    NOTE: China has been creating fake FTDI chips using a uC. The latest genuine FTDI driver for Win does not work with the fakes – choose supplier carefully.
    Onboard SRAM chip instead of SDRAM. SDRAM is well suited to uC’s but is a pain to interface with in raw VHDL. There are plenty of GPIO for this.

    I would be more that willing to help but be aware that I am a newby to ISE / VHDL.

    1. Going to CPLD isn’t going to be any less of a jump than FPGA. You still need to learn the same languages, flow and tools etc. You can ignore the more advanced FPGA features in the beginning. CPLD these days looks more and more like FPGA.

      Find it silly for adding more stuff which increase the cost for everyone else who may or may not be interested in Arduino when you have a FPGA that you could build whatever you want. Not everyone want to pay the Arduino taxes if they are not using those parts. Probably better off getting the soft cores inside the chip with the usual Arduino support stuff as a inside FPGA option, but minimal hardware cost. If you want, you can even make a AVR core just to run VUSB or a real USB core as the USB-serial link.:)

      KISS and the board will have more appeal to everyone else.

      1. I agree. The tradeoff between CPLD and FPGA is a step in the wrong direction. CPLDs will only restrict what you can do with the device without adding any real benefit when it comes to learning tools. This was why I chose such a powerful device. I would rather you have the *option* to do all sorts of cool things with it and ‘have and not need’, then need more resources and be stuck buying a second board.

        Regarding SRAM, this was a deliberate tradeoff between simplicity and cost. SRAM was just too expensive for my target of under $30. Don’t get me wrong, it definitely has it’s place and I like the simplicity in many cases, but again, the cost is the killer. Either way, a decent memory controller core on the FPGA and you won’t bat an eye.

        Regarding tools, I’ve thought long and hard about doing some simpler wrappers for the vendor tools using other text editors or even building a VHDL netlister for KiCAD that lets you use schematic symbols (all devices would have to use either the xilinx generic logic family or have similar bus interfaces like Wishbone for larger cores). Altium has this but it’s out of reach price-wise for the open hardware community and I want to ensure that everyone has access to it.

        The xilinx tools are all command-line accessible so if you really wanted to develop a simple IDE (or even modify Eclipse or other editing env), not a huge challenge, but one that would take some thought and real energy. Just please please please no one think to do something like the IDE for arduino. I like Arduino – a lot – but no one who has ever used a proper text editor would try and sell me on the virtues of Arduino’s editing environment. :)

        For now, I’ll focus on getting the board done and walking people thru ISE. If it sucks or people find it’s too hard or too unwieldy, then I can always find room for another little side project. (If you’ve got some programming chops, that would be a cool thing to try and contribute!;)

      1. I will finalize the board this week and complete the routing in the next few days. If you want a prototype board, send me a private message on twitter @technolomaniac or on youtube and I’ll work something out for my cost + shipping. The only condition I have to prototypes is that if I send one out at cost (I’m not planning to make $$ from them…the BOM will be public so it’s pretty clear how much it’ll cost me to make them), I would like your feedback! Also any bugs, issues, etc. If there’s enough interest, maybe I’ll do a short run of prototypes and then a larger second run of boards for anyone who is interested. Currently I have parts for about 20 but I can always get more.

  4. Having looked over the schematic PDF, my only comment is that on U3 you have the Select and Output Enable signals reversed (page 3). Nothing else jumped out at me as problematic. Good luck!

    1. Many thanks! Later versions of the PDF should have that fixed. (If not, then I need to double-check the rev I have up in git! :). But excellent eye! I realized I did a video with that in it too. The high risk of engineering on the open web!

  5. This is a great project for combining simple and intuitive platform (Arduino) with flexible and powerful engine (FPGA). The two systems can address weaknesses of another with proper arrangement.

    Personally I have two suggestions after reading the material:

    1. Arduino D10 pin is a very popular for shields using SPI. e.g., Arduino Ethernet shield and Wifi shield all use D10 as SS. It will be great to add jumpers to select dedicated SS among few pins, e.g., D8, D9, and D10. Then it is possible to “download the FPGA configuration some where from the internet then upload to the SPI flash”.

    2. It can be great to allow Arduino SPI talk to FPGA directly (after FPGA is configured.) Since SPI is the only way Arduino can transfer at high-speed, it will be nice to do some great application to enable high-speed transfer among Arduino and FPGA.

    1. Great points on both fronts. I’ll be sure and wire the arduino SPI pins into the FPGA. You’re right, this’ll provide a nice, fast., and *simple* interface between arduino and the FPGA. Likewise, I’ll take your advice and add jumpers to the SS pins to include a few more options. This way none of the other arduino shields are impacted by this pin selection if we decide to use SPI elsewhere.

  6. Hi, small question about the project. I noticed that the component U4 (5V LDO according to the schematics) is stated as “LM1086-ILD”, according to the datasheet (http://www.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=lm1086&fileType=pdf) and the component description in your Altium file, this is a 3V3 device. I couldn’t find the 5V variant, other then the “LM1086ISX-5.0”, but this is a different package. Did you manage to find a replacement device that fitted on the same footprint?

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.