Originally FPGA evolved from programmable logic devices. An EPROM is probably the most widely used example of a PLD. Partially because of this there are a lot of projects in SDRAM designs out there.
Usually if you need extremely fast i/o in the nanosecond order of magnitude then FPGA designs are a common design choice. An example of this are GPON network switches.
As mentioned in another comment video processing or any signal processing where the algorithms benefit from high parallelization is also an application where an FPGA would be a good fit.
The caveat though is that often FPGA/ASIC development is expensive and slow so a recent trend is to have a System-On-Chip with an FPGA area and multicore Microcontrollers. The idea with this is a hybrid design so that you can have an RTOS dealing with functionality where speed is not as critical. And have a custom design on an FPGA that is responsible for whatever bespoke application you need and have some memory interface between the two.
> An EPROM is probably the most widely used example of a PLD.
Upvote for this. When I used to think about PROM, I think it as a medium of data storage, or sometimes think it's a lookup table. But it's actually simplest form of programmable logic device - a device that can transform x-bit of arbitrary input signals to y-bit of arbitrary output signals, so you can build any digital system that uses combinational logic in PROM (and RAM for sequential logic), including a CPU. And since it's a PROM, you can reprogram it to implement another different logic device, simply by burning a new truth table.
After I realized this, the existence of reprogrammable hardware like FPGAs no longer sounds like magic to me anymore. From this, you can also see that computers with finite RAM and ROM is not a Turing machine, but a Finite State Machine.
I can't speak to what I'm actually doing with FPGAs but lately I've been enthralled by systolic arrays [1] to achieve massive parallelization of certain algorithms. It can be a trick to rearrange cache, computation and communication to be local, but if your amortization game is strong, O(n) becomes O(1) and it's extremely satisfying work.
Somewhat unexpectedly, many FPGA's industrial applications involve implementing a simple CPU (a "programmable state machine", PSM) and then having the domain logic coded in its machine language (using a cross-assembler).
My previous project was an UWB indoor tracking system for VR. FPGAs did all the signal transmission, reception, and digital signal processing: https://www.youtube.com/watch?v=mYyFUQbWC1E
My current project is AR glasses. An FPGA is decoding a displayport signal and driving the display.
Few applications I have worked on lately involving FPGAs:
- RF and microwave, direct digital synthesis.
- Data acquisition and analysis (fast, very fast)
- Time of Flight imaging/video
- Timing critical process control
IIRC, the configurable logic took the place of the CAMs in the routing table mainly. There's cool niches where FPGAs make sense due to their on the fly reconfigurability even more than a purpose designed asic would.
Do they really alter the images "on the fly" when traffic is flowing? Or do they have some situation where it's OK to stop traffic on their network interface for a short while?
Yeah, they do. They might drop a few packets during a partial reconfiguration if a stream is still in progress, but that's bound to happen anyway on routing changes.