What is an FPGA?
While introducing myself as a Field Programmable Gate Array or FPGA Engineer, this is the first question I need to answer, and as always, the answers vary depending on the person I am speaking to. I have found three definitions for this question that, I believe, are complete and useful.
The first (Short and Simple) version: An FPGA is a reprogrammable silicon chip.
The second (Software) version: FPGAs are reprogrammable silicon chips. Using inbuilt logic blocks and programmable routing resources, one can configure these chips to implement custom hardware functionality. One can develop digital computing tasks in software using HDL programming and compile them down to a configuration file or bitstream that contains information on how the components should be wired together. In addition, FPGAs are completely reconfigurable and instantly take on a brand new personality when you recompile a different configuration of circuitry, i.e. bitstream.
The third (Hardware) version: An FPGA is an Integrated Circuit (IC) made of a grid of configurable blocks connected by a programmable interconnect network. A configurable block consists of Look-Up Tables (LUTs) and Flip-Flops (FF). FPGAs are made of hundreds to thousands of such configurable blocks. LUTs are memory-based truth tables for fast computations, whereas Flip-Flops are used to store the current state, i.e. the memory unit of the FPGA. These are connected using Switch Boxes. Switch boxes determine how the connection between the LUT and FF (internally) and between configurable blocks (externally) are formed.


"The only way to do great work is to love what you do." - Steve Jobs