Pouvez-vous réellement casser un FPGA en le programmant mal?

26

Pouvez-vous réellement casser un FPGA en le programmant incorrectement?

Je suis vraiment un logiciel. Ce n'est un secret pour personne que si votre logiciel est erroné, vous pourriez détruire toutes sortes de données importantes, et peut-être même planter toute la machine. Mais il est vraiment difficile d' endommager physiquement un ordinateur simplement en le programmant.

(Il y a une rumeur sans fin d'une instruction Halt-And-Catch-Fire, ou d'être capable de reflasher le firmware du système pour briquer la carte mère, ou de programmer des valeurs incorrectes dans la carte graphique pour faire frire votre moniteur. Mais tout cela semble être exactement cela : rumeurs. Et tout ce qui concerne le matériel obsolète depuis longtemps. Il semble vraiment très difficile de casser un équipement informatique moderne avec une mauvaise programmation.)

Avec un FPGA, vous connectez (au moins nominalement) des circuits individuels ensemble. Il semble tout à fait plausible que des dommages physiques puissent survenir en cas d'erreur.

Par exemple, vous pouvez écrire du VHDL demandant que deux sorties soient liées ensemble. S'ils produisent différents niveaux logiques, j'imagine que cela ferait probablement frire quelque chose. ( J'espère que votre outil de synthèse vous hurlera de ne pas le faire ... mais je ne sais pas si ces outils implémentent réellement ce niveau de vérification des erreurs.)

Il semble également tout à fait possible de choisir accidentellement le mauvais modèle de FPGA dans l'outil de synthèse, et donc d'essayer de programmer votre puce avec un train de bits destiné à un modèle totalement différent. Je ne sais pas ce que cela ferait, mais je pense que ce serait "mauvais".

Pour cette question, vous pouvez certainement connecter la puce FPGA au reste du circuit de manière incorrecte. Par exemple, si vous gâchez les numéros de broches, vous pourriez vous retrouver avec la carte essayant de piloter une broche d'E / S que le FPGA lui-même essaie également de piloter. Les broches d'E / S ont-elles généralement une "protection" contre une telle erreur? Ou la puce va-t-elle simplement frire?

MathematicalOrchid
la source
3
Certains FPGA ont des fonctionnalités de sécurité qui permettent uniquement de charger le flux binaire chiffré et signé à partir de la mémoire externe. Les clés sont conservées dans le FPGA et programmables une seule fois. Si vous activez une telle fonctionnalité par accident ou que vous perdez les clés, vous avez essentiellement un FPGA "maillé".
filo
2
"Mais il est vraiment difficile d'endommager physiquement un ordinateur simplement en le programmant." Tu penses? Il était une fois le pilote qui contrôlait les têtes des disques durs - ce qui signifie qu'un virus pourrait jouer joyeux anniversaire sur vos disques durs. Le BIOS contrôle les ventilateurs - lui permettant de causer des dommages par surchauffe (il peut y avoir une protection intégrée, mais si vous le chauffez assez rapidement, il ne peut pas être enregistré). Le BIOS peut même décider d'essayer de mettre 20V dans votre CPU ... Le logiciel peut très facilement être responsable d'endommager les ordinateurs si vous savez avec quel logiciel jouer.
UKMonkey
2
@UKMonkey youtube.com/watch?v=CsQd2n99zS4
Joshua
2
@UKMonkey Selon la configuration de votre système, je suis presque sûr que vous pouvez faire fondre n'importe quel processeur avec suffisamment d'effort. La plupart des ordinateurs - AFAIK, tout ce qui n'est pas purement passif - auront un moyen de contrôler le système de refroidissement. Vous pouvez désactiver la limitation thermique, une autre ligne de défense, via le BIOS, ce qui implique que cela peut être fait par programme par le noyau. Dans ce cas précis, cela devrait être intentionnel, mais c'est très certainement possible.
Fund Monica's Lawsuit

Réponses:

31

Il semble également tout à fait possible de choisir accidentellement le mauvais modèle de FPGA dans l'outil de synthèse, et donc d'essayer de programmer votre puce avec un train de bits destiné à un modèle totalement différent.

Généralement, le logiciel de programmation interroge la pièce en cours de programmation pour son numéro de pièce et refuse de programmer dans un flux binaire destiné à un modèle différent de FPGA.

La partie elle-même refusera généralement de démarrer si elle est programmée avec un train de bits qui n'est pas exactement de la bonne longueur (et il est très rare que les trains de bits pour différentes puces soient de la même longueur).

vous pourriez certainement connecter incorrectement la puce FPGA au reste du circuit. Par exemple, si vous gâchez les numéros de broches, vous pourriez vous retrouver avec la carte essayant de piloter une broche d'E / S que le FPGA lui-même essaie également de piloter.

C'est le moyen le plus probable d'endommager un FPGA avec une mauvaise programmation.

Une autre façon pourrait être de programmer une conception très gourmande en ressources et de l'exécuter à une fréquence élevée (de sorte qu'une puissance élevée soit consommée), puis de l'exécuter sur un FPGA sans dissipateur thermique adéquat.

