¿Qué sucede cuando se "programa" una FPGA?

Por lo que entiendo, el proceso de programación de un FPGA viene en dos partes:

  1. Codifique la descripción del hardware en bits que la FPGA pueda entender (es decir, escriba algo de HDL y compílelo)
  2. Cargue el HDL compilado en el FPGA.

Mi pregunta es: "¿Qué hace el FPGA con el HDL compilado?". Por el momento, pienso en los FPGA como "hardware moldeable", donde los cables y las puertas lógicas se pueden moldear como quieras. Una de las cosas buenas es que la moldeabilidad es permanente: los FPGA se pueden reprogramar.

¿Cómo interpretan los FPGA el HDL compilado? ¿Cómo se consigue la moldeabilidad permanente?

En realidad, no es permanente: el flujo de bits de FPGA debe recargarse desde EEPROM cada vez que se aplica energía. Los CPLD no tienen este problema y algunos FPGA tienen una EEPROM integrada que carga su flujo de bits en cada encendido.
Creo que quiere decir que "la moldeabilidad es permanente", es decir, que el programa en sí no es permanente.

Respuestas (4)

A juzgar por tu otra pregunta, eres un tipo de Xilinx. Por lo tanto, le sugiero que obtenga la hoja de datos de su chip Xilinx y vaya al capítulo Descripción funcional. Para el chip Spartan 3 que uso, son 42 páginas de lectura divertida. Detalla exactamente qué componentes hay dentro de un FPGA: IOB, CLB, segmentos, LUT, RAM de bloque, multiplicadores, administrador de reloj digital, red de reloj, interconexión y alguna información de configuración muy básica. Debe comprender esta información si desea saber cómo se ve un "HDL compilado".

Una vez que esté familiarizado con la arquitectura de su FPGA, podrá comprender este proceso. Primero, su diseño HDL se ejecuta a través del motor de síntesis, que convierte su HDL básicamente en RTL. Luego, Mapper procesa los resultados de Synthesis, "asignándolos" a las piezas disponibles de la arquitectura FPGA. Luego, el enrutador hace Place And Route (PAR), que determina dónde van esas piezas y cómo conectarlas. Finalmente, los resultados de PAR se convierten en un archivo BIT. Por lo general, este archivo BIT se transforma de alguna manera para que pueda cargarse en un chip Flash, de modo que la FPGA pueda programarse automáticamente cuando se enciende.

Este archivo de bits describe todo el programa FPGA. Por ejemplo, los CLB en un Spartan 3 se componen de segmentos, que se componen de LUT, que son solo SRAM de 1 bit y 16 direcciones. Entonces, una cosa que contendrá el archivo BIT es exactamente qué datos entran en cada dirección de la SRAM. Otra cosa que contiene el archivo BIT es cómo cada entrada de la LUT está conectada a la matriz de conexión. El archivo BIT también contendrá los valores iniciales que van dentro del bloque RAM. Describirá lo que está conectado a los pines de configuración y reinicio de cada flip flop en cada segmento. Describirá cómo se conecta la cadena de transporte. Describirá la interfaz lógica para cada IOB (LVTTL, LVCMOS, LVDS, etc.). Describirá cualquier resistencia pull-up o pull-down integrada. Básicamente, todo.

Para Xilinx, la memoria de la FPGA se borra cuando se inicia la configuración (es decir, se afirma PROG_B). Una vez que se borra la memoria, INIT_B sube para indicar que la fase está completa. A continuación, se carga el archivo BIT, ya sea a través de JTAG o de la interfaz del chip Flash. Una vez que se carga el programa, se pulsa Global Set/Reset (GSR), restableciendo todos los flip-flops a su estado inicial. El pin DONE luego sube, para indicar que la configuración está completa. Exactamente un ciclo de reloj más tarde, se libera la señal global de tres estados (GTS), lo que permite activar las salidas. Exactamente un ciclo de reloj más tarde, se libera Global Write Enable (GWE), lo que permite que los flip flops comiencen a cambiar de estado en respuesta a sus entradas. Tenga en cuenta que incluso este proceso de configuración final se puede reordenar ligeramente según los indicadores que se establezcan en el archivo BIT.

EDITAR:

También debo agregar que la razón por la cual el programa FPGA no es permanente es porque el tejido lógico está compuesto de memoria volátil (por ejemplo, SRAM). Entonces, cuando el FPGA pierde energía, el programa se olvida. Es por eso que necesitan, por ejemplo, chips Flash como almacenamiento no volátil para el programa FPGA, para que pueda cargarse cada vez que se enciende el dispositivo.

La compilación del HDL da como resultado un patrón de bits que indica qué conexiones dentro del FPGA deben activarse. El FPGA ya no tiene que interpretar el HDL. El patrón de bits se programa en un cargador serie Flash/EEPROM y, al arrancar, este patrón se desplaza a la FPGA, realizando las conexiones necesarias.

SÍNTESIS significa tres frases 1. Generación de listas de red 2. Optimización de nivel de puerta 3. Mapeo de tecnología.

El resultado de la compilación es un flujo de bits (literalmente, un flujo de bits) que se carga después del encendido. Esto cambia a través del almacenamiento de la FPGA en algunas celdas de memoria (latches). Estas celdas están conectadas a varias entidades lógicas, multiplexores, tablas de consulta, bloques de RAM, matrices de enrutamiento y constituyen lo que se denomina la "configuración". Una vez que se carga el flujo de bits, la FPGA comienza a operar: los bits en los pestillos de configuración "le dicen" a cada pequeña pieza de la FPGA cómo operar.

EDITAR 24 de abril de 2012: Los flip-flops que mencioné no son para las tablas de búsqueda ni para la configuración de las mismas. Como dijo @ ajs410, esos están en RAM, que son incluso menos transistores. Los flip-flops son para almacenar los datos fuera de la LUT, si ese almacenamiento está habilitado.

¿Cuánto de los circuitos en un FPGA típico es lógica y enrutamiento reales, y cuánto es soporte de programación?
Técnicamente, las "celdas de memoria" son flip-flops, no pestillos. Es decir, se activan por el borde.
@BrianCarlton: ¿Realmente se usan chanclas para todas las celdas de almacenamiento de programas? Según tengo entendido, las chanclas necesitan algo del orden de 12-16 MOSFET por bit; por el contrario, otras técnicas totalmente estáticas para enclavar datos solo requieren de 5 a 8.
Un LUT generalmente está hecho de SRAM. Los flip flops están conectados a la salida de la SRAM.
@supercat: Escuché que el 90% de un FPGA es enrutamiento... el resto es lógica y configuración; aunque no puedo encontrar una referencia rápidamente :(

El término estándar es "configuración" y no "programación" para un FPGA. La FPGA suele ser un dispositivo basado en SRAM. Una SRAM almacena bits que indican qué conexiones se forman y se rompen dentro del "tejido lógico" del dispositivo. Cuando se produce la configuración, se envía un flujo de bits a la FPGA que escribe en esta SRAM. Cuando se apaga el FPGA basado en SRAM, los datos de SRAM se borran y cuando se enciende el FPGA, deberá configurarse nuevamente.

Ahora sepa esto, hay varios métodos para "configurar" y FPGA y, por lo tanto, existen diferentes formatos de archivos que contienen este "flujo de bits". Al final del día, la estructura de estos archivos y los detalles de la configuración precisa del FPGA son propiedad del fabricante y esta información nunca se comparte. Pero el principio general sigue siendo el mismo en todos los FPGA.