Re: FPGA?
The ULA - Uncommitted Logic Array - has been around since the 1970s. Ferranti was one manufacturer. These built arrays of logic gates (sometimes other component types) on a chip and then a client could interconnect those gates in whatever combination suited their use as the last manufacturing step, this being much cheaper than having a custom chip made. Sinclair famously made use of one in the Spectrum in order to eliminate dozens of individual ICs. Acorn did something similar when squeezing the BBC Micro's circuitry down to fit the Electron. This was, of course, a "write once" type process at the factory and if you found a mistake it was a pain to re-do things. I believe that getting the ULA right was a cause of delay for both the Spectrum and the Electron.
It's a similar concept to the mask-programmed ROM those computers used which caused similar issues.
For ROM first EPROM (erasable ROM, usually a few minutes under ultra violet light) and then EEPROM (electrically erasable) made development much quicker and for ULAs, FPGAs solve this problem. They are arrays of logic which are interconnected by, essentially, software. The connection list is loaded into the device at startup so you can do it at your desk and it's much, much faster to iterate through problems. I first played with them in the late 1980s at university and they weren't new then.
What surprised me most was that essentially it's a very simple idea. The FPGA is a random mix of AND, OR, NOT, EOR gates or D-types or adders; it's just a look-up table. Or at least the ones I played with back then were. With caveats about 40-year-old braincells, each "cell" was effectively a 16-bit memory. Four input bits produced one output bit according to the bits stored in the memory and thus it was possible to produce even quite complex logic within just one cell. Maybe some of the cells were four to two?
FPGAs these days are vastly more powerful than back then, of course!
M.