Les broches d'E / S ont-elles généralement une "protection" contre une telle erreur? Ou la puce va-t-elle simplement frire?

Les broches de sortie survivent «souvent» à un court-circuit pendant quelques secondes, voire quelques minutes. Mais rien n'est garanti.

Le photon
la source
1
Intéressant. Est-il habituel que les FPGA aient besoin d'un refroidissement actif? Oh, je suppose que c'est une question à part entière. (Et je suppose que la réponse dépend de beaucoup de choses - comme si vous avez acheté un FPGA à 15 £ ou à 15 000 £!)
MathematicalOrchid
4
@MathematicalOrchid, Pas nécessairement un refroidissement actif, mais les dissipateurs thermiques et l'air forcé sont assez courants. Les fournisseurs de FPGA fournissent généralement une feuille de calcul très complexe pour aider à déterminer (en fonction de la pièce, de la conception, de la fréquence d'horloge, etc.) la taille d'un dissipateur thermique et la taille d'un ventilateur sont nécessaires.
The Photon
3
@MathematicalOrchid J'ai utilisé un FPGA comme compteur de fréquence pour mesurer des ondes carrées jusqu'à 250 MHz. Cela nécessitait un refroidissement car j'ai mesuré une horloge de 220 MHz, mais au lieu de configurer un refroidissement approprié, je me suis juste assuré de ne pas mesurer plus de 5 secondes. Il consommait 5 W à 220 MHz et le CI était d'environ 2 cm ^ 2. Il faisait très chaud très vite.
Harry Svensson
@HarrySvensson Cela semble être une quantité folle de chaleur pour un compteur de fréquence.
user253751
1
@HarrySvensson C'est toujours fou que cela prenne 5 watts.
user253751
20

À quelques exceptions près, les outils ne vous donnent généralement pas accès aux véritables primitives de silicium, il est donc difficile pour un ingénieur utilisateur final de charger une conception électriquement non valide * dans un FPGA basé sur SRAM, sauf peut-être en découvrant par inadvertance un outil punaise.

Les FPGA basés sur Flash pourraient théoriquement voir leur reprogrammation endommagée par certaines charges invalides. Les FPGA OTP sont implicitement «endommagés» même par une charge de configuration valide , car ils ne peuvent jamais être modifiés.

En fin de compte, ce qui se rapproche le plus de ce que vous semblez demander, et de votre exemple HCF, serait une configuration qui a produit intolérable une contrainte thermique . La consommation d'énergie est déterminée directement par la fréquence d'horloge et le volume * d'activité de la logique utilisée, donc si vous pouvez inciter les outils à basculer inutilement la plupart des bascules sur la puce à l'horloge maximale (il existe des moyens ...), alors vous pouvez produire un radiateur assez efficace qui dépasserait la plupart des systèmes de refroidissement pour un usage ordinaire. Ensuite, il s'agit simplement de savoir si quelque chose l'arrête de manière protectrice avant de cuire. Et bien sûr, il existe des modèles d'estimation de puissance dans les outils, qui sont probablement raisonnablement prédictifs si vous ne leur mentez pas sur le signal d'horloge fourni.

(* Il y a une classe intéressante de problèmes électriques sans bug que vous pouvez provoquer en mentant aux outils, qui n'est pas nécessairement destructrice physiquement, mais toujours surprenante. Si vous alimentez une horloge différente de celle que vous aviez dite ou simplement instable, vous pouvez violer la synchronisation de la configuration des adresses sur les cellules RAM de bloc synchrone, et faire quelque chose dans le sens de les court-circuiter et de corrompre leur contenu - vous pouvez par exemple voir le contenu de quelque chose désigné comme ROM dans la conception changer réellement au moment de l'exécution simplement en essayant de le lire avec une mauvaise horloge. Mais je ne pense pas que ce soit physiquement destructeur)

