What is an FPGA?

From RidgeRun Developer Wiki


Previous: Introduction Index Next: Introduction/FPGAs and their applications





Introduction

FPGAs are reconfigurable devices that can emulate and implement hardware designs. Unlike other popular devices like CPUs and GPUs, FPGAs do not execute instructions but implement logic. It has several advantages over these processing units, particularly flexibility, massive parallelism and their functionality can be customized to meet specific needs, even after they have been manufactured.

Characteristics

FPGAs are well-known because:

  • Reconfigurability: The most notable feature of FPGAs is that they can be reprogrammed to perform different tasks. This makes them highly adaptable for various applications, from prototyping new hardware designs to implementing custom digital circuits. You can even implement your own CPU or GPU on them. Some examples of processors can be implemented on FPGAs, such as RISC-V, MicroBlaze and PicoBlaze.
  • Parallelism: FPGAs can perform multiple operations simultaneously. This parallel processing capability allows them to handle complex computations much faster than conventional processors in some cases. There are some restrictions in terms of processing, such as numerical precision, data communication, and memory storage.
  • Customization: FPGAs can be tailored to specific applications, enabling optimized performance for tasks such as data processing, signal processing, and real-time computing. Moreover, FPGAs can support multiple applications at the same time, allowing parallel execution.

These characteristics make FPGAs special for many purposes. For instance, reconfigurability allows the implementation of certain circuits that can be changed on the fly, parallelism allows low-latency and high-performance software acceleration, and customization opens opportunities for data processing.

How do they work?

FPGA Block Diagram and Composition

At the heart of an FPGA are programmable logic blocks and a reconfigurable interconnect. These elements configure the logic in each block and connect them together using the interconnects. It is like configuring logical gates and connecting wires. Here’s a simplified breakdown:

  • Logic Blocks: These are the basic building units that can be programmed to perform simple logic functions like AND, OR, NOT, etc. More complex functions can be built by combining these basic logic blocks. They are usually composed of Look-Up Tables (LUT), D-type Flip-Flops, Muxes and a Full-Adder
  • Interconnects: These are the pathways that connect the logic blocks. The configuration of these pathways determines how the logic blocks communicate with each other. They emulate wires in the real world.
  • Input/Output Blocks (IOBs): These manage the data entering and leaving the FPGA, interfacing with other hardware components.

There are more blocks, depending on how complex the FPGA is. For instance, AMD, Altera and Lattice FPGAs have RAM blocks that work as volatile memories to store data, MAC blocks (Multiplier + Adder) to perform arithmetic, and hard IP cores to interact with standard protocols like SPI, I2C, PCIe, Network, etc.

Regarding implementation details, we can roughly approximate how circuits are implemented, given their nature. For instance:

  • Combinational Logic: It is often represented through logic gates and boolean functions. They are likely to be implemented using LUTs and Muxes.
  • Sequential Logic: It is often implemented with LUTs and Flip-Flops.
  • Arithmetic: It can be implemented using the Full Adder or MAC blocks.
  • Volatile Storage: It can be implemented using the Flip-Flops or RAM blocks if available.

RidgeRun Services

RidgeRun has expertise in offloading processing algorithms using FPGAs, from Image Signal Processing to AI offloading. Our services include:

  • Algorithm Acceleration using FPGAs.
  • Image Signal Processing IP Cores.
  • Linux Device Drivers.
  • Low Power AI Acceleration using FPGAs.
  • Accelerated C++ Applications.

And it includes much more. Contact us at https://www.ridgerun.com/contact.



Previous: Introduction Index Next: Introduction/FPGAs and their applications