Imagine a chip that can update its functionally unlimited times – exactly like an App on your phone. Welcome to the world of FPGA technology.
FPGA stands for Field-Programmable Gate Array, which is a chip that has programmable digital logic circuitry. The functionality of the digital logic circuitry is customized by the engineer that is programing the circuitry as needed, unlimited times.
The behavior of an FPGA is very similar to a CPU chip. An engineer writes a program, uploads it on the CPU for execution, and the program can later be replaced or updated. This is very similar to the way FPGA works too.
A CPU is running its software code in series – one line at a time, but an FPGA executes it function in parallel and therefore — much faster than a CPU. CPUs have a pre-defined hardware blocks that cannot be modified; however, FPGA’s internal hardware is adaptive, and its digital blocks can change their functionality.
The programmable logic of an FPGA is based on simple logic gates (e.g., OR or AND gates) or one or more complex logic blocks. Recently, FPGAs have included a processor on-board and additional hardcoded blocks, these are referred to as SoC FPGA or system-on-chip FPGA.
Steps in FPGA programming
There are seven basic steps that one should follow when programming an FPGA, and these include:
- Hardware architecture design – This involves designing how the system shall look like. Every block is described, and in the case of an SoC FPGA, the architecture design includes designing the hardware-software SoC partitioning.
- Creating the hardware logic itself – This involves writing the code using a hardware description language (HDL) like Verilog or VHDL.
- Verification – This is the process of verifying that the design and the logic circuitry works as intended before embarking on the FPGA programming. It typically done using a testbench.
- Synthesis –Transforming the high-level code into digital logic gates to meet the register-to-register clock frequency targets while keeping FPGA resources at the minimum.
- Integration – This involves integrating all the dedicated resources and registers of an FPGA.
- Implementation (FPGA programing) – This involves programming each of the physical resources with their respective logic circuitry and connecting/routing all the resources together. The result of this is a bistream, which is fed to the device for FPGA programming.
- Lab testing and debugging – Powering up the FPGA device using real inputs or test inputs to find out whether there are faults and find out their causes to rectify the design or FPGA program.
FPGA Applications
An FPGA is mainly used when there is a likelihood of making changes at the chip level or optimizing the chip for a particular functionality.
FPGAs are used over a wide range of applications, including imaging and video equipment, medical, automobile, aerospace, and military equipment.
Besides being used in specialized processing electronic circuits, FPGAs are also very useful in prototyping processors or application-specific integrated circuits (ASICs). ASIC manufacturers tend to use FPGAs to design new ASICs and only embark on manufacturing the new ASIC after verifying through FPGAs that the design is final and bug-free. An example is Intel, which uses FPGAs to prototype new chip designs.
FPGAs are also being used in deep neural networks (DNNs) used in artificial intelligence (AI). In the past, only Graphics processing units (GPUs) were used in accelerating inference processing. But high-performance FPGAs are also now being used, and in some cases, they outperform the GPU, especially when it comes to analyzing extensive data for machine learning.