I'm just a GPU nut, I've doing it with direct compute ever since I was 21 doing direct x 6 win32 tutorials watching Martin Short on tv back in the olden days possibly 10 years after inner-space came out. I loved that movie, it was absolute magic and the robot suit's were fricken amazing! and as I think back terrify the absolute shit out of me now if it ever became a reality. curse the singularity.
So the biggest mystery to me now is, now I'm old,40 sick still feel and look like an immature teenager and just about carked it in the head, what the hell are FPGA's and who uses them -and what do they use them for?
So, four pages, and as typical, nobody's answered your question.
I'll just say upfront that I've been working with FPGAs (and CPLDs, and PALs/GALs and whatnot) since the days of the Xilinx XC3000, when we used to use ViewLogic for schematic entry and HDLs and synthesis did not exist. Those days were horrible and it was common to make a design change and let the tools run overnight and hopefully you didn't make a mistake. Like working with PALs, you had to do your own logic minimization.
So, anyway. It seems like all of my FPGA designs are of the "we need a boatload of logic and it needs to fit in this small space." And it's all of the sort of thing where a sequentially-execution processor doesn't make sense for the design. Most things now are controlling a sensor (providing it digital signals from a state sequencer), capturing data from that sensor (whether directly from the sensor's built-in ADCs or with external ADCs) and buffering and reordering it, controlling biases for the sensor, running a temperature-control loop for the sensor, reading housekeeping (voltages, temperature, vacuum, whatever), an interface for FRAM which is used as local parameter store, and managing a gigabit communications link to a remote server, and that includes a command parser and fast data path. Because of the environment in which the product is used, there is also a LOT of test logic built in.
Some of the stuff could be done in a standard processor, I suppose, but finding one that fits the bill for all of the various things is tough. Pick an ARM, any ARM. It has a fixed number of serial interfaces (UART, USART, SPI, I2C, whatever) but what if what's offered is not sufficient? For example, the most recent design has I think a dozen SPI and SPI-like interfaces. Rather than trying to figure out how to make Weird Sensor's "SPI" port work with a micro, I design the exact interface necessary.
Or, there's a dozen digital pots in the design, and to save pins on a feedthrough, we did something which is basically like QSPI but not really. There are six pairs of digital pots. Each pot needs an 8-bit control setting. Each pair is in series, so 16 bits have to be shifted out to load both. And all of the pairs are in parallel, so they share common SCLK and CS\ and there are six parallel MOSI lines. (We don't read them back, so there's no mux or other logic to deal with the MISO.) I'd probably slit my wrists if I had to do that in a micro, but in the FPGA it was trivially easy. Oh, yeah, we decided to save even more feedthrough pins
Another thing. A local server will send commands up over the gigabit fiber. The FPGA captures the commands (a four-byte packet) and decodes them. There are 256 possible commands (the command token is one byte). The cool thing about the FPGA command decoder is that it happens in parallel. That is, the time from receipt of the command token to the execution of the command is the same for ALL commands (and is very fast, like two clock ticks). Do that in a sequential-execution processor with a big CASE statement. How many compares does it need to do for the last command in the list?
And so on. The FPGA is basically just one big pile of logic resources you can use as your design dictates. You can even embed a processor core in your FPGA, for things which benefit from one (like, say, an Ethernet stack). I've done Xilinx MicroBlaze, Xilinx' Virtex-4 with the hard PowerPC, and I'm going to use a RISC-V in a new thing. The point is that the processor is "just another logic block" to the FPGA: you can do the things that "make sense" to do in the processor in a processor, and you can do the specialist stuff in the FPGA.
But has anyone here got some real experience with them - is there any forums to go to get tips off guys that have been doing it for ages?
Back in the day, there was the Usenet newsgroup comp.arch.fpga, which was exactly what you're asking for. I don't know if it still exists.
Good luck.