¿Puedes realmente romper un FPGA programándolo mal?

26

¿Puedes realmente romper un FPGA programándolo incorrectamente?

Soy un chico de software realmente. No es ningún secreto que si su software está equivocado, podría destruir todo tipo de datos importantes y quizás incluso bloquear toda la máquina. Pero es realmente difícil dañar físicamente una computadora con solo programarla.

(Hay un sinfín de rumores de una instrucción de detener y encender fuego, o de poder volver a actualizar el firmware del sistema para bloquear la placa base, o programar valores incorrectos en la tarjeta gráfica para freír su monitor. Pero todo esto parece ser exactamente eso : rumores. Y todo sobre el hardware obsoleto desde hace mucho tiempo. Parece muy, muy difícil romper los equipos informáticos modernos con una mala programación).

Con un FPGA, está (al menos nominalmente) conectando circuitos individuales juntos. Parece completamente plausible que pueda producirse daño físico en caso de error.

Por ejemplo, podría escribir algunos VHDL solicitando que dos salidas se unan. Si producen diferentes niveles lógicos, imagino que probablemente freiría algo. ( Espero que su herramienta de síntesis le grite que no haga esto ... pero no sé si tales herramientas realmente implementan ese nivel de verificación de errores).

También parece bastante posible elegir accidentalmente el modelo incorrecto de FPGA en la herramienta de síntesis y, por lo tanto, terminar tratando de programar su chip con un flujo de bits destinado a un modelo totalmente diferente. No sé qué haría eso, pero sospecho que sería "malo".

Para el caso, definitivamente podría conectar el chip FPGA al resto del circuito de forma incorrecta. Por ejemplo, si confunde los números de pin, podría terminar con la placa tratando de manejar un pin de E / S que el propio FPGA también está tratando de manejar. ¿Los pines de E / S suelen tener alguna "protección" contra tal error? ¿O el chip simplemente se freirá?

Orquídea matemática
fuente
3
Algunos FPGA tienen características de seguridad que solo permiten cargar un flujo de bits cifrado y firmado desde la memoria externa. Las claves se guardan en el FPGA y se pueden programar solo una vez. Si habilita dicha característica por accidente o pierde las teclas, esencialmente tiene un FPGA "bloqueado".
filo
2
"Pero es realmente difícil dañar físicamente una computadora con solo programarla". ¿Eso crees? Érase una vez que el controlador controlaba los cabezales del disco duro, lo que significa que un virus podría reproducir un feliz cumpleaños en sus discos duros. El BIOS controla los ventiladores, lo que le permite causar daños por sobrecalentamiento (puede haber alguna protección incorporada, pero si la calienta lo suficientemente rápido, entonces no se puede guardar). El BIOS incluso puede decidir intentar poner 20V en su CPU ... El software puede ser muy fácilmente responsable de dañar las computadoras si sabe con qué software jugar.
UKMonkey
1
@JoL relacionados :) retrocomputing.stackexchange.com/questions/6614/…
UKMonkey
2
@UKMonkey youtube.com/watch?v=CsQd2n99zS4
Joshua
2
@ UKMonkey Dependiendo de cómo esté configurado su sistema, estoy bastante seguro de que puede derretir cualquier CPU con suficiente esfuerzo. La mayoría de las computadoras (AFAIK, cualquier cosa que no sea puramente pasiva) tendrán una forma de controlar el sistema de enfriamiento. Puede deshabilitar la limitación térmica, otra línea de defensa, a través del BIOS, lo que implica que el núcleo puede hacerlo mediante programación. En ese caso específico, tendría que ser intencional, pero definitivamente es posible.
Financia la demanda de Mónica el

Respuestas:

31

También parece bastante posible elegir accidentalmente el modelo incorrecto de FPGA en la herramienta de síntesis y, por lo tanto, terminar tratando de programar su chip con un flujo de bits destinado a un modelo totalmente diferente.

Normalmente, el software de programación consultará la parte que se está programando para su número de parte, y se negará a programar en un flujo de bits destinado a un modelo diferente de FPGA.

