Las FPGA (Field Programmable Gate Arrays) contienen bloques lógicos relativamente independientes entre sí, con una complejidad similar a un PLD de tamaño medio, pero con mejores contraprestaciones. Estos bloques lógicos pueden interconectarse, mediante conexiones programables, para formar circuitos mayores, aunque algunas FPGA utilizan pocos bloques grandes (Plus Logic, Altera y AMD) y otras que utilizan muchos bloques pequeños (Xilinx, AT&T, Plessey, Actel).
La primera FPGA la introdujo Xilinx en el año 1985. La programación de las FPGA de Xilinx, que están basadas en RAM estática es diferente a la programación de los PLD.
Cada vez que se aplica la tensión de alimentación, se reprograma la FPGA con la información que se lee desde una PROM de configuración externa a la FPGA, cada FPGA admite un número ilimitado de reprogramaciones sin necesidad de borrados previos para la reprogramación.
La complejidad de una FPGA es muy superior a la de un PLD, tienen desde 1200 a 20.000 compuertas y la tendencia de desarrollo apunta hacia un rápido incremento en la densidad de compuertas.
Una FPGA no es una modificación a la arquitectura de las PAL, en donde se usan compuertas programables, realmente es un dispositivo diferente donde se usan celdas llamadas macro celdas lógicas de salida, las cuales constan de un flip flop y dos multiplexores permitiendo entradas realimentadas desde la salida, para su programación se usan tanto las compuertas programables como las macro celdas.
Todo FPGA tiene tres grupos de celdas básicas que son:
La celda lógica es la que existe en mayor cantidad y son pequeños bloques lógicos de compuertas programables. Las celdas de entrada/salida están dedicadas a proporcionar la interconectividad entre el FPGA y el exterior. Finalmente, las celdas de distribución se encargan de manejar las señales de reloj dentro del intrincado sistema interno del circuito.
La interconectividad en una FPGA está restringida a celdas adyacentes exclusivamente, con esto se asura un menor consumo de potencia y por consiguiente, un mayor nivel de integración y de versatilidad de uso.
Los arreglos de compuertas programables en campo (Field Programmable Gate Array). Son circuitos que contienen celdas lógicas programables desde 64 hasta 8 millones de ellas, se interconectan por medio de una matriz de interconexiones programables.
Las FPGA, se caracterizan por bloques lógicos desarrollados con lógica combinacional y secuencial, como función de control para el dispositivo y como elemento programable de gran versatilidad y uso.
Cuando se trabaja con dispositivos lógicos programables se deben seguir los siguientes pasos:
Primero se debe realizar un planteamiento estructural del circuito que proporciona la solución deseada; en este punto se determinan los elementos que han de ser utilizados para la solución del problema.
El segundo paso consiste en realizar la descripción VHDL (Hardware Description Languaje, Lenguaje de Descripción de Hardware) de la estructura propuesta para la solución del problema y se procede a la simulación lógica de la propuesta. Esta simulación lógica no permite contemplar los retardos en las compuertas y solamente sirve para verificar el funcionamiento de la propuesta en condiciones ideales de trabajo. Si la simulación muestra que la opción elegida es correcta se procede a la síntesis del circuito; si por el contrario, la simulación no es correcta hay que realizar las correcciones necesarias hasta obtener un circuito funcional en la simulación.
Para obtener el circuito que realice las operaciones deseadas y descritas en el planteamiento del problema se debe elaborar la síntesis del proyecto. Esta síntesis consiste en convertir el código VHDL en ecuaciones lógicas equivalentes a la tecnología donde se pretende llevar a cabo la realización final. Este paso y los siguientes son sensitivos a la tecnología; es decir, dependen del mercado existente. En este momento se tiene que utilizar y especificar el fabricante del dispositivo y la familia de circuitos a utilizar en la solución.
Ahora se continúa con el ruteo, que se encarga de ajustar las ecuaciones obtenidas por la síntesis en los bloques constructores del dispositivo lógico programable, especificado de manera particular la conexión; es decir, se convierten las ecuaciones lógicas en bloques constructores como las macro-celdas o las celdas lógicas, según la FPGA utilizada y la interconectividad al interior de la misma. En este paso se deben predecir los retardos que han de tener todas y cada una de las etapas sintetizadas en el circuito.
El siguiente paso incorpora los retardos predichos por la etapa de ruteo y el listado VHDL original y se procede a realizar otra simulación, la simulación funcional donde además de la lógica, también se verifican los tiempos de retardo en que actúan las diferentes señales dentro del circuito, si la simulación es correcta se procede al siguiente paso. Si la simulación no entrega los resultados esperados debido a los retardos, se deben realizar las modificaciones pertinentes, ya sea en la estructura del circuito, en el tipo de dispositivo seleccionado o en otro elemento y proceder a realizar la síntesis y simulación funcional nuevamente hasta que se cumpla con lo deseado.
Una vez que la simulación funcional entrega los resultados correctos se procede a generar el mapa de fusibles del dispositivo, el cual define la interconectividad final del circuito que se desea programar, y con la ayuda de un programador lógico se procede a programar el circuito integrado y a desarrollar y probar la aplicación.
Es importante hacer notar que cada fabricante de circuitos lógicos programables (PLD), tiene sus propias herramientas para llevar a cabo la síntesis, el ruteo y la generación del mapa de fusibles, por lo que es importante conocer las herramientas de cada uno de ellos, para la correcta aplicación de los diseños de circuitos lógicos. Así mismo, cada familia de dispositivos tiene parámetros y variantes en cuanto a recursos; es decir: cantidad de compuertas disponibles, velocidad de operación, numero de terminales de entrada y/o salía, entre otros.
[1]Tomado de "Architecture FPGA" by Bassime - Own work. Licensed under CC BY-SA 3.0 via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Architecture_FPGA.JPG#/media/File:Architecture_FPGA.JPG