I'm trying to understand the relationship between common MCUs/CPUs such as Intel, AMD, PowerPC, AVR, ARM, etc. and FPGAs and ASICs.Here is my understanding:These commons MCUs/CPUs (again, Intel, AVR, ARM, etc.) are general purpose and as such are not programmable and are meant to run a variety of different apps.FPGAs are also MCUs/CPUs, however their circuitry is entirely programmable.ASICs are also MCUs/CPUs, however they are app-specific and not programmable/reusableThe more fine-tuned an MCU/CPUs is to the application it is running, the faster that app's performance will beErgo: ASICs are fastest but are app-specific, not general purpose. Common MCUs/CPUs are slowest (relatively; not calling them slow by any means!) but are general purpose and can run any binary-compatible app. And FPGAs are in the middle because they are both app-specific and programmable.Is anything about my understanding above is incorrect? If so, please correct me!
Relationship of common MCUs/CPUs to FPGA and ASIC
cpu;computer architecture
You're mixing things up a bit. You've kind of got the gist of it but not completely.Let's compare General Purpose Microprocessors, Microcontrollers, FPGAs, and ASICs. You've lumped microcontrollers and microprocessors together, when you really shouldn't.General Purpose Microprocessors: These are the desktop and laptop processors, Intel Pentium chips, AMD Athlons, etc. These are expensive, very high power (watts), high-performance processors. They require an enormous amount of supporting circuitry in order to operate. Microcontrollers: These classically are devices such as 8-bit Atmel AVRs, Microchip PICs, and many others. They are usually cheap, low-speed, low-performance, low powered devices, and often require very little supporting circuitry to operate. 40W is low for a CPU, 40mW is high for a microcontroller. They have very little memory, often having only 4-8K of SRAM, and 64KB of flash memory. The processors in many applications, such as cell phones, blur the lines between the general purpose microprocessors, having higher performance and greater memory, but still low power. There are many ARM products that are making headway in the microcontroller realm that have performance capabilities vastly greater than the microcontrollers described above, with admittedly much greater power consumption, but similar in terms of little supporting circuitry, and cost. The processors in a digital camera for example, might be a chip that doesn't fit into either bucket very easily (and will probably have a beefy DSP to go with it).FPGAs are economically in the middle of microcontrollers and ASICs. They give a trade-off high-speed and low power, but at reduced flexibility and increased complexity. Writing VHDL or Verilog for them is much more complicated than writing C for a microcontroller. These days, unless your application has a lot of analog components to it, ASICs aren't often more cost effective than FPGAs. An FPGA also is neither a microprocessor nor microcontroller, however, you could program one to function as a microcontroller, provided it has the right peripherals.Application-Specific Integrated Circuit (ASICs). These are custom chips designed for a specific task. In my experience, the ASIC label goes on chips that are designed for a single-customer/single product, not just simply how specialized they are. I personally wouldn't call anything out of the digi-key catalog an ASIC, just an IC. Even something like the TI ADS1298R, a chip specifically designed for ECG devices. ASICs are used for specialty products that have constraints of speed, power, or size, where no existing general purpose part can suffice. An ASIC is not necessarily designed for maximum speed, it could also be for low power consumption. An ASIC can do it all, and give you whatever combination of speed, power, and size you need, but getting there will cost you more than any other option. Again, like FPGAs, ASICs are neither microcontrollers nor microprocessors, but you could implement one in an ASIC. However, doing that would be so outrageously expensive and complex, that you need to rethink what you are doing. Instead, you would implement a device that computes some small piece of the puzzle, the element that is in the tightest loop of your application, then use general-purpose parts for everything else.And of course, as alluded to, there are a lot of devices that don't neatly fit into these buckets. Lastly, general purpose microprocessors aren't necessarily the slowest of the bunch, in fact the desktop processors are insanely fast, exceeding almost everything FPGAs are capable of. However, they also require tons of power compared to an FPGA. So whether you want to use a regular processor or an FPGA will depend whether your application is plugged into the wall or running of a tiny battery.