La parte en sí también generalmente se negará a iniciarse si se programa con un flujo de bits que no sea exactamente la longitud correcta (y es muy poco común que los flujos de bits para diferentes chips tengan la misma longitud).

definitivamente podría conectar el chip FPGA al resto del circuito incorrectamente. Por ejemplo, si confunde los números de pin, podría terminar con la placa tratando de manejar un pin de E / S que el propio FPGA también está tratando de manejar.

Esta es la forma más probable de dañar un FPGA con una programación incorrecta.

Otra forma podría ser programar un diseño muy intensivo en recursos y ejecutarlo a una frecuencia alta (para que se consuma una gran potencia), y luego ejecutarlo en un FPGA sin un disipador de calor adecuado.

¿Los pines de E / S suelen tener alguna "protección" contra tal error? ¿O el chip simplemente se freirá?

Los pines de salida "a menudo" sobrevivirán a una condición de cortocircuito durante unos segundos o incluso minutos. Pero nada está garantizado.

El fotón
fuente
1
Interesante. ¿Es habitual que los FPGA necesiten refrigeración activa? Oh, supongo que es una pregunta completa por derecho propio. (¡Y supongo que la respuesta depende de muchas cosas, como si compró un FPGA de £ 15 o £ 15,000!)
MathematicalOrchid
44
@MathematicalOrchid, no necesariamente enfriamiento activo, pero los disipadores térmicos y el aire forzado son bastante comunes. Los proveedores de FPGA generalmente proporcionan una hoja de cálculo muy compleja para ayudar a determinar (en función de la pieza, el diseño, la frecuencia del reloj, etc.) qué tan grande es un disipador de calor y qué tan grande se necesita un ventilador.
El fotón
3
@MathematicalOrchid He usado un FPGA como contador de frecuencia para medir ondas cuadradas de hasta 250 MHz. Se requirió enfriamiento mientras medía un reloj de 220 MHz, pero en lugar de configurar un enfriamiento adecuado, me aseguré de no medir más de 5 segundos. Consumió 5 W a 220Mhz y el IC fue de aproximadamente 2 cm ^ 2. Se puso muy caliente muy rápido.
Harry Svensson
@HarrySvensson Eso parece una gran cantidad de calor para un contador de frecuencia.
user253751
1
@HarrySvensson Todavía es una locura que eso tome 5 vatios.
user253751
20

Con algunas excepciones notables, las herramientas generalmente no le dan acceso a las primitivas de silicio reales, por lo que es difícil para un ingeniero de usuario final cargar un diseño eléctricamente inválido * en un FPGA basado en SRAM, excepto quizás descubriendo una herramienta inadvertidamente error.

Los FPGA basados ​​en flash posiblemente podrían tener su reprogramabilidad dañada por ciertas cargas no válidas. Los FPGA de OTP están "dañados" implícitamente incluso por una carga de configuración válida , ya que nunca se puede cambiar.

En última instancia, lo que más se acerca a lo que parece preguntar, y a su ejemplo de HCF, sería una configuración que produjera un estrés térmico intolerable . El consumo de energía es impulsado directamente por la velocidad del reloj y la actividad de volumen * de la lógica utilizada, por lo que si puede engañar a las herramientas para que cambien inútilmente la mayoría de las chanclas en el chip al reloj máximo (hay formas ...), entonces puede producir un calentador bastante efectivo que excedería la mayoría de los sistemas de enfriamiento para uso normal. Entonces es solo una pregunta si algo lo apaga protectoramente antes de cocinar. Y, por supuesto, hay modelos de estimación de potencia en las herramientas, que probablemente sean razonablemente predictivos si no les está mintiendo acerca de la señal de reloj proporcionada.

(* Hay una clase interesante de problema eléctrico que no es un error que puede causar mintiendo a las herramientas, que no es necesariamente destructivo físicamente, pero aún sorprendente. Si alimenta un reloj diferente al que dijo que lo haría o simplemente inestable, puede violar el tiempo de configuración de la dirección en las celdas RAM del bloque síncrono y hacer algo en el sentido de acortarlas y corromper su contenido, por lo que puede ver, por ejemplo, que el contenido de algo designado como ROM en el diseño realmente cambia en tiempo de ejecución simplemente intentando a leer con un mal día. Pero no creo que esto es físicamente destructiva)

