We can buy prototype board to program FPGA very easily. And we can also buy single FPGA to program. But I don't know any board to program multiple time a FPGA. I guess that whenever you want to program several FPGA, a special programming board has to be used, where you can easily replace the FPGA by another with some kind of slot. Am I wrong? And is that board FPGA specific?

  • \$\begingroup\$ Why not just swap out the config ROM? \$\endgroup\$ – Ignacio Vazquez-Abrams May 25 '18 at 1:45
  • \$\begingroup\$ I'm not sure to understand what you mean, unfortunately... Just to explain a bit more what I wanted to ask, in case we are not talking of the same thing: instead of using an ASIC, when we rather prefer to embed an FPGA in a project that is duplicated 10 times, we may want to burn ten time the same thing, and thus buy an FPGA to be soldered on the PCB. How to do that? The development boards I know don't allow to remove the FPGA to do it... \$\endgroup\$ – Emile D. May 25 '18 at 2:02
  • \$\begingroup\$ please post a link to the board that you are talking about .... But I don't know any board to program multiple time a FPGA .... it seems that you are referring to a "program once" FPGA \$\endgroup\$ – jsotola May 25 '18 at 2:02
  • 1
    \$\begingroup\$ it seems to me that you do not fully understand how all the components on the FPGA development board work together \$\endgroup\$ – jsotola May 25 '18 at 2:09
  • 2
    \$\begingroup\$ The vast majority of FPGAs support JTAG programming interfaces. JTAG is designed to allow the serial programming bus to connect multiple FPGAs. To program a custom board with 10 FPGAs on it, just connect them up correctly in a JTAG chain and program them with the software and JTAG pod available from the FPGA vendor. \$\endgroup\$ – crj11 May 25 '18 at 2:13

An FPGA (aside from some specialty products) doesn't store its configuration after power is removed. It must be re-programmed every time it is powered up.

Most FPGAs include dedicated logic to connect to an EEPROM on the same board and automatically configure the FPGA from data stored on the EEPROM after each power up. If you use this kind of FPGA, your problem is now how to program a bunch of EEPROMS to be stuffed on the boards with your FPGAs.

For this, gang programmers are certainly available. You can also pay a service company to program your EEPROMs for you.

But they might not be economical if your production volume is less than 100 units or so. Instead, you can use the regular in-circuit programming facility of your FPGA to program it to a design that routes signals from the in-circuit programmer through the FPGA to program the EEPROM. The major FPGA vendors build this capability in to their in-circuit programming tools so you might not even be aware that this is what you're doing.

  • \$\begingroup\$ There are of course also non-volatile FPGAs with built in memory, though they are a small minority of the market, both economically and in the number of gates. \$\endgroup\$ – crj11 May 25 '18 at 3:02
  • \$\begingroup\$ @crj11, yes, "some specialty products". \$\endgroup\$ – The Photon May 25 '18 at 3:09
  • \$\begingroup\$ @crj11 And internally, those "non-volatile FPGAs" are often nothing but a normal FPGA with a serial flash die built into the package. IIRC, that's how Xilinx's Spartan-3AN series is configured. \$\endgroup\$ – user39382 May 25 '18 at 4:43
  • \$\begingroup\$ @duskwuff, I agree that is often the case, especially with the larger parts. \$\endgroup\$ – crj11 May 25 '18 at 12:27
  • \$\begingroup\$ @ThePhoton Thanks! Indeed, I had a wrong conception of the FPGA, as I thought they were coming with EEPROM inside. Is there some specific terminology for the FPGA function that read a EEPROM and burn the configuration inside the FPGA? (I guess at the power up?) \$\endgroup\$ – Emile D. May 25 '18 at 18:00

The previous answer is correct (The Photon) for solutions that typically have only FPGAs on the board.

If you already have an MCU on your board you can load the FPGAs from that processor.

Read this from Xilinx on configuration (others are very similar).

Read this on Altera FPGA configuration loading.

Typically when you load from a serial EEProm this is handled by the FPGA itsel, and as pointed out you just need to program the EEProms so the FPGA can be permanently installed on the PCB.

The other methods are much more flexible and typically include:

  1. A serial option such as SPI or I2C
  2. A JTAG option with multiple FPGAs addressable (many times this may include a JTAG header on the board for manual upgrade, but it can be driven from an MCU.
  3. A parallel option which looks like a RAM chip.

The parallel option is often used where the functions in the FPGA are dynamically changed during operation.


To expand on @crj11 s answer, all you need to do is provide a JTAG interface, which is a tiny little 10-pin connector, hooked up to the appropriate pins on the FPGA. After the board is assembled, you connect the JTAG and program the FPGA. And you can do this repeatedly to the same FPGA, so upgrades and bug fixes are straightforward.


Am I wrong? And is that board FPGA specific?

The largest company I know that does "gang programmers" for the last 40 years or so is DataI/O . They have adapters for every chip size and software for all chips bundled in one package and charge an annual update fee for their libraries. They don't do cheap a dirty single chip gang programmer cards. But someone else might.

enter image description here

They have the most popular machine, and ones for high production run rates. Not cheap, but good.

When large board shops have high production rates they use Data I/O equipment that supports.

  • Up to 2000 parts per hour (with tray, tape and tube, even with large file sizes)
  • 2 pick & place heads
  • SSD for fast download
  • Optimized algorithms

Normally you program a serial Flash chip for a voltatile FPGA but there are some interesting flash + Cortext FPGA SoC's out now. https://www.microsemi.com/product-directory/fpgas/1690-proasic3#proasic3-e


What we often do if we have production lots that are larger than a several dozen pieces is, we create a needle board for incurcuit testing that also has contacts to the flash interface. This way we can directly integrate the programming process into the testing sequence.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.