Yet with all these mentions here I fear that I may become unemployable as a software developer if I don't keep up.
Yet with all these mentions here I fear that I may become unemployable as a software developer if I don't keep up.
I can think of a few uses for FPGA:
* Pedagogical. When I was an undergrad, I took a computer architecture course. We wired up a simple computer with breadboards and discrete logic. The computer was microcoded to execute a variant of a modern ISA. The computer was useless and slow, but you learned a lot about computer architecture. I think this exercises is properly done with FPGAs these days.
* High-speed VLSI design simulation. You can simulate large designs at partial speed in circuit with FPGAs before you fab. I have no personal experience with this, but I'm guessing big chip design companies like Intel buy a lot of FPGAs for this purpose.
* Interfacing to high-speed data interfaces. Say you're building a hardware board with SATA, HDMI, or a high-speed ADC, but the microprocessor on your board doesn't support that interface natively. You can use an FPGA to connect that interface to the rest of the system.
For example, bunnie's Novena laptop has an FPGA with a high-speed IO connector. He has connected this to a high-speed DAC to create a homemade oscilloscope.
* High-speed DSP. Modern FPGAs have distributed DSP blocks. For example, the Xilinx Artix-7 100T can do nearly 1TMAC/s. So if you want to do video or audio processing, an FPGA might be a good solution.
I briefly looked into building a board to combine two video streams into one with barrel distortion for the Oculus Rift. An FPGA is perfect for an application like this.
Actually an interesting arch for me would be small FPGAs together w/ an ARM system, where the FPGA would handle the fast interrupts, buffering things, and communicate w/ the processor when its ready.
The Parallella board contains one I believe (http://www.parallella.org/)
Very similar to Zynq but from altera rather than xilinx
What kinds of things can you really do better/faster/cheaper on an FPGA vs, say, STM32 F4 series?
You know how you start a microcontroller project with a "dream shopping list" of timers, I/O devices, memory, whatever features, then all the mfgrs have a giant table you scroll thru and then you trade off, "well, I need at least 3 SPI and 128K of ram, but they don't sell 128K ram with 3 SPI I need to buy a 192K to get my 3 hardware SPI, of course I could do two in hardware and bit-bang in software the 3rd...". Or even worse "I need at least three hardware PWM timers although they only need to be 24 bit, but the entire F4 series has exactly two 32 bit timers, oh knoes what am I going to do?" Even worse as the project changes over time.
With a FPGA you skip all that garbage and just synthesize in what you need. Oh I need 3 PWM timers, well, include three of them, no big deal. Wanna HDMI, if you can wire it in, you're good.
Ideally you'd put the "boring" parts of your software in the FPGA I/O device. If you're building a thermostat, why write the state machine in assembly or C, just use some mag comps and timers. Put the UI in the softcore processor.
If you're doin' it right, your UI soft processor need run no faster than a human, say 100 KHz clock speed. How fast can a human being hit a hardware debounced up arrow and read the LCD? If you're doing it wrong, you've got a softcore processor running multiply-add in software at 80 MHz and wishing for higher CPU performance.
There was an era of a couple decades which ends with FPGAs where its cheaper to throw in software than hardware, even throw in multiple microcontrollers. Why put in hardware schmidt trigger gates and resistors/caps to hardware debounce a switch if you can write 10 lines of code to do it in software? The hardware of the future will be a FPGA with exactly what you need and a very smart/advanced peripheral library. Why write 10 lines of buggy code to soft debounce a switch when you can just include some FPGA library code to get a perfect debounce with no race conditions or interrupt collision problems in the software, its just perfect.
http://wiki.elphel.com/index.php?title=FPGA_Development_in_E...
This wiki is a great resource for setting up a fpga tool chain on Xilinx.
Talking about ASICs, I'm surprised no one mentioned how the public heard of FPGAs in the last few years: bitcoin mining.
[1] http://research.microsoft.com/en-us/projects/cipherbase/
Basically if you need to interface with any digital hardware that isn't natively supported by your microcontroller/CPU/DSP, you'll probably want an FPGA to do it unless you have enough resources to write a bit-banged interface in the micro.