Una FPGA (del ingls Field Programmable Gate Array) es un dispositivo semiconductor que contiene bloques de lgica cuya interconexin y funcionalidad puede ser configurada 'in situ' mediante un lenguaje de descripcin especializado. La lgica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una puerta lgica o un sistema combinacional hasta complejos sistemas en un chip. Las FPGAs se utilizan en aplicaciones similares a los ASICs sin embargo son ms lentas, tienen un mayor consumo de potencia y no pueden abarcar sistemas tan complejos como ellos. A pesar de esto, las FPGAs tienen las ventajas de ser reprogramables (lo que aade una enorme flexibilidad al flujo de diseo), sus costes de desarrollo y adquisicin son mucho menores para pequeas cantidades de dispositivos y el tiempo de desarrollo es tambin menor. Ciertos fabricantes cuentan con FPGAs que slo se pueden programar una vez, por lo que sus ventajas e inconvenientes se encuentran a medio camino entre los ASICs y las FPGAs reprogramables. Histricamente las FPGA surgen como una evolucin de los conceptos desarrollados en las PAL y los CPLD.
Programacin En la FPGA no se realiza programacin tal cual como se realiza en otros dispositivos como DSP, CPLD o microcontroladores. La FPGA tiene celdas que se configuran con una funcin especfica ya sea como memoria (FLIP-FLOP tipo D), como multiplexor o con una funcin lgica tipo AND, OR, XOR. La labor del "programador" es describir el hardware que tendr la FPGA. Por consiguiente, la tarea del "programador" es definir la funcin lgica que realizar cada uno de los CLB, seleccionar el modo de trabajo de cada IOB e interconectarlos. El diseador cuenta con la ayuda de entornos de desarrollo especializados en el diseo de sistemas a implementarse en un FPGA. Un diseo puede ser capturado ya sea como esquemtico, o haciendo uso de un lenguaje de programacin especial. Estos lenguajes de programacin especiales son conocidos como HDL o Hardware Description Language(lenguajes de descripcin de hardware). Los HDLs ms utilizados son: VHDL Verilog ABEL En un intento de reducir la complejidad y el tiempo de desarrollo en fases de prototipaje rpido, y para validar un diseo en HDL, existen varias propuestas y niveles de abstraccin del diseo. Los niveles de abstraccin superior son los funcionales y los niveles de abstraccin inferior son los de diseo al nivel de componentes hardware bsicos. Entre otras, National Instruments LabVIEW FPGA propone un acercamiento de programacin grfica de alto nivel. Aplicaciones Cualquier circuito de aplicacin especfica puede ser implementado en un FPGA, siempre y cuando esta disponga de los recursos necesarios. Las aplicaciones donde ms comnmente se utilizan los FPGA incluyen a los DSP (procesamiento digital de seales), radio definido por software, sistemas aeroespaciales y de defensa, prototipos de ASICs, sistemas de imgenes para medicina, sistemas de visin para computadoras, reconocimiento de voz, bioinformtica, emulacin de hardware de computadora, entre otras. Cabe notar que su uso en otras reas es cada vez mayor, sobre todo en aquellas aplicaciones que requieren un alto grado de paralelismo. Existe cdigo fuente disponible (bajo licencia GNU GPL)1 de sistemas como microprocesadores, microcontroladores, filtros, mdulos de comunicaciones y memorias, entre otros. Estos cdigos se llaman cores. Tecnologa de la memoria de programacin Las FPGAs tambin se pueden diferenciar por utilizar diferentes tecnologas de memoria: Voltiles: Basadas en RAM. Su programacin se pierde al quitar la alimentacin. Requieren una memoria externa no voltil para configurarlas al arrancar (antes o durante el reset). No Voltiles: Basadas en ROM. Hay de dos tipos, las reprogramables y las no reprogramables. 1. Reprogramables: Basadas en EPROM o flash. stas se pueden borrar y volver a reprogramar aunque con un lmite de unos 10.000 ciclos. 2. No Reprogramables: Basadas en fusibles o antifusibles. Solo se pueden programar una vez, lo que las hace poco recomendables para trabajos en laboratorios. Ejemplo de tarjeta de desarrollo que incorpora una FPGA 2 :