regresar: microcontroladores pic |

Los FPGA (Arreglo de Compuertas Programables) son circuitos integrados que permiten ser programados, tal como lo indica su nombre, de manera similar a los microcontroladores o los conocidos PLD (Dispositivos Lógicos Programables), para desempeñar diversas funciones. Se puede decir que estos componentes y la tecnología que alrededor de ellos se ha desarrollado, han revolucionado las técnicas de diseño de hardware, imprimiendo una velocidad y fiabilidad mayores a los diseños de sistemas electrónicos digitales. De hecho, hoy en día, un gran número de los sistemas electrónicos profesionales cuentan con FPGA como componentes fundamentales.
Con el desarrollo de esta tecnología, el diseño de hardware ha transitado vertiginosamente de la pura interconexión de circuitos integrados y componentes electrónicos a la programación software. No es extraño ver una placa de un equipo, incluso de alta tecnología, con solo algunos componentes discretos de montaje superficial, un oscilador y un FPGA. Las potencialidades de estos dispositivos hacen que se puedan agrupar en ellos un número nada despreciable de funciones y componentes complejas que antes constituían cada una un circuito integrado. Lo que se conoce como System on Programmable Ch ip (SoPC) implica lo descrito anteriormente, todo un sistema encapsulado enteramente en un FPGA.
La arquitectura de un FPGA consiste en cinco elementos programables fundamentales:
CLB (Bloques Lógicos Configurables)
IOB (Bloques de entrada-salida)
BRAM (memoria RAM de bloque)
Multiplicadores
DCM (Manejador de reloj digital)
Los CLBs se pueden programar de diversas maneras logrando así una amplia gama de funciones lógica. Cada CLB está compuesto por cuatro slices y estos a su vez contienen las llamadas LUTs (en inglés, Look up tables ), las cuales son elementos basados en memoria RAM que se pueden usar como flip-flops ó latches . Las LUTs pueden tomar la forma de un bloque lógico e implementar multiplexores, o bien utilizarse como elementos de memoria (RAM distribuida) donde cada una tiene una capacidad de hasta 16 bits. También puede utilizarse como un registro de desplazamiento logrando retrasos de 16 ciclos de reloj. Las LUTs son el elemento fundamental para la síntesis de funciones lógicas. En los anexos 1 y 2 se observan diagramas que detallan la estructura de un FPGA y un slice de un CLB respectivamente.
Los IOBs se encargan del flujo de datos desde y hacia el FPGA a través de los pines del chip. Soportan flujos de datos bidireccionales, operaciones tri-estados, y un total de 24 estándares de señales incluyendo siete estándares diferenciales de alto desempeño. Poseen además control digital de impedancias.
La RAM de bloque consiste en varios bloques (internos del FPGA) de 18 Kbits. Cada uno se comporta como un chip de memoria de doble puerto. Cada puerto tiene sus propias señales de control para las operaciones de lectura y escritura.
Los multiplicadores son bloques dedicados que efectúan esta operación entre dos números de 18 bits cada uno. A la salida se obtiene un número de 36 bits. Se puede asociar un bloque multiplicador con un bloque de RAM, de manera que se obtiene un multiplicador sincrónico con las salidas registradas. La cercanía física de los bloques multiplicadores y los bloques de RAM posibilita esta característica. Haciendo multiplicadores en cascada es posible lograr la multiplicación de más de dos números e incluso de números de más de 18 bits. Ver figura 8.

Fig. 8. (a) Multiplicador de 18 bits asincrónico. (b) Multiplicador de 18 bits con salidas registradas
Como último elemento entre los fundamentales del FPGA de Xilinx están los DCM. Por lo general, los miembros de la familia Spartan 3 poseen cuatro DCMs. Estos elementos están destinados a proveer una señal de reloj de elevada exactitud. Eliminan los cambios de fase en la señal de reloj, así como las desviaciones de esta señal producto de perturbaciones externas, de altas temperaturas u otros efectos. Para esto implementan un DLL (en inglés, Delay-Locked Loop ). El DLL rastrea las desviaciones de la señal de reloj y a través de una realimentación logra eliminar el error en la señal original. El DCM es capaz de proveer al sistema de un conjunto de señales desfasadas con respecto a la señal de reloj original.
Para configurar un dispositivo Spartan 3 se cargan los datos del diseño en la BRAM fundamentalmente. Mientras el componente se mantiene energizado, la BRAM se comporta como una memoria estática. Es posible cargar parte del código y los datos de la aplicación en una memoria externa también. Un mecanismo eficiente para el acceso a estos segmentos en memoria externa (externa al encapsulado del FPGA) lo implementa un procesador embebido mediante la memoria cache y el protocolo XCL ( Xilinx Cache Link ).
Ahora, previo a la carga de la aplicación en el chip, estos datos deben estar almacenados en una memoria no volátil dentro o fuera de la placa. El fabricante recomienda utilizar algún componente de la familia Xilinx Platform Flash PROM. Uno de estos chips viene como parte de los kits de evaluación de FPGA que comercializa Xilinx.
Existen pines dedicados exclusivamente a la carga de la aplicación en el FPGA como son M0, M1 y M2. Otros, en cambio, intervienen durante el proceso de carga y luego pueden ser usados por el desarrollador en el sistema como pines de entrada-salida. Estos se conocen como pines de doble propósito.
Existen cinco modos de carga de la aplicación en el FPGA.
Slave Serial
Master Serial
Slave Parallel
Master Parallel
Boundary Scan (JTAG)
El modo Slave Serial consiste en cargar la configuración mediante un flujo serie en el FPGA desde un dispositivo PROM serie. Este último suministra una señal de reloj a través del pin CLK conectado al pin CCLK del FPGA, donde en cada pulso de subida se cargará un bit del pin D0 (PROM) al pin DIN (FPGA). La configuración de los pines M0, M1 y M2 es “ 111” para este modo. En la figura 9 se muestra como se pueden programar varios chips en cascada utilizando una sola memoria PROM. En este caso, cuando se finaliza la carga de la aplicación en el primero, a través del pin DOUT de este, se suministra el flujo serie de bits para cargar el siguiente chip a través de su pin DIN.
El modo Master Serial es muy similar al anterior. La configuración de los pines de carga es “ 000” en este caso. Este modo se caracteriza porque la señal de reloj es proveída por el FPGA (al contrario del modo Slave Serial). Con cada pulso de reloj, la PROM carga a través de su pin D0 los bits de configuración. Ver figura 9.

Fig. 9. Disposición de chips y conexiones para configuración serie de un FPGA
Slave Parallel es el modo más rápido para la carga de la configuración en un componente. Aquí los datos se cargan desde un dispositivo PROM con salida en paralelo (8 bits). Este dispositivo establece las señales de reloj, chip select y escritura. El FPGA pone a nivel alto la señal BUSY cuando no está en condiciones de recibir datos y el dispositivo de memoria espera a que esta condición cambie para continuar con la carga de la configuración. Se configuran los pines “M” de carga con la palabra “ 011” .
En Master Parallel es el FPGA quien comanda las señales para la carga de la aplicación desde la memoria PROM. Lo hace a través de un bus de datos de 8 bits. En este caso no se necesita de una señal BUSY como en su homólogo Slave Parallel ya que es el FPGA quien tiene el control y solicita los octetos de configuración. Los pines M se establecen con el valor “ 110” en este modo.
La configuración vía Boundary Scan siempre está disponible y su selección desplaza a cualquier otro modo, a pesar de que haya sido seleccionado. Este tipo de configuración se realiza a través de pines dedicados y cumple con el estándar 1149 de la IEEE y con el estándar 1532 para los dispositivos programables en el montaje mismo. En este caso la configuración se lleva a cabo a través de un flujo de bits serie.
El proceso de configuración por lo general consta de tres etapas. Tras energizar el sistema o al llevar a “ 1” el bit PROG_B se verifica que los voltajes VCCINT, VCCAUX, y VCCO_Bank 4 hayan alcanzado los niveles requeridos. Cuando esta verificación es positiva comienzan las etapas de configuración y arranque del sistema. Primeramente se limpia la memoria de configuración del FPGA. Luego se inicia el proceso de carga de la aplicación según el método seleccionado de entre los cinco vistos anteriormente y por último se procede a inicializar la aplicación mediante un mecanismo de arranque. Este puede ser un boot loader , o un fichero de tipo ACE por ejemplo. En la referencia 1, páginas 37 y 38 se pueden observar sendos diagramas de flujo que describen las etapas de configuración. Nótese como existe la posibilidad de salir de la aplicación de usuario y reconfigurar el componente. La nota de aplicación XAPP441 de Xilinx trata sobre la reconfiguración de los FPGA montados ya en una tarjeta.