Chris Stratton
la source
2
Vous pouvez enchaîner chaque flop avec un onduleur entre les deux et générer beaucoup de chaleur. Certains FPGA ont-ils des circuits de protection pour moduler l'horloge s'ils deviennent trop chauds? L'arbre d'horloge est souvent hors de leur contrôle.
Ben Jackson
@BenJackson: L'arbre d'horloge n'est-il pas plus ou moins câblé, chaque élément logique pouvant sélectionner parmi plusieurs arbres différents? La source d'horloge elle-même peut être hors de leur contrôle, mais ils peuvent simplement désactiver les tampons d'arbre d'horloge si elle devient trop chaude. Ou je suppose qu'ils pourraient couper l'approvisionnement.
Michael
5

La chose la plus probable est de violer la cote actuelle des GPIO en entraînant une broche qui est déjà en cours de conduite. Certains FPGA ont des limites de courant réglables ou des pilotes de sortie modifiables, donc cela peut vous aider / vous blesser si vous ne faites pas votre carte de port correctement. Vous devez de toute façon vérifier votre liste de ports avant de programmer car des erreurs comme l'échange de broches peuvent prendre des heures à résoudre, il est préférable de devancer les erreurs et de savoir exactement ce que le micrologiciel était censé faire. (sauf si vous aimez le plaisir de trouver une erreur)

Les HDL en eux-mêmes ne vous permettent généralement pas de connecter deux sorties au même fil et cesseront de synthétiser et vous feront corriger votre erreur si vous avez du code qui le fait.

Un endroit qui pourrait causer des problèmes est les ports bidirectionnels, mais vous devriez avoir des résistances de limitation de courant sur ceux-ci.

Pic de tension
la source
Re « connectez deux sorties au même fil »: ne pouvez-vous pas connecter les sorties de deux tampons à trois états ensemble si vous promettez à l'outil de synthèse de ne jamais activer les deux en même temps? L'outil peut-il vérifier que vous tenez votre promesse même si la logique conduisant à l'activation des tampons est très compliquée?
Edgar Bonet
@EdgarBonet yup, vous pouvez provoquer des conflits de cette façon. Il n'est pas nécessaire de forcer logiquement la sortie pour pouvoir s'exclure mutuellement, si une logique (qui pourrait inclure une logique complète et / ou du matériel / logiciel externe au FPGA) provoque l'activation de deux OE conflictuels, rien ne peut l'arrêter à moins que le la logique des OE a été explicitement codée pour éviter cela.
Rodney
@EdgarBonet Vous pouvez, mais généralement trois fils d'état sont externes au FPGA car vous avez besoin d'un pilote / émetteur-récepteur et ceux-ci se trouvent sur les GPIO. Je n'ai jamais conçu avec trois états dans un FPGA et je ne pense pas que le matériel dans un FPGA supporte trois états. Vous pouvez activer deux tampons en même temps, la conception physique devrait vous empêcher de les brûler.
Voltage Spike
4

Comme avec les microcontrôleurs, vous pouvez toujours dépasser le courant total maximum par banque d'E / S en tirant un courant maximum (ou plus) de chaque broche. À moins que le FPGA n'ait une protection intégrée contre une telle situation, cela peut entraîner des dommages.

Une autre possibilité consiste à créer une boucle combinatoire qui devient périodiquement méta-stable ou oscille à une fréquence beaucoup plus élevée que la structure FPGA est conçue pour gérer (plusieurs GHz). Cela entraînera une surchauffe très localisée qui peut causer des dommages physiques avant que la protection thermique à l'échelle de la puce ne se déclenche. circuit très énergivore et laissez-le fonctionner avec un refroidissement insuffisant.

La reconfiguration dynamique peut également contourner les protections contre la configuration invalide des primitives internes qui peuvent être appliquées par les outils de développement en cas de configuration statique. Par exemple, vous pouvez configurer une PLL d'une manière qui dépasse sa fréquence interne maximale, ou alimenter la même ligne d'interconnexion par deux sources à la fois, ou forcer une broche d'une banque d'E / S haute tension à utiliser son émetteur-récepteur basse tension comme LVDS .

Dmitry Grigoryev
la source