What is the difference between FPGA and MCU ?
FPGAs are highly configurable general-purpose integrated circuits (ICs) populated with small programmable digital logic building blocks called “logic cells” or “logic elements.” Custom ICs or Application Specific Integrated Circuits (ASICs) are very similar, but with ASICs, the custom circuit design is set up in silicon and difficult to change after the fact (lasers can affect some circuits on the IC after fabrication and, however, after packaging Before.)
In terms of versatility and functionality, an FPGA is somewhere between a microcontroller (MCU) and an ASIC. However, as FPGA prices fell and combined with processors on the same platform, the lines between ASICs and FPGAs began to blur. FPGAs are not as flexible as MCUs in programming, but provide precise customization through hardware that MCUs cannot, such as custom hardware acceleration of algorithms.
Some FPGAs are one-time programmable, but most FPGAs can be reconfigured or updated after deployment until dynamically reconfigured in computing applications. According to Xilinx, “Partial reconfiguration is the ability to dynamically modify a block of logic by downloading a partial bit file, while the rest of the logic continues to run without interruption.”
FPGAs can perform large amounts of computation with low latency. FPGA programming involves a steep learning curve. As design iterations are tested, MCUs are easier to use in development. The FPGA has to do more than just “recompile”; the FPGA has to be re-placed and re-routed according to the changes.
MCUs offer higher design portability than FPGAs. FPGAs most often use fixed-point arithmetic. FPGAs are capable of complex, time-critical signal processing with stringent throughput and low latency requirements because dedicated hardware and memory ensure time guarantees.
FPGAs now offer processor cores for hybrid approaches. The learning curve for using FPGAs is one of the more significant barriers to developing with them. Unfamiliarity with and programming an FPGA can lead to a bias towards solving problems with an MCU. However, FPGAs are not immune to applications with stringent computational and memory requirements, such as imaging, or applications that require high determinism, high throughput, and low latency
FPGA | MCU | |
Learning Curve | Steeper learning curve | Learning curve with some cross-over in tools (e.g., the ever more widespread Eclipse IDE, shared languages). |
Fixed/Floating point operations available | Mostly fixed point. Difficult to accommodate floating point. | Fixed and floating point are widely available. |
Time-critical processing | Capable of sophisticated, time-critical signal processing with strict throughput and low latency requirements. | Depends on requirements as to whether the MCU can accommodate. Limited reach |
Portable design | No universal design method that is portable. | Easier to port designs between MCUs with C/C++ language. |
Total Flexibility | Superior in software and hardware flexibility in customization. Dynamic reconfiguration is possible | Reprogramming software only. |
Development Angst | Development iterations take longer with re-placing and rerouting required of FPGAs in the development process. | Code changes can often be added after compilation like a patch, without re-compiling, for a facile development process. |
Tools | No portability across tools. Universal design methods are non-existent. | Open source tools increasingly make the development process portable across platforms. |