Chris Stratton
fuente
2
Puede encadenar cada flop junto con un inversor en el medio y generar mucho calor. ¿Algún FPGA tiene circuitos de protección para modular el reloj si se calientan demasiado? El árbol del reloj a menudo está fuera de su control.
Ben Jackson
@BenJackson: ¿No es el árbol del reloj más o menos cableado, con cada elemento lógico capaz de seleccionar entre unos pocos árboles diferentes? La fuente del reloj en sí puede estar fuera de su control, pero podrían simplemente apagar los amortiguadores del árbol del reloj si hace demasiado calor. O supongo que podrían cortar el suministro.
Michael
5

Lo más probable es violar la clasificación actual en GPIO al conducir un pin que ya se está manejando. Algunos FPGA tienen límites de corriente configurables o controladores de salida modificables, por lo que esto puede ayudarlo / perjudicarlo si no realiza su mapa de puertos correctamente. De todos modos, debe verificar dos veces su lista de puertos antes de programar, ya que los errores como el intercambio de pines pueden tardar horas en resolverse, es mejor adelantarse a los errores y saber exactamente lo que el firmware estaba destinado a hacer. (a menos que te guste la emoción de encontrar un error)

Los HDL por sí solos generalmente no le permiten conectar dos salidas al mismo cable y dejarán de sintetizar y corregirán su error si tienen un código que lo haga.

Un lugar que podría causar problemas son los puertos bidireccionales, pero debe tener resistencias limitantes de corriente en esos.

Pico de voltaje
fuente
Vuelva a “ conectar dos salidas al mismo cable ”: ¿no puede conectar las salidas de dos memorias intermedias de tres estados si promete que la herramienta de síntesis nunca habilitará ambas al mismo tiempo? ¿Puede la herramienta comprobar que cumple su promesa incluso si la lógica que impulsa la "habilitación" de los buffers es muy complicada?
Edgar Bonet
@EdgarBonet, sí, puedes causar conflictos de esta manera. No hay ningún requisito para forzar lógicamente que las salidas de salida sean mutuamente excluyentes, si alguna lógica (que podría incluir lógica con estado y / o hardware / software externo al FPGA) hace que dos OEs en conflicto se activen, no hay nada que lo detenga a menos que el La lógica de los OE se ha codificado explícitamente para evitarlo.
Rodney
@EdgarBonet Puede, pero generalmente tres cables son externos al FPGA ya que necesita un controlador / transceptor y estos se encuentran en los GPIO. Nunca he diseñado con tres en un FPGA y no creo que el hardware en un FPGA sea compatible con tres estados. Puede encender dos buffers al mismo tiempo, el diseño físico debería evitar que se quemen.
Pico de voltaje
4

Al igual que con los microcontroladores, siempre puede exceder la corriente total máxima por banco de E / S extrayendo una corriente máxima (o más) de cada pin. A menos que el FPGA tenga protección incorporada contra tal situación, esto puede provocar daños.

Otra posibilidad es hacer un bucle combinatorio que periódicamente se vuelve metaestable u oscila a una frecuencia mucho más alta que la que está diseñada para manejar el tejido FPGA (varios GHz). Eso provocará un sobrecalentamiento muy localizado que puede causar daños físicos antes de que entre en funcionamiento la protección térmica de todo el chip. Es decir, suponiendo que exista tal protección: si la sobretemperatura no conduce al apagado, simplemente puede llegar a un circuito muy hambriento de energía y déjelo funcionar con enfriamiento insuficiente.

La reconfiguración dinámica también puede evitar protecciones contra configuraciones inválidas de primitivas internas que pueden ser aplicadas por las herramientas de desarrollo en caso de una configuración estática. Por ejemplo, puede configurar un PLL de una manera que exceda su frecuencia interna máxima, o alimentar la misma línea de interconexión por dos fuentes a la vez, o forzar un pin de un banco de E / S de alto voltaje para usar su transceptor de bajo voltaje como LVDS .

Dmitry Grigoryev
fuente