An FPGA is a two dimensional array of generic logic cells and programmable switches that is configured using HDL, very high speed integrated circuit hardware description language and Verilog to name a few. FPGAs can be used to implement any logic function that an application specific integrated circuit (ASIC) could perform. Popular because of its ability to update the functionality after shipping, partial reconfiguration of a portion of the design and low engineering costs relative to ASIC design.
FPGAs contain programmable logic components called logic blocks and a hierarchy of reconfigurable interconnects. A custom design can be implemented by specifying the function of each logic cell and selectively setting the connection of each programmable switch.
Once complete, you can use a simple adaptor cable to burn the desired logic cell & switch configuration on to the FPGA device.
Some FPGAs have analogue features, most common is the programmable slew rate and drive strength on each output pin, allowing the engineer to set slower rates on lightly loaded pins that would otherwise ring unacceptably, and to set stronger faster rates on heavily loaded pins on high-speed channels that would otherwise run very slow.
Another analogue feature is the differential comparators- connected to differential signaling channels.
A few have ADCs & DACs peripherals with analogue signal conditioning blocks allowing them to operate as a system on chip.
An LUT is nothing but a small 1-bit wide memory array with its address lines representing the inputs to the logic block and a 1-bit output acting as the LUT output. An LUT with ‘n’ inputs can realize any logic function of ‘n’ inputs by programming the truth table of the desired logic function directly into the memory.