ABSTRACT

Field-programmable Gate Arrays, or FPGAs, are a type of integrated circuit (IC) that contain logic components and interconnects that can be programmed after the device is manufactured in a semiconductor fabrication laboratory [1]. In short, an FPGA is a type of gate array that is programmable multiple times in the field rather than once at manufacturing time. FPGAs can host complex logic designs that include both combinational logic (AND, OR, NOT, XOR, etc.) as well as sequential logic (latches, flip-flops, etc). Most FPGAs also contain memory elements in the form of flip-flops or block memories. Modern FPGA-based chips contain up to hundreds of thousands of gates, and there are a variety of FPGA architectures on the market. In addition, there are emerging FPGA design trends to include not only programmable logic blocks but also programmable interconnects and switches between the blocks, and fixed hardware such as block memories, digital signal processing (DSP) cores, and processors. Overall, FPGA programmability allows them to be used in a variety of applications: prototyping ICs, in lowvolume applications where the nonrecurring engineering (NRE) cost of designing and manufacturing a custom IC is too high, as glue logic for linking together other ICs, and for reconfigurable computing, which uses FPGAs as optimized computing engines. FPGAs provide this versatility through configurable logic and a hierarchy of flexible, programmable interconnects.