Un dispositif logique programmable (PLD) est un composant électronique utilisé pour construire des circuits numériques reconfigurables. Contrairement à une porte logique, qui a une fonction fixe, un PLD a une fonction indéfinie au moment de la fabrication. Avant que le PLD puisse être utilisé dans un circuit, il doit être programmé, c'est-à-dire reconfiguré.
Avant l'invention des PLD, les mémoires mortes (ROM) étaient utilisées pour créer des fonctions logiques combinatoires arbitraires d'un certain nombre d'entrées. Considérons une ROM avec m entrées (lignes d'adresse) et n sorties (lignes de données). Lorsqu'elle est utilisée comme mémoire, la ROM contient 2m mots de n bits chacun.
Imaginez maintenant que les entrées ne sont pas pilotées par une adresse de m bits, mais par m signaux logiques indépendants. Théoriquement, il existe 22m fonctions booléennes possibles de ces m signaux d'entrée. Par fonction booléenne dans ce contexte, on entend une fonction unique qui associe chacune des 2m combinaisons possibles des m entrées booléennes à une sortie booléenne unique. Il existe 22m façons distinctes possibles de mapper chaque combinaison des 2m entrées à une valeur booléenne, ce qui explique pourquoi il existe 22m fonctions booléennes de m entrées.
Considérons maintenant que chacune des n broches de sortie agit, indépendamment, comme un dispositif logique spécialement sélectionné pour échantillonner une seule des 22m fonctions possibles. À un instant donné, une seule des 2m valeurs d'entrée possibles peut être présente sur la ROM, mais au fil du temps, à mesure que les valeurs d'entrée parcourent tout leur domaine possible, chaque broche de sortie représentera sa fonction particulière des 2m valeurs d'entrée possibles, parmi les 22m fonctions possibles. Notons que la structure de la ROM ne permet de produire que n des 22m fonctions booléennes possibles sur les broches de sortie. La ROM devient donc équivalente à n circuits logiques distincts, chacun générant une fonction choisie des m entrées.
L'avantage d'utiliser une ROM de cette manière est que toute fonction concevable de toutes les combinaisons possibles des m entrées peut être obtenue sur n'importe laquelle des n sorties, ce qui en fait le dispositif logique combinatoire le plus polyvalent disponible pour m broches d'entrée et n broches de sortie.
De plus, des PROM (ROM programmables), EPROM (PROM effaçables par ultraviolets) et EEPROM (PROM électriquement effaçables) sont disponibles et peuvent être programmées à l'aide d'un programmateur PROM standard sans nécessiter de matériel ou logiciel spécialisé. Cependant, il y a plusieurs inconvénients :
elles sont généralement beaucoup plus lentes que les circuits logiques dédiés,
elles ne peuvent pas nécessairement fournir des "couvre-feu" sûrs pour les transitions logiques asynchrones, de sorte que les sorties de la PROM peuvent présenter des parasites (glitch) lors de la commutation des entrées,
elles consomment plus d'énergie,
elles sont souvent plus chères que la logique programmable, surtout si une vitesse élevée est requise.
Étant donné que la plupart des ROM ne disposent pas de registres d'entrée ou de sortie, elles ne peuvent pas être utilisées seules pour la logique séquentielle. Un registre TTL externe était souvent utilisé pour les conceptions séquentielles telles que les machines d'état. Les EPROM courantes, par exemple la 2716, sont encore parfois utilisées de cette manière par les concepteurs de circuits amateurs, qui en ont souvent quelques-unes sous la main. Cette utilisation est parfois appelée "PAL du pauvre".
Première logique programmable [modifier] En 1969, Motorola a proposé le XC157, un réseau de portes masquées programmables avec 12 portes et 30 broches d'entrée/sortie non connectées [1].
En 1970, Texas Instruments a développé un CI programmable par masque basé sur la mémoire associative en lecture seule (ROAM) d'IBM. Ce dispositif, le TMS2000, était programmé en modifiant la couche métallique lors de la production du CI. Le TMS2000 disposait de jusqu'à 17 entrées et 18 sorties avec 8 bascules JK pour la mémoire. TI a inventé le terme "Programmable Logic Array" pour ce dispositif [2].
En 1971, General Electric Company (GE) développait un dispositif logique programmable basé sur la nouvelle technologie PROM. Ce dispositif expérimental améliorait le ROAM d'IBM en permettant une logique à plusieurs niveaux. Intel venait d'introduire la PROM à grille flottante effaçable par UV, et le chercheur de GE a intégré cette technologie. Le dispositif GE a été le premier PLD effaçable jamais développé, précédant l'EPLD d'Altera de plus d'une décennie. GE a obtenu plusieurs brevets précoces sur les dispositifs logiques programmables [3][4][5].
En 1973, National Semiconductor a introduit un dispositif PLA programmable par masque (DM7575) avec 14 entrées et 8 sorties sans registres de mémoire. Il était plus populaire que la pièce de TI, mais le coût de fabrication du masque métallique limitait son utilisation. Ce dispositif est significatif car il a servi de base au réseau de logique programmable de Signetics en 1975, le 82S100. (Intersil a en fait devancé Signetics sur le marché, mais un faible rendement a condamné leur pièce.) [6][7]
En 1974, GE a conclu un accord avec Monolithic Memories pour développer un dispositif logique programmable par masque incorporant les innovations de GE. Le dispositif a été nommé "Programmable Associative Logic Array" ou PALA. Le MMI 5760 a été achevé en 1976 et pouvait mettre en œuvre des circuits multiniveaux ou séquentiels de plus de 100 portes. Le dispositif était soutenu par un environnement de conception GE où les équations booléennes étaient converties en motifs de masque pour configurer le dispositif. La pièce n'a jamais été commercialisée [8].
PLA [modifier] Article principal : Programmable Logic Array
En 1970, Texas Instruments a développé un CI programmable par masque basé sur le ROAM d'IBM. Ce dispositif, le TMS2000, était programmé en modifiant la couche métallique lors de la production. Le TMS2000 avait jusqu'à 17 entrées et 18 sorties avec 8 bascules JK pour la mémoire. TI a inventé le terme "Programmable Logic Array" pour ce dispositif [2].
Un réseau logique programmable (PLA) possède une matrice programmable de portes ET, qui se connecte à une matrice programmable de portes OU, laquelle peut ensuite être complémentée conditionnellement pour produire une sortie.
PAL [modifier] Article principal : Programmable array logic
Les dispositifs PAL comportent des matrices de cellules à transistors organisées en un plan "OU fixe, ET programmable" utilisé pour implémenter des équations logiques binaires "somme de produits" pour chacune des sorties en fonction des entrées et d'une rétroaction synchrone ou asynchrone des sorties.
MMI a introduit un dispositif révolutionnaire en 1978, le Programmable Array Logic ou PAL. L'architecture était plus simple que celle du FPLA de Signetics car elle supprimait le réseau OU programmable. Cela rendait les pièces plus rapides, plus petites et moins chères. Elles étaient disponibles dans des boîtiers DIP de 20 broches 300 mil, tandis que les FPLA étaient en boîtiers de 28 broches 600 mil. Le PAL Handbook a démocratisé le processus de conception. Le logiciel de conception PALASM (PAL Assembler) convertissait les équations booléennes des ingénieurs en motif de fusibles nécessaire pour programmer la pièce. Les dispositifs PAL ont été rapidement produits par National Semiconductor, Texas Instruments et AMD.
Après le succès de MMI avec les pièces PAL à 20 broches, AMD a introduit le PAL 22V10 à 24 broches avec des fonctionnalités supplémentaires. Après le rachat de MMI (1987), AMD a scindé une opération consolidée sous le nom de Vantis, et cette activité a été acquise par Lattice Semiconductor en 1999.
GAL [modifier] Article principal : Generic array logic
Lattice GAL 16V8 et 20V8Une innovation du PAL a été le dispositif de réseau logique générique, ou GAL, inventé par Lattice Semiconductor en 1985. Ce dispositif a les mêmes propriétés logiques que le PAL mais peut être effacé et reprogrammé. Le GAL est très utile dans la phase de prototypage d'une conception, lorsque les bogues de logique peuvent être corrigés par reprogrammation. Les GAL sont programmés et reprogrammés à l'aide d'un programmateur PAL, ou en utilisant la technique de programmation en circuit sur des puces de support.
Les GAL de Lattice combinent la technologie CMOS et la technologie de grille flottante électriquement effaçable (E2) pour un dispositif logique rapide et de faible puissance.
Un dispositif similaire appelé PEEL (Programmable Electrically Erasable Logic) a été introduit par la société International CMOS Technology (ICT).
CPLD [modifier] Article principal : Complex programmable logic device
Les PAL et GAL ne sont disponibles qu'en petites tailles, équivalant à quelques centaines de portes logiques. Pour les circuits logiques plus grands, des PLD complexes ou CPLD peuvent être utilisés. Ceux-ci contiennent l'équivalent de plusieurs PAL reliés par des interconnexions programmables, le tout dans un seul circuit intégré. Les CPLD peuvent remplacer des milliers, voire des centaines de milliers, de portes logiques.
Certains CPLD sont programmés à l'aide d'un programmateur PAL, mais cette méthode devient peu pratique pour les dispositifs ayant des centaines de broches. Une deuxième méthode de programmation consiste à souder le dispositif sur sa carte de circuit imprimé, puis à le alimenter avec un flux de données série provenant d'un ordinateur personnel. Le CPLD contient un circuit qui décode le flux de données et configure le CPLD pour réaliser sa fonction logique spécifiée.
FPGA [modifier] Article principal : Field-programmable gate array
Pendant que les PAL se développaient en GAL et CPLD (tous discutés ci-dessus), une autre filière de développement se produisait. Ce type de dispositif est basé sur la technologie des réseaux de portes et est appelé réseau de portes programmables (FPGA). Les premiers exemples de FPGA sont le réseau 82s100 et le séquenceur 82S105 de Signetics, introduits à la fin des années 1970. Le 82S100 était un réseau de termes ET. Le 82S105 avait également des fonctions de bascule.
Les FPGA utilisent une grille de portes logiques, et une fois stockée, les données ne changent pas, semblable à un réseau de portes ordinaire. Le terme "field-programmable" signifie que le dispositif est programmé par le client, et non par le fabricant.
Les FPGA sont généralement programmés après avoir été soudés sur la carte de circuit imprimé, d'une manière similaire à celle des CPLD plus grands. Dans la plupart des grands FPGA, la configuration est volatile et doit être rechargée dans le dispositif à chaque mise sous tension ou lorsque des fonctionnalités différentes sont requises. La configuration est généralement stockée dans une PROM de configuration ou une EEPROM. Les versions EEPROM peuvent être programmables en circuit (généralement via JTAG).
La différence entre les FPGA et les CPLD est que les FPGA sont basés en interne sur des tables de correspondance (LUT) tandis que les CPLD forment les fonctions logiques avec des "sea-of-gates" (par exemple, somme de produits). Les CPLD sont destinés à des conceptions plus simples tandis que les FPGA sont destinés à des conceptions plus complexes. En général, les CPLD sont un bon choix pour les applications logiques combinatoires étendues, tandis que les FPGA sont plus adaptés aux grandes machines d'état (c'est-à-dire les microprocesseurs).
Autres variantes [modifier] Actuellement, les systèmes reconfigurables suscitent un grand intérêt. Ce sont des circuits microprocesseurs qui contiennent certaines fonctions fixes et d'autres fonctions qui peuvent être modifiées par le code exécuté sur le processeur. La conception de systèmes auto-modifiables oblige les ingénieurs à apprendre de nouvelles méthodes et de nouveaux outils logiciels à développer.
Des PLD sont maintenant commercialisés qui contiennent un microprocesseur avec une fonction fixe (le soi-disant noyau) entouré de logique programmable. Ces dispositifs permettent aux concepteurs de se concentrer sur l'ajout de nouvelles fonctionnalités aux conceptions sans avoir à se soucier du fonctionnement du microprocesseur.
Comment les PLD conservent leur configuration [modifier] Un PLD est une combinaison d'un dispositif logique et d'un dispositif de mémoire. La mémoire est utilisée pour stocker le motif qui a été donné à la puce lors de la programmation. La plupart des méthodes de stockage de données dans un circuit intégré ont été adaptées pour une utilisation dans les PLD. Celles-ci comprennent :
Antifusibles en silicium
SRAM
Cellules EPROM ou EEPROM
Mémoire flash
Les antifusibles en silicium sont des connexions établies en appliquant une tension à travers une zone modifiée de silicium à l'intérieur de la puce. Ils sont appelés antifusibles car ils fonctionnent de manière opposée aux fusibles normaux, qui commencent leur vie en tant que connexions jusqu'à ce qu'ils soient cassés par un courant électrique.
La SRAM, ou RAM statique, est un type de mémoire volatile, ce qui signifie que son contenu est perdu à chaque extinction. Les PLD basés sur SRAM doivent donc être programmés chaque fois que le circuit est mis sous tension. Cela est généralement effectué automatiquement par une autre partie du circuit.
Une cellule EPROM fib聚焦离子束多少钱 est un transistor MOS (métal-oxyde-semiconducteur) qui peut être activé en piégeant une charge électrique de manière permanente sur son électrode de grille. Cela est fait par un programmateur PAL. La charge reste pendant de nombreuses années et ne peut être retirée qu'en exposant la puce à une forte lumière ultraviolette dans un dispositif appelé effaceur d'EPROM.
La mémoire flash est non volatile, conservant son contenu même lorsque l'alimentation est coupée. Elle peut être effacée et reprogrammée selon les besoins. Cela la rend utile pour la mémoire PLD.
En 2005, la plupart des CPLD sont électriquement programmables et effaçables, et non volatils. Cela est dû au fait qu'ils sont trop petits pour justifier l'inconvénient de programmer des cellules SRAM internes à chaque démarrage, et les cellules EPROM sont plus chères en raison de leur boîtier céramique avec une fenêtre en quartz.
Langages de programmation PLD [modifier] De nombreux dispositifs de programmation PAL acceptent des entrées dans un format de fichier standard, communément appelé "fichiers JEDEC". Ils sont analogues aux compilateurs logiciels. Les langages utilisés comme code source pour les compilateurs logiques sont appelés langages de description de matériel, ou HDL.
PALASM, ABEL et CUPL sont fréquemment utilisés pour les dispositifs de faible complexité, tandis que Verilog et VHDL sont des langages de description de plus haut niveau populaires pour les dispositifs plus complexes. Le plus limité ABEL est souvent utilisé pour des raisons historiques, mais pour les nouvelles conceptions, VHDL est plus populaire, même pour les conceptions de faible complexité.
Pour les langages de programmation PLD modernes, les flots de conception et les outils, voir FPGA et Calcul reconfigurable.
Dispositifs de programmation PLD [modifier] Un programmateur de dispositifs est utilisé pour transférer le motif logique booléen dans le dispositif programmable. Aux débuts de la logique programmable, chaque fabricant de PLD produisait également un programmateur de dispositifs spécialisé pour sa famille de dispositifs logiques. Plus tard, des programmateurs universels sont arrivés sur le marché qui prenaient en charge plusieurs familles de dispositifs logiques de différents fabricants. Les programmateurs d'aujourd'hui peuvent généralement programmer les PLD courants (principalement des équivalents PAL/GAL) de tous les fabricants existants. Les formats de fichiers courants utilisés pour stocker le motif logique booléen (fusibles) sont JEDEC, Altera POF (Programmable Object File), ou Xilinx BITstream.
Bien que les PLD aient été initialement conçus pour la logique reconfigurable, leurs aspects sécuritaires sont devenus de plus en plus importants. De nombreux systèmes modernes utilisent un microcontrôleur (MCU) aux côtés des PLD pour gérer des opérations sensibles, et les données de configuration stockées dans la mémoire interne du PLD sont souvent aussi précieuses que le firmware lui-même. La rétro-ingénierie des configurations PLD est devenue un domaine spécialisé, où les attaquants tentent de lire (read-out) la carte des fusibles ou le bitstream qui définit la fonction logique. Dans certains cas, la mémoire de configuration (qu'il s'agisse d'EEPROM, de flash ou de SRAM) peut être vidée (dump) et analysée pour dupliquer l'intégralité de la conception. Cela est particulièrement critique lorsque le PLD contient des algorithmes propriétaires ou des clés de sécurité qui protègent l'ensemble du système. Le mécanisme de verrouillage (lockbit), s'il est présent, est destiné à empêcher la lecture non autorisée de la configuration, mais il n'est pas toujours infaillible. Les attaquants ont utilisé des techniques de décapsulation pour exposer la puce, puis sonder les fusibles internes pour déverrouiller (unlock) le dispositif. Une fois déverrouillé, une extraction complète du firmware (firmware extraction) de la configuration du PLD devient possible, permettant aux concurrents de cloner le produit. La récupération (recovery) de configuration de PLD obsolètes est un besoin légitime, mais les mêmes méthodes peuvent être abusées pour une duplication malveillante. Dans le domaine des CPLD et FPGA, le bitstream est souvent stocké dans une EEPROM externe, qui peut être interceptée et dupliquée si la communication n'est pas chiffrée. Certains fournisseurs ont implémenté une fonction de verrouillage qui lie la configuration à un ID de dispositif spécifique, mais cela peut être contourné par une rétro-ingénierie avancée. L'utilisation historique de cellules EPROM avec effacement par UV les rendait vulnérables aux attaques optiques, similaires aux portes dérobées trouvées dans les premiers microcontrôleurs. Les PLD modernes à base de flash ont une meilleure protection, mais ils restent sensibles aux attaques par canaux auxiliaires qui divulguent des informations sur les états des fusibles. L'objectif ultime de tout effort de rétro-ingénierie est d'obtenir une lecture complète (read-out) du motif logique, qui peut ensuite être simulé ou reprogrammé dans un dispositif vierge. Ce processus est analogue à l'opération de vidage flash (dump flash) sur un microcontrôleur, où toute la mémoire de code est extraite. Dans de nombreux systèmes embarqués, le PLD fonctionne en tandem avec le MCU, et les deux doivent être sécurisés pour éviter une compromission complète du système. Un seul point faible, comme une broche de configuration non protégée, peut permettre à un attaquant de lire les registres internes du PLD. Les fusibles de sécurité (security fuses) d'un PLD sont généralement programmés une fois, mais s'ils ne sont pas entièrement vérifiés, ils peuvent rester dans un état autorisant une modification ultérieure. Certains ingénieurs ont accidentellement laissé des modes de test activés, ce qui permet une lecture facile de la configuration via JTAG. C'est pourquoi des tests approfondis et une vérification finale des fusibles sont essentiels dans le flux de production. En cas de perte de mot de passe ou de configuration corrompue, les utilisateurs légitimes peuvent avoir besoin d'effectuer une procédure de récupération, mais cela nécessite souvent des codes d'accès spéciaux ou une intervention physique. Le défi est d'équilibrer la facilité de récupération avec la protection contre la duplication non autorisée. De nombreuses organisations exigent désormais que leurs conceptions PLD soient chiffrées avant d'être stockées dans une mémoire externe, de sorte que même si le bitstream est intercepté, il ne peut pas être utilisé directement. Cependant, la clé de chiffrement elle-même doit être stockée de manière sécurisée, souvent dans une EEPROM séparée ou une RAM sauvegardée par batterie. Le verrou (lockbit) dans le PLD peut contrôler l'accès à la fonctionnalité de relecture, mais si le dispositif est décapsulé, un attaquant peut mesurer directement les états des antifusibles. La décapsulation est une technique invasive qui détruit le boîtier, mais elle offre une visibilité inégalée sur la structure interne. Une fois la puce exposée, les fusibles de configuration peuvent être détectés optiquement ou électriquement, permettant une rétro-ingénierie complète de la logique. Ce niveau d'attaque est coûteux mais réalisable pour une propriété intellectuelle de grande valeur. Par conséquent, les concepteurs se tournent vers les FPGA basés sur SRAM qui chargent leur configuration à partir d'une source externe à chaque mise sous tension, car ils ne contiennent aucun état de fusible permanent à lire. Cependant, cela introduit une autre vulnérabilité : le flux de configuration peut être espionné lors du démarrage. Pour contrer cela, certains FPGA utilisent un moteur de déchiffrement intégré qui nécessite une clé sauvegardée par batterie, effacée en cas de détection de sabotage. Ces techniques sont empruntées au domaine des microcontrôleurs sécurisés, où les verrous (lockbits) et le chiffrement sont des pratiques standard. L'évolution constante des technologies PLD et des méthodes d'attaque garantit que la sécurité reste une cible mouvante. Pour les amateurs, la capacité de dupliquer une conception simple PAL ou GAL à partir d'un fichier JEDEC connu est un exercice courant. Mais pour les produits commerciaux, les enjeux sont bien plus élevés, et toute brèche peut entraîner des pertes financières importantes. Les leçons tirées de la rétro-ingénierie des anciens PLD ont éclairé la conception des dispositifs plus robustes d'aujourd'hui. En résumé, bien que les PLD offrent une grande flexibilité, leur configuration doit être sauvegardée avec la même rigueur que le firmware du MCU. L'intégration des PLD avec les microcontrôleurs crée une plate-forme puissante, mais élargit également la surface d'attaque. Par conséquent, les architectes système doivent considérer à la fois la sécurité logique et physique de chaque élément programmable. Des audits de sécurité réguliers, y compris des tentatives de lecture de la configuration en utilisant à la fois des méthodes logicielles et matérielles, sont essentiels. Le domaine de la sécurité des PLD continue d'évoluer et nous pouvons nous attendre à voir des protections encore plus fortes dans les générations futures.
Il est à noter que les fusibles de configuration dans de nombreux CPLD sont implémentés sous forme de transistors à grille flottante, similaires aux cellules EEPROM. Ces cellules peuvent être effacées par la lumière UV si le boîtier est fenêtré, c'est pourquoi les versions fenêtrées sont désormais rares. Cependant, même dans les boîtiers opaques, un attaquant motivé peut effectuer une décapsulation pour retirer le composé de moulage, puis utiliser une lampe UV pour réinitialiser les fusibles. Cela est identique à l'attaque sur le PIC16C84 et d'autres premiers microcontrôleurs. Une fois les fusibles effacés, le dispositif devient effectivement déverrouillé, et une lecture complète de la logique interne est possible. Cette vulnérabilité était bien connue dans les années 1990, et elle a incité l'industrie à adopter de meilleures couches de passivation et des revêtements anti-sabotage. Les PLD d'aujourd'hui incluent souvent un blindage métallique au-dessus de la zone des fusibles pour bloquer les UV et les sondages optiques. De plus, certains dispositifs intègrent des capteurs qui détectent les tentatives de décapsulation et effacent immédiatement la configuration. Ces défenses actives sont similaires à celles que l'on trouve dans les microcontrôleurs haute sécurité. Le coût d'une telle protection est justifié pour les applications militaires, aérospatiales et financières. Pour les usages moins critiques, des verrous standard peuvent suffire, mais il est important de comprendre leurs limites. Dans tous les cas, le principe fondamental s'applique : si l'attaquant a un accès physique et des ressources suffisantes, le verrou peut éventuellement être contourné. Par conséquent, la meilleure stratégie est de supposer que la configuration sera éventuellement extraite et de concevoir le système en conséquence. Cela peut inclure une authentification à distance, une obfuscation du code en cours d'exécution, ou une rotation périodique des clés. La communauté de la rétro-ingénierie a publié de nombreuses études de cas d'attaques réussies sur des PLD, qui servent de ressources éducatives précieuses. En les étudiant, les ingénieurs peuvent apprendre à éviter les pièges courants. L'interaction entre la sécurité matérielle et logicielle est complexe, mais elle est essentielle pour construire des systèmes dignes de confiance. À mesure que les PLD deviennent plus capables et omniprésents, leur protection restera une priorité absolue pour les fournisseurs comme pour les utilisateurs.