A field-programmable gate array (FPGA) is an integrated circuit designed to be configured by a customer or a designer after manufacturing – hence the term field-programmable. The FPGA configuration is generally specified using a hardware description language (HDL), similar to that used for an application-specific integrated circuit (ASIC). Circuit diagrams were previously used to specify the configuration, but this is increasingly rare due to the advent of electronic design automation tools.
Why FPGAs?
- Reprogrammable ==> Allows the addition of new features, bugfixes, support of new drivers and generally extends the live of a product in the field.
- Multiple configurations ==> Instead of having one large asic one can just load a new bitfile on the fpga to have the additional functionality. Furthermore, one does not have to invest into a mask which is required on the asic.
Basic Elements
- Matrix of CLB (Configurable Logic Blocks) connected to each other with programmable interconnects.
- Each CLB consist itself of the following elements
- LUT (Lookup Table) [7-Series ==> four six input lookup tables]
- Sequential Elements (flip-flops or latches)
- Multiplexers
- Used to cascade the luts
- Carry Logic
- perfroming arithmatic functions
- RAM
- SRL (Shift register logic)
- Each CLB consist itself of the following elements
- IOB (Input output blocks) to communicate with the outside world
- Dedicated blocks
- BRAM
- DSP
- PLL
- Serial TX
Stacked Silicon Interconnect Technology
Since FPGA are huge it is easier to manufacture them in different parts (smaller dies). If one die has a malfunction it is not that expensive (one can sort this die out). Furthermore this technology allows:
- Ultra-High interconnect bandwidth
- Lower power Consumpiton
- One fifth latency of standard I/O
- Giving 100x improvements