Electronic – Custom FPGA PCB with external programming circuit

fpgaintel-fpgapcbprototyping

My team has verified our logic design on a development board and we are ready to move to a final prototype. Due to the nature of the device, the FPGA board must contain minimal components and be configured via an external programming circuit. The specific technology we have targeted is the Altera Cyclone V but I imagine the same principles could apply to other technology as well. I am looking for advice on the best way to achieve this in terms of time, cost and complexity.

I will focus on the simplest method of programming, which is Active Serial configuration. After scouring the Altera website for a few days this is what I have come up with as design requirements:

-The FPGA cannot hold a design configuration (bitstream) through power off, and thus requires some type of programmable non-volatile memory, such as flash memory.

-There is a simple power-on sequence where the FPGA provides a couple external signals to indicate it is ready to receive a bitstream and also provides a clock via internal oscillator to synchronize itself with the bitstream source.

-The board containing the FPGA must be programmed while attached to an external circuit, removed from the circuit, and placed in a PCB stack containing several other devices that are all operating independently from the FPGA. The FPGA is not controlling any of these other devices, although it does receive control signals in order to synchronize its activity with the overall system.

A few questions I am having difficulty with:

  • Are there OTS solutions for FPGA configuration (storage and bitstreaming) or is this something that absolutely requires a custom designed microcontroller solution, such as MSP430/PIC?

  • I've looked at the USB blaster chip for a programming circuit solution, but it uses JTAG and interfaces with the FPGA directly. I'm not sure if it is capable of interfacing with a storage device. It provides far more functionality than is needed for this system, and is quite costly (~$300 just for the chip). We don't need to be able to access internal signals using Signal Tap, because our test setup can verify operation using co-simulation. Are there existing devices that I can use, possibly as a paired system (on-board chip plus external programmer chip)? Or, can anyone recommend an alternative approach?

I've submitted a support request to Altera, but I doubt they will be interested in helping out a startup like us. Plus, I'm sure there's more expertise available here. Thanks in advance for any helpful advice. You guys are great!

Best Answer

I think from your question you already understand this, but for clarification, this is my usual terminology:

  • Programming implies altering some non-volatile device
  • Configuration is what the FPGA does when it starts up - it loads its volatile internal memory from non-volatile external memory.

So, as you surmise, the system needs a non-volatile device of some sort which you program on the production line. To Clarify your comment on the USB blaster, it is not a chip... it's a "pod", so you'd have one for your programming station, not one per board:

USB blaster

Anyway, back to the non-volatile storage options:

  • The "Almost-zero-engineering required" approach uses Altera's configuration flash devices, which are JTAG programmable using something like a USB blaster. You just wire them up like the datasheet says, and away you go. They cost more per MBit than other options, though, so are not often used in volume production.

  • One more usual approach is a "normal" SPI flash chip. The Cyclone user guide configuration section will list some which are compatible with it, and I believe you can also use the Quartus software to program them via the JTAG of the FPGA they are connected to. More engineering involved, checking you have the right device etc. Also, if you are in volume production, you may not want to be using Quartus on the production line, which which case you may have to provide a separate programming header for the flash chip, and some hardware+software to drive that.

  • If you have a microcontroller in your system (even on another board...) you could connect that up to the FPGA's JTAG or configuration pins and store the FPGA bitstream in the micro's flash. More engineering involved as you have to have some software to "boot" the FPGA. however, it can make in-field upgrades easier, as often the micro is set up to receive software upgrades already, whereas updating the flash when it hangs directly off the FPGA is often an "opening the box" experience!