Circuit logique programmable 111710 30710577 2008-06-16T20:50:16Z Gonzolito 232769 Annulation des modifications 30710550 par [[Special:Contributions/171.71.145.64|171.71.145.64]] ([[User talk:171.71.145.64|Discuter]]) publicité [[Image:Fpga xilinx spartan.jpg|thumb|FPGA de [[Xilinx]] (modèle Spartan XC3S400) avec {{formatnum:400000}} portes et une fréquence de 50 Mhz]] Un '''circuit logique programmable''', ou '''réseau logique programmable''', est un [[circuit intégré]] logique qui peut être [[programmation|reprogrammé]] après sa fabrication. Il est composé de nombreuses cellules logiques élémentaires librement assemblables. Ce type de [[composant électronique]] est communément désigné par les [[sigle]]s [[anglais]]: * '''FPGA''' (''field-programmable gate array'', réseau de portes programmables in-situ), * '''PLD''' (''programmable logic device'', circuit logique programmable), * '''EPLD''' (''erasable programmable logic device'', circuit logique programmable et effaçable), * '''CPLD''' (''complex programmable logic device'', circuit logique programmable complexe), * '''PAL''' (''programmable array logic'', réseau logique programmable), * '''PLA''' (''programmable logic array'', réseau logique programmable), * etc. Bien que fondamentalement synonymes, ces termes ne sont généralement pas interchangeables dans le vocabulaire commercial des fabricants : FPGA désigne plutôt des composants à technologie RAM, EPLD des composants à technologie FLASH, PAL des composants à technologie fusible (voir § [[Circuit logique programmable#Procédés technologiques|procédés technologiques]]). ==Architecture matérielle== Les '''réseaux logiques programmables''' sont des [[Circuit intégré|circuit]]s composés de nombreuses cellules logiques élémentaires librement assemblables. Celles-ci sont connectées de manière définitive ou réversible par [[programmation]], afin de réaliser la ou les fonctions numériques voulues. L'intérêt est qu'une même [[Circuit intégré|puce]] peut être utilisée dans de nombreux systèmes électroniques différents. Certains modèles peuvent aussi comporter : de la [[mémoire informatique|mémoire]] d'usage général, des blocs "[[Digital signal processor|DSP]]" câblés, des [[boucle à verrouillage de phase|boucles à verrouillage de phase]] pour la génération d'[[horloge]]. === FPGA === La plupart des grands FPGA modernes sont basé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 ''Look-Up-Table'') et d'une [[bascule]] (''Flip-Flop'' en anglais). La LUT sert à implémenter des équations logiques ayant généralement 4 à 6 entrées 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 (pipeline). 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 de réseau|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 LUTs) est faite par des points mémoire volatiles, 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 informatique|mémoire]] supplémentaires (hors des LUT), souvent double-port, parfois avec mécanisme de [[First in, first out|FIFO]], * multiplieurs câblés (coûteux à implémenter en LUT), voire blocs multiplieur-accumulateur pour traitements [[Digital signal processor|DSP]], * cœur de [[microprocesseur]] enfoui (dit ''hard core''), * blocs [[PLL]] pour synthétiser ou resynchroniser les [[horloge]]s, * reconfiguration partielle, même en cours de fonctionnement, * [[cryptographie|cryptage]] 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 (électricité)|impédance]] contrôlée numériquement dans les entrées-sorties, évitant de nombreux composants passifs sur la carte. === CPLD === Les PAL, GAL, CPLD et EPLD, de conception plus ancienne, utilisent des "macrocellules" logiques, composées d'un réseau combinatoire de [[porte logique|portes]] ET et OU afin d'implémenter des équations logiques. Des [[bascule]]s sont disponibles seulement dans les blocs d'entrée-sortie. Un composant contient de quelques dizaines à quelques centaines de macrocellules. Comme le routage est fixe, les temps de propagations sont bornés et permettent une fréquence de fonctionnement élevée et indépendante du design. Par contre, 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%. On distingue les CPLD des autres PLD car ils contiennent l'équivalent de plusieurs composants PLD, reliés par une matrice d'interconnexion. ==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'[[Application Specific Integrated Circuit|ASIC]]. Les FPGA sont généralement plus lents, plus chers à l'unité et consomment davantage d'énergie que leur équivalent en [[Application Specific Integrated Circuit|ASIC]] (Application Specific Integrated Circuit). Cependant, ils ont plusieurs avantages : *délai de mise sur le marché plus court, car ce sont des composants standard, *temps de développement plus court, car on réutilise des fonctions de base et la reconfigurabilité autorise une validation préalable moins stricte, *coût inférieur pour de petites séries (moins de 10 000 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'' - par exemple une unité centrale dont les instructions changent dynamiquement en fonction des besoins. Les FPGA modernes sont assez vastes et contiennent suffisamment de mémoire pour être configurés pour héberger un cœur de processeur ou un [[Digital signal processor|DSP]], afin d'exécuter un logiciel. On parle dans ce cas de [[processeur softcore]], par opposition aux microprocesseurs ''hard-core'' enfouis dans le silicium. Aujourd'hui, les fabricants de FPGA intègrent même un ou plusieurs cœurs de processeur "hard-core" sur un même composant afin de conserver les ressources logiques configurables du composant. Ceci n'exclut pas l'utilisation de [[processeur softcore]] possédant de nombreux avantages. On tend donc vers des "Systems On Chip", comme pour le [[microcontrôleur]] il y a quelques décennies, avec en plus de la logique configurable selon l'utilisateur. La mémoire des tous derniers FPGA est encore insuffisante pour exécuter des logiciels embarqués un peu complexes et on doit avoir recours à des mémoires externe (ROM, RAM). Cependant, la loi de Moore n'est pas encore à bout de souffle et celles-ci devraient être intégrées dans quelques années et suffiront à une grande partie des applications embarquées. ==Conception du schéma logique== Afin de pouvoir finaliser un FPGA, il est nécessaire d'utiliser un [[langage de description matériel (HDL)]] ou bien un outil de saisie graphique. Après compilation de cette description, on obtient un fichier de configuration pour le FPGA choisi. [[VHDL]] et [[Verilog]] sont les deux langages de description les plus répandus. ==Procédés technologiques== Les procédés technologiques de base pour les composants programmables sont les suivants : * [[Static Random Access Memory|SRAM]] - (''Static Random Access Memory''). Programmables à volonté et in-situ. Habituellement en technologie [[CMOS]]. * [[EPROM]] (UVPROM) - (''Erasable Programmable Read-Only Memory''). Peuvent être effacés (et reprogrammés) par exposition aux [[ultraviolet|rayons ultra-violets]]. Technologie [[CMOS]], en cours de disparition au profit de l'EEPROM. * [[EEPROM]] - (''Electrically Erasable Programmable Read-Only Memory''). Peuvent être effacés et reprogrammés à volonté. Quelques-uns peuvent être programmés in-situ (souvent par une connexion [[JTAG]]). Technologie [[CMOS]]. * [[mémoire flash|Flash]] - (''Flash-erase EPROM''). Mêmes propriétés que EEPROM mais avec une densité supérieure (donc avec un coût inférieur pour une complexité donnée). Technologie [[CMOS]]. * [[Fusible]] - Programmables une seule fois. Technologie [[transistor bipolaire|bipolaire]]. * '''Anti-fusible''' - Ne sont programmables qu'une seule fois. Technologie [[CMOS]]. Dans le cas des technologies à [[Mémoire informatique|mémoires]] (SRAM, EEPROM, flash), la mémoire est située à côté du circuit logique proprement dit et chacun de ses bits pilote un [[interrupteur]] (en fait, un [[transistor]]) de configuration du réseau logique. Dans le cas des technologies à (anti-)fusibles, ceux-ci sont directement dans le réseau logique et ont à la fois la fonction de mémoire non-volatile et d'interrupteur. Les FPGA haut de gamme sont à la pointe de la technologie : les sauts technologiques, comme la finesse de [[Gravure de disque optique|gravure]], sont souvent réalisés sur ces composants avant de passer aux [[microprocesseur]]s. En effet, la structure répétitive de la matrice logique est propice au réglage des machines de gravure microélectronique. Ainsi, les premier composants gravés avec une finesse de 90[[nanomètre|nm]] ont été les FPGA Spartan3 de Xilinx, en 2003. ==Fabricants== Parmi les fabriquants de tels circuits programmables, on trouve [[Xilinx]], [[Altera]], [[Lattice Semiconductor]], [[Actel]], [[Cypress]], [[Atmel]] et [[QuickLogic]]. ==Voir aussi== ===Liens internes=== *[[Circuit intégré numérique]] ; *[[Very High Speed Integrated Circuit Hardware Description Language|VHDL]], le langage de synthèse et de simulation de l'électronique numérique. {{Wikibooks|Conception et VHDL}} {{Wikibooks|Cours de premier cycle universitaire (L1-L2) Électronique numérique : logique|logique combinatoire}} {{Wikibooks|Cours_de_premier_cycle_universitaire (L1-L2) Electronique_numérique : logique séquentielle|logique séquentielle}} ===Liens externes=== * {{fr}} [http://proxacutor.free.fr/index.htm Introduction aux FPGAs] * {{en}} [http://www.tutorial-reports.com/book/print/260 FPGA tutorial] * {{en}} [http://andraka.com/whatisan.htm Les bases des FPGA par Ray Andraka] * {{en}} [http://www.arl.wustl.edu/~lockwood/class/cs6812/Toronto_tutorial.pdf Architecture of FPGA Tutorial] * vendeurs de FPGA : ** [http://www.xilinx.com/ Xilinx] ** [http://www.altera.com/ Altera] ** [http://www.latticesemi.com/ Lattice] ** [http://www.actel.com/ Actel] ** [http://www.cypress.com/ Cypress] ** [http://www.atmel.com/ Atmel] ** [http://www.quicklogic.com/ QuickLogic] ** [http://www.nallatech.com/ Nallatech] *Applications : ** [http://www.opencores.org/ Opencores : site de développement de hardware open-source en utilisant des FPGA] ** [http://www.fpga4fun.com Fpga4Fun : divers projets fpga] ** [http://www.gaisler.com/products/leon3/leon3.html LEON3 processeur Sparc open-source produit en utilisant des FPGA] {{Portail|électricité et électronique|informatique}} [[Catégorie:Circuit intégré logique]] [[Catégorie:traitement numérique du signal]] [[cs:Programovatelné hradlové pole]] [[de:Programmierbare logische Schaltung]] [[en:Programmable logic device]] [[es:Lógica programada]] [[it:Programmable logic device]] [[ja:プログラマブルロジックデバイス]] [[ko:프로그래머블 논리 소자]] [[pl:PLD (elektronika)]] [[pt:Dispositivo lógico programável]] [[ru:ПЛИС]] [[sk:Programovateľný logický obvod]] [[th:พีแอลดี]] [[zh:可程式邏輯裝置]]