D'après ce que je comprends, le processus de programmation d'un FPGA se décompose en deux parties:
- Encoder la description matérielle en bits que le FPGA peut comprendre (c'est-à-dire écrire du HDL et le compiler)
- Chargez le HDL compilé sur le FPGA.
Ma question est: "Que fait le FPGA avec le HDL compilé?". Pour le moment, je considère les FPGA comme un "matériel moulable", où les fils et les portes logiques peuvent être moulés à votre guise. Une des bonnes choses est que la moulabilité est permanente: les FPGA peuvent être reprogrammés.
Comment les FPGA interprètent-ils le HDL compilé? Comment la moulabilité permanente est-elle atteinte?
Réponses:
À en juger par votre autre question, vous êtes un gars de Xilinx. Je suggère donc fortement d'obtenir la fiche technique de votre puce Xilinx et d'aller au chapitre Description fonctionnelle. Pour la puce Spartan 3 que j'utilise, c'est 42 pages de lecture amusante. Il détaille exactement les composants à l'intérieur d'un FPGA - les IOB, les CLB, les tranches, les LUT, la RAM de bloc, les multiplicateurs, le gestionnaire d'horloge numérique, le réseau d'horloge, l'interconnexion et certaines informations de configuration très basiques. Vous devez comprendre ces informations si vous voulez savoir à quoi ressemble un "HDL compilé".
Une fois que vous êtes familiarisé avec l'architecture de votre FPGA, vous pouvez comprendre ce processus. Tout d'abord, votre conception HDL est exécutée via le moteur de synthèse, qui transforme votre HDL en RTL. Ensuite, le mappeur traite les résultats de la synthèse, les «mappant» sur les éléments disponibles de l'architecture FPGA. Ensuite, le routeur place et route (PAR), qui détermine où ces pièces vont et comment les connecter. Enfin, les résultats de PAR sont transformés en fichier BIT. Typiquement, ce fichier BIT est ensuite transformé d'une certaine manière afin qu'il puisse être chargé dans une puce Flash, afin que le FPGA puisse être programmé automatiquement lors de sa mise sous tension.
Ce fichier bit décrit l'ensemble du programme FPGA. Par exemple, les CLB dans un Spartan 3 sont composés de tranches, qui sont composées de LUT, qui ne sont que des SRAM 1 bit à 16 adresses. Donc, une chose que le fichier BIT contiendra est exactement quelles données vont dans chaque adresse de la SRAM. Le fichier BIT contient également la façon dont chaque entrée de la LUT est câblée à la matrice de connexion. Le fichier BIT contiendra également les valeurs initiales qui vont à l'intérieur de la RAM du bloc. Il décrira ce qui est connecté aux broches de réglage et de réinitialisation de chaque bascule dans chaque tranche. Il décrira comment la chaîne de transport est connectée. Il décrira l'interface logique de chaque IOB (LVTTL, LVCMOS, LVDS, etc.). Il décrira toutes les résistances intégrées pull-up ou pull-down. Fondamentalement, tout.
Pour Xilinx, la mémoire du FPGA est effacée lorsque la configuration est lancée (c'est-à-dire que PROG_B est affirmé). Une fois la mémoire vide, INIT_B passe à l'état haut pour indiquer que la phase est terminée. Le fichier BIT est ensuite chargé, via JTAG ou l'interface de puce Flash. Une fois le programme chargé, le Global Set / Reset (GSR) est pulsé, remettant toutes les bascules à leur état initial. La broche DONE passe alors au niveau haut, pour indiquer que la configuration est terminée. Exactement un cycle d'horloge plus tard, le signal global à trois états (GTS) est libéré, permettant aux sorties d'être pilotées. Exactement un cycle d'horloge plus tard, le Global Write Enable (GWE) est libéré, permettant aux bascules de commencer à changer d'état en réponse à leurs entrées. Notez que même ce processus de configuration final peut être légèrement réorganisé en fonction des indicateurs définis dans le fichier BIT.
ÉDITER:
Je dois également ajouter que la raison pour laquelle le programme FPGA n'est pas permanent est que le tissu logique est composé de mémoire volatile (par exemple SRAM). Ainsi, lorsque le FPGA perd de la puissance, le programme est oublié. C'est pourquoi ils ont besoin, par exemple, de puces Flash comme stockage non volatile pour le programme FPGA, afin qu'il puisse être chargé chaque fois que l'appareil est allumé.
la source
La compilation du HDL donne un motif binaire qui indique quelles connexions à l'intérieur du FPGA doivent être activées. Le FPGA n'a plus à interpréter le HDL. Le modèle de bits est programmé dans un chargeur série Flash / EEPROM et au démarrage, ce modèle est déplacé dans le FPGA, établissant les connexions nécessaires.
la source
Le résultat de la compilation est un flux binaire (littéralement un flux de bits) qui est chargé après la mise sous tension. Cela se déplace à travers le FPGA stocké dans certaines cellules de mémoire (verrous). Ces cellules sont connectées à différentes entités logiques, multiplexeurs, tables de correspondance, blocs RAM, matrices de routage et constituent ce qu'on appelle la "configuration". Une fois le train de bits chargé, le FPGA commence à fonctionner - les bits dans les verrous de configuration "indiquent" à chaque petit morceau de FPGA comment fonctionner.
EDIT 24 avril 2012: Les tongs que j'ai mentionnées ne concernent pas les tables de recherche ou leur configuration. Comme l'a dit @ ajs410, ceux-ci sont en RAM, ce qui est encore moins de transistors. Les bascules sont destinées au stockage des données hors de la LUT, si ce stockage est activé.
la source
Le terme standard est "configuration" et non "programmation" pour un FPGA. Le FPGA est généralement un appareil basé sur SRAM. Une mémoire SRAM stocke des bits qui indiquent quelles connexions sont formées et rompues à l'intérieur de la "structure logique" du dispositif. Lorsque la configuration se produit, un flux de bits est envoyé au FPGA qui écrit dans cette SRAM. Lorsque le FPGA basé sur SRAM est commuté, les données SRAM sont effacées et lorsque le FPGA est allumé, il doit être reconfiguré.
Maintenant sachez ceci, il existe différentes méthodes pour "configurer" et FPGA et donc différents formats de fichiers existent contenant ce "flux binaire". En fin de compte, la structure de ces fichiers et les détails de la configuration précise du FPGA sont la propriété de la fabrication et ces informations ne sont jamais partagées. Mais le principe général reste le même pour tous les FPGA.
la source