Un circuit logique programmable ou PLD (Programmable Logical Device), est un circuit intégré logique qui peut être programmé après sa fabrication.

Il se compose de nombreuses cellules logiques élémentaires contenant des bascules logiques librement connectables. L'utilisateur doit donc programmer le circuit avant de l'utiliser. Les différentes logiques de programmation (unique, reprogrammable) et d'architecture ont conduit à la création de sous-familles dont les plus connues sont les FPGA et les CPLD.

Les premiers brevets pour de tels composants datent des années 1980 à 1990 mais c'est au début des années 1990 qu'ils se sont généralisés.

Note : La notion de programmation des PLD revient à définir une table de connexion et d'interconnexion des portes logiques. Ce n'est donc pas une programmation algorithmique ( une série d'instructions faite pour tourner sur un processeur) mais une programmation matérielle.

Historique et principe Dans les années 1970, le besoin de circuits intégrant des portes logiques (logical device) programmables pour s'adapter à différents développements a émergé. La première technologie de PLD du marché a été développée dans les années 1970 par la société MMI qui sera intégrée à AMD. Elle développe un circuit intégré qui rassemble des portes logiques « précâblées ». Lorsque l'utilisateur reçoit son circuit intégré vierge, chaque entrée d'une porte est reliée à toutes les entrées du circuit intégré via une grille de connexion. Le programmeur va supprimer les connexions inutiles en les faisant littéralement fondre. Ne resteront que les connexions qui réalisent la fonction logique désirée. Cette technologie est appelée « grille de portes logiques programmables » () ou plus simplement « PAL ».

Cette technologie a grandement évolué depuis vers les CPLD et de nos jours, ce sont les FPGA qui sont de plus en plus populaires grâce à leur compromis souplesse / prix / efficacité.

PAL Un PAL.. ne contient que 3 modules (le tout formant une « cellule ») : un module d'entrée qui peut recevoir des bascules (comme le module de sortie) et avec une option pour inverser les entrées logiques via une porte NON ; un module « logique » contenant des portes ET et OU. C'est dans ce module que l'on retrouve la grille d'interconnexion ; un module de sortie alimenté par le module logique. Les sorties du PAL sont directement connectées à ce module. Mais ce module de sortie peut aussi être utilisé comme entrée du module logique (rebouclage), via 3 sous-technologies : connexion directe, via une logique combinatoire dont la succession des portes peut être de l'un des 3 types suivants : H (high) : ET⇒ OU (sortie active à l'état haut), L (low) : ET ⇒ OU ⇒ NON (sortie active à l'état bas), C choix du type L ou H programmable ; séquentielle (à registre) où la connexion est réalisée via une bascule couplée à une horloge. Cette connexion peut être de 3 types : synchrone (R), avec potentiellement un ou exclusif (X) ou asynchrone (RA), versatile (où le routage est réalisé par un registre programmable), on parle alors de VPAL.

La technologie PAL a ensuite évolué avec les : GAL (, circuit logique reprogrammable), équivalent au PAL, mais reprogrammable (réversibilité des fusibles) soit par exposition aux UV ou électriquement ; EPLD (, circuit logique programmable et effaçable), circuit intégré regroupant des centaines voire des milliers de GAL ; CPLD (, circuit logique programmable complexe), équivalent aux ELPD, mais dont la programmation et l'interconnexion des cellules (uniquement constituées de portes logiques) sont plus complexes. C'est là l'aboutissement actuel de la technologie PAL.

CPLD Les CPLD. (issus de la technologie PAL) ont : pour principaux avantages : un temps de traitement borné, c'est-à-dire une forte prédictibilité du temps de traitement, indépendamment de la programmation effectuée (ce qui peut être essentiel lorsqu'on est amené à synchroniser plusieurs systèmes), une robustesse de la programmation (enregistrée sur une EEPROM, elle est non volatile), une fois programmée, le CPLD est instantanément opérationnel à sa mise en marche, la gestion d'entrées et sorties (I/O) potentiellement très nombreuses, une faible consommation ; pour principaux inconvénients : un nombre de cellules assez limité (de l'ordre du millier), des difficultés à effectuer des traitements complexes, l'utilisation des ressources n'est pas optimale (tout terme non utilisé dans une équation logique équivaut à des portes perdues), avec des taux d'utilisation d'environ 25 %.

FPGA Pour pallier les défauts des CPLD., les FPGA (, réseau de portes programmables ) ont été développés dans les années 1980. Dans l'esprit, ce sont : des « CPLD » où les cellules peuvent contenir : des portes logiques librement interconnectables entre elles, des fonctions élémentaires (bascules flip-flop, LUT, Multiplexeurs, boucles à verrouillage de phase), des fonctions de traitement « précâblées » (DSP, protocoles de communication comme le PCIe, voire des fonctionnalités de microprocesseurs, de mémoire), néanmoins, l'architecture et la conception interne des FPGA diffèrent radicalement de celles des CPLD) ; des puces où la performance est un point important, aussi les vitesses de traitement des FPGA (bande passante) surclassent les CPLD. Ceci est notamment dû à l'utilisation de SRAM à la place d'EEPROM comme mémoire interne) ; la technologie des FPGA fait que leur programmation est volatile et doit donc être stockée dans une ROM ou mémoire flash. Un FPGA doit donc charger son programme à chaque mise en route. Les dernières puces intègrent désormais une ROM qui garde en mémoire le programme à lancer à chaque démarrage.

Architecture des FPGA

