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.
The "Almost-zero-engineering required" approach uses Altera's configuration flash devices, which are JTAG programmable using something like a To Clarify your comment on the USB blaster. You just wire them up like the datasheet says, and away you go. They cost more per MBit than other options, though.
One more usual approach it is not 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 lineit's a "pod", which which case you mayso you'd have to provide a separate programming headerone for the flash chipyour programming station, and some hardware+software to drive that.not one per board:
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
Anyway, as often the micro is set upback to receive software upgrades already, whereas updating the flash when it hangs directly off the FPGA is often an "opening the box" experience!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!