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/reusable
  • The more fine-tuned an MCU/CPUs is to the application it is running, the faster that app's performance will be
  • Ergo: 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!


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.

  • Thank you @whatsisname (+1): this is an extremely thorough answer that went above and beyond anything I was looking for!!! Of everything you said, there are only two small items I'm still not understanding: (1) Why wouldn't you consider Microcontrollers to be general purpose? Could I not write any number of vastly different applications and flash them to a microprocessor? And (2) When you stated "These days, unless your application has a lot of analog components to it, ASICs aren't often more cost effective than FPGAs.", I'm not understanding what that means. Can you elaborate? Thanks again! – smeeb May 14 '15 at 14:03
  • (1) Forget about the term "general purpose" as it doesn't have a well defined meaning. Microcontrollers typically have a processing core, some on-chip memory, and a selection of peripherals. Different devices in a given microcontroller line will have different assortments of peripherals and memories. Whether a particular device will work for an application usually boils down to whether the peripheral line-up is suitable for the intended device. – whatsisname May 14 '15 at 16:10
  • (2): FPGAs are almost entirely digital devices. Sure, some of them have some analog components or features, but the meat and potatos of FPGAs are for digital functions. Therefore, if you have a lot of analog signal processing, you'll typically use some other analog components for the front end, and feed that data to an FPGA or microcontroller. You could combine all those components onto an ASIC, where you can have analog amplifiers and other elements on your silicon. However, doing that is crazy expensive, and usually the first option or using an off-the-shelf DSP is far more economical. – whatsisname May 14 '15 at 16:13
  • If you have more questions you should pay a visit to Software Engineering Chat. – whatsisname May 14 '15 at 16:14
  • Note the cost advantage of an FPGA over an ASIC also includes time. Patching a bug in a complex FPGA design can take in the order of hours, but you will wait months for the new design of ASIC to come out of the fab. – Caleth Sep 25 '18 at 10:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.