La plupart des grands FPGA modernes sont fondés sur des cellules SRAM aussi bien pour le routage du circuit que pour les blocs logiques à interconnecter.

Un bloc logique est de manière générale constitué d'une table de correspondance (LUT ou ) et d'une bascule ( en anglais). La LUT sert à implémenter des équations logiques ayant généralement 4 à et une sortie. Elle peut toutefois être considérée comme une petite mémoire, un multiplexeur ou un registre à décalage. Le registre permet de mémoriser un état (machine séquentielle) ou de synchroniser un signal ().

Les blocs logiques, présents en grand nombre sur la puce (de quelques milliers à quelques millions en 2007) sont connectés entre eux par une matrice de routage configurable. Ceci permet la reconfiguration à volonté du composant, mais occupe une place importante sur le silicium et justifie le coût élevé des composants FPGA. La topologie est dite « Manhattan », en référence aux rues à angle droit de ce quartier de New York.

Les densités actuelles ne permettent plus un routage manuel, c'est donc un outil de placement-routage automatique qui fait correspondre le schéma logique voulu par le concepteur et les ressources matérielles de la puce. Comme les temps de propagation dépendent de la longueur des liaisons entre cellules logiques, et que les algorithmes d'optimisation des placeurs-routeurs ne sont pas déterministes, les performances (fréquence max.) obtenues dans un FPGA sont variables d'un design à l'autre. L'utilisation des ressources est par contre très bonne, et des taux d'occupation des blocs logiques supérieures à 90 % sont possibles.

Comme la configuration (routage et LUT) est faite par des points de mémoire volatile, il est nécessaire de sauvegarder le design du FPGA dans une mémoire non volatile externe, généralement une mémoire flash série, compatible « JTAG ». Certains fabricants se distinguent toutefois par l'utilisation de cellules EEPROM pour la configuration, éliminant le recours à une mémoire externe, ou par une configuration par anti-fusibles (la programmation par une tension élevée fait « claquer » un diélectrique, créant un contact). Cette dernière technologie n'est toutefois pas reconfigurable.

Quelques fonctionnalités particulières disponibles sur certains composants : blocs de mémoire supplémentaires (hors des LUT), souvent double-port, parfois avec mécanisme de FIFO ; multiplieurs câblés (coûteux à implémenter en LUT), voire blocs multiplieur-accumulateur pour traitements DSP ; cœur de microprocesseur enfoui (dit ) comme des architectures PowerPC ou ARM ; blocs PLL pour synthétiser ou resynchroniser les horloges ; reconfiguration partielle, même en cours de fonctionnement ; chiffrement des données de configuration ; sérialiseurs/désérialiseurs dans les entrées-sorties, permettant des liaisons série haut-débit ; impédance contrôlée numériquement dans les entrées-sorties, évitant de nombreux composants passifs sur la carte ; couche MAC Ethernet ; couches matérielles.

Programmation La programmation des PLD modernes (FPGA / CPLD) passe généralement par un compilateur basé sur un langage de programmation de type langage de description matériel (ou « HDL » pour Hardware Description Language) comme le ABEL. Pour faciliter la programmation, il existe aussi des langages de plus haut niveau. Les deux plus connus sont le VHDL (« V » pour « Very high speed ») et le VERILOG. Il est également possible d'utiliser OpenCL* , plutôt qu'un VHDL, ou bien des langages de plus haut niveau que les HDL.

Il existe également des outils permettant de générer les circuits via la représentation graphique de leur circuits, différents outils tels que ou IceStudio (libre, licence GPL2) permettent cela. Ils sont généralement convertis en langage HDL avant leur synthétisation en bitstream.

Les autres langages sont ensuite traduits dans un des deux HDL — Verilog ou VHDL — avant de pouvoir être synthétisés pour le circuit. Le synthétiseur est généralement propre à chaque fabriquant, cependant, aujourd'hui, l'utilisation du logiciel libre Yosys, à l'instar de GCC pour la compilation en langage machine, tend à unifier la synthèse pour tous les types de PLD. Certains constructeurs, tels Renesas ou Cologne Chip Design, ont préféré implémenter directement les synthétiseurs de leurs FPGA dans Yosys plutôt que d'en créer de nouveaux (voir : Yosys#Formats RTL supportés).

Applications Les FPGA sont utilisés dans diverses applications nécessitant de l'électronique numérique (télécommunications, aéronautique, transports…). Ils sont également utilisés pour le prototypage d'ASIC.

Les FPGA sont généralement plus lents, plus chers à l'unité et consomment davantage d'énergie que leur équivalent en ASIC (). Cependant, ils ont plusieurs avantages : délai de mise sur le marché plus court, car ce sont des composants standards ; temps de conception plus court, car on réutilise des fonctions de base dont la reconfiguration autorise une validation préalable moins stricte ; coût inférieur pour de petites séries (moins de unités). Avec l'évolution technologique, cette quantité tend à augmenter : en effet, le prix d'une puce est proportionnel à sa surface, qui diminue avec la finesse de gravure, tandis que les coûts initiaux pour fabriquer un ASIC (conception, tests, masques de gravure) sont en forte augmentation.

Il est parfois possible de transformer directement un FPGA en une version ASIC plus rapide, moins chère et consommant moins (car les matrices de routage sont remplacées par une couche de métallisation fixe).

Plusieurs FPGA modernes possèdent la possibilité d'être reconfigurés (on parle de configuration lorsqu'il s'agit de programmation du matériel) partiellement à la volée. Ceci permet d'obtenir des systèmes reconfigurables .