Re: FPGA don't run programs
"FPGA don't run programs Unless they are implementing a CPU."
See, this is the problem you end up with when you have hardware people and software people and limited crossover between the two.
"A raw FPGA is useless to programmer unless that programmer can design the HW of a hypothetical CPU from scratch"
Not exactly. Go read about Handel C (there are probably others I know even less about).
Someone can describe a program (and its interfaces) in something like Handel C and the transformed Handel C source can be loaded into an FPGA which with a following wind for the right kind of applications can look to the system designer just as though "it is running a program" except it does it more quickly than a conventional CPU could. Or for less cost.
The person writing the Handel C does not need to know how to design an instruction set or anything like that; they just need to be able to describe the interfaces and the data processing required by the application.
Doesn't suit all applications in all environments. Traditionally a bit niche. But last time I looked, FPGAs of a given capability were getting cheaper more quickly than ASICs were getting cheaper, so the volume at which custom ASICs are a better investment increased as time goes by.
If you're building disk drives (huge volume, limited variety, very cost sensitive), ASICs probably still win because of the volume and complexity tradeoffs.
If you're building vehicle control systems (not so huge volume, maybe more variety, maybe less cost sensitive)? Not such an obvious choice (unless custom ASIC economics have changed in the last few years)