¿Qué sucede cuando se enciende una FPGA y se deja sin configurar?

Estoy tratando de obtener una comprensión general de lo que sucede si deja un FPGA sin programar durante un período prolongado de tiempo.

Suponga que tiene un FPGA y lo deja sin programar durante un largo período de tiempo (varios minutos u horas después del encendido), es decir, no tiene flujo de bits, ¿es esto malo para el dispositivo? ¿Se recomienda tener un flujo de bits en un FPGA encendido en todo momento? ¿Cuál es la opinión general al respecto?

¿Los resultados son diferentes en diferentes dispositivos o fabricantes (Xilinx, Altera y otros)?


Información adicional:

Tengo una placa SoC personalizada que utiliza un FPGA Xilinx Virtex-6. También tengo un Xilinx ML605 que uso como referencia.

Tablero personalizado: enciendo el tablero. Me doy cuenta de que tengo un período de tiempo corto para programarlo usando XMD (Xilinx Microprocessor Debugger). Si pierdo la ventana de 20-30 segundos, tengo que apagar y encender la placa antes de volver a intentarlo. Esto no sucede con un ML605.

Cuando trato de programar la placa personalizada sobre XMD, obtengo algo como:

Error: Device Reset by JPROGRAM command, failed. INIT_COMPLETE did not go high.

Déjame saber lo que piensas.

Usted enfatiza en su pregunta y en su edición el "largo período de tiempo". ¿Realmente importa si son unos segundos o unas pocas horas? no creo que lo haga..
Estoy viendo un fenómeno en una placa FPGA personalizada donde obtengo una ventana de programación de 20-30 segundos. Si no programo en esta ventana, no puedo programar con éxito. El tema central de mi pregunta no es la duración del tiempo sino lograr una comprensión del fenómeno.
¿Eres capaz de conectarte al dispositivo? ¿O simplemente falla cuando intentas programar? ¿Cuál es el error que da el programador?
¿Está programando el FPGA a través de JTAG directamente, o está cargando el chip Flash primero y luego dejando que el FPGA se configure a través de eso?
@fpga_boffin, ¿podría agregar esos detalles a su pregunta, por favor?
Los FPGA de Altera hacen que su pin esté triestablecido cuando se encienden. Solo salen de este estado cuando el dispositivo ha sido configurado.

Respuestas (3)

Esta es una pregunta interesante. Por experiencia personal, he dejado los FPGA encendidos durante horas en un estado no programado mientras realizaba comprobaciones en el resto de los circuitos cuando llegaba una placa nueva de la casa de ensamblaje. No he notado ningún efecto perjudicial al hacerlo. Pero, sinceramente, nunca lo había pensado.

Miré a mi alrededor para tratar de encontrar una recomendación de un fabricante de FPGA, pero no pude encontrar ninguna. La única declaración que encontré con respecto a este estado es de un documento técnico de Lattice y se refiere al diseño del FPGA en sí y no a cómo se debe usar:

El consumo de energía del dispositivo inactivo estático preprogramado es la cantidad de energía consumida por el FPGA antes de programar el dispositivo. Para el consumo de energía del dispositivo inactivo, la FPGA se encuentra en un estado no programado, pero ha recibido alimentación. Es importante que el dispositivo no consuma una cantidad significativa de energía durante este tiempo, ya que, conceptualmente, el dispositivo FPGA podría consumir demasiada energía y, potencialmente, apagar las fuentes de alimentación, lo que impediría que la placa se inicializara correctamente a sí misma y al sistema.
Por lo tanto, el proveedor de FPGA tiene que diseñar cuidadosamente transistores que tengan un bajo consumo de energía estática, sin comprometer las áreas donde se requiere un mayor rendimiento (por ejemplo, E/S y SERDES).

Xilinx también menciona cuál es la corriente de reposo para que pueda diseñar su fuente de alimentación en consecuencia. Pero no menciona cuál es el efecto en el dispositivo de dejarlo en tal estado:

La energía estática o de reposo está dominada principalmente por la corriente de fuga del transistor. Cuando esta corriente aparece en las hojas de datos, aparece como ICCINTQ y es la corriente extraída a través del suministro de VCCINT que alimenta el núcleo de la FPGA.

Me interesaría mucho saber si alguien ha sufrido daños en un dispositivo al dejarlo en estado de reposo. Pero creo que siempre que la fuente de alimentación coincida correctamente con el dispositivo, no debería haber ningún problema.

Estoy haciendo referencia a la hoja de datos de Spartan 3 , ya que es el FPGA con el que estoy más familiarizado.

Si observa el capítulo 2 (Descripción funcional), la sección "Configuración" tiene un par de diagramas de flujo. La Figura 27 (página 50) muestra el diagrama de flujo para cargar desde Flash. La Figura 28 muestra el diagrama de flujo JTAG.

He aquí un breve resumen.

1) Espere a que Vccint, Vccaux y Vcco alcancen los niveles requeridos.

2) Pestillos de configuración clara

3) Espere a que INIT_B suba. INIT_B es una salida de drenaje abierto que un maestro externo puede mantener baja para retrasar la configuración.

4) Pines del modo de muestra. Esto determina si va a cargar a través de JTAG o Flash, y si Flash, si el FPGA o Flash es el maestro.

5) Cargar tramas de datos de configuración.

6) Verifique que el CRC para las tramas de datos sea correcto. Si NO es correcto, la FPGA conducirá INIT_B bajo para indicar un error de CRC y cancelará el inicio.

El paso 5 es probablemente donde está su verdadera pregunta: ¿qué sucede si no hay nada desde donde cargar? Bueno, no deberías llegar al Paso 5 si estás haciendo las cosas bien. El chip Flash mantendrá INIT_B bajo hasta que esté listo para enviar datos a la FPGA. Si está utilizando JTAG, entonces no estoy seguro de si su programador JTAG mantendría INIT_B bajo, pero cuando fuera a programar el FPGA, casi con certeza afirmaría PROG_B (al hacerlo bajo), lo que hace que el FPGA retroceda. al paso 2.

Si yo fuera usted, examinaría la señal INIT_B durante el encendido para ver qué sucede. Si comienza bajo, sube alto y luego vuelve a bajar, el FPGA abortó la secuencia de inicio y probablemente necesitará afirmar PROG_B para restablecer el FPGA.

Su respuesta no dice nada sobre el estado interno del FPGA antes del paso 5, que es lo que OP quiere saber.
Paso 2. Borrar pestillos de configuración. Paso 3, esperando INIT_B. También analizo qué tipo de decisión puede estar tomando la FPGA cada vez que descubre que no hay datos de configuración para cargar (INIT_B baja para indicar un error de CRC).
Mis disculpas, la hoja de datos a la que hacía referencia era de alrededor de 2005 y se actualizó en 2009. Sin embargo, si hubiera leído mi comentario detenidamente, habría podido encontrarlo. Capítulo 2, Descripción funcional, bajo el encabezado Configuración. El enlace se ha actualizado para apuntar a la hoja de datos más reciente, así como a los nuevos números de página.

La configuración predeterminada está diseñada para ser lo más pasiva posible para que el dispositivo sea de uso universal.

Para la serie Altera Cyclone (con la que tengo más experiencia) esto significa

  • los pines de E/S se elevan débilmente a VCCIO (para mantener los circuitos integrados con líneas activas de habilitación de chip bajo fuera del bus),
  • la salida CONF_DONE se baja (puede conectar esto al pin de reinicio de otros circuitos integrados para mantenerlos reiniciados hasta que se haya cargado una configuración, así como restaurarlos al estado conocido al reconfigurarlos), y
  • las entradas de reloj no se reenvían a las redes de reloj.

Otros tipos de FPGA deben estar inactivos de manera similar y proporcionar salidas invertidas y no invertidas que indiquen el estado de configuración al resto de la placa.

Dejar el dispositivo en ese estado es inofensivo, ya que el núcleo está bastante aislado del mundo exterior y solo los pull-ups pueden tener una pequeña corriente a través de ellos.