À 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é.