Les FPGA entièrement dévoilés
Introduction
Les outils de conception haut niveau offrent la technologie FPGA (field-programmable gate array) aux ingénieurs et scientifiques qui possèdent peu, voire aucune compétence en matière de conception de matériel numérique. Que l'on utilise la programmation graphique, en C ANSI, ou VHDL, le processus de synthèse est particulièrement complexe et fait s'interroger sur le fonctionnement réel des FPGA. Que se passe-t-il vraiment à l'intérieur des circuits intégrés pour que les programmes s'exécutent au sein des blocs configurables de silicium ? Ce white paper est destiné aux concepteurs qui ne sont pas spécialistes du numérique et qui souhaitent comprendre les éléments fondamentaux d'un FPGA et découvrir les secrets de son fonctionnement. Ces informations sont toujours utiles lorsque l'on a recours à des outils de conception haut niveau et peuvent faire la lumière sur le fonctionnement intrinsèque d'une technologie extraordinaire.
Table des matières
Field Programmable Gate Arrays
Chaque circuit intégré FPGA est constitué d'un nombre limité de ressources prédéfinies avec des interconnexions programmables pour mettre en œuvre un circuit numérique reconfigurable.
Figure n°1. Les différents éléments d'un FPGA
Dans les spécifications d'un circuit intégré FPGA vous trouverez la quantité de blocs logiques configurables, le nombre de blocs logiques de fonctions figées, comme les multiplicateurs et la taille des ressources de la mémoire telles que le bloc de RAM embarquée (embedded block RAM). Un circuit intégré FPGA est composé de plusieurs autres éléments, mais ceux-ci sont typiquement les plus importants lors du choix et de la comparaison des FPGA en vue d'une application spécifique.
Au niveau le plus bas, les bloc logiques configurables, tels que les slices (tranches) ou les cellules logiques élémentaires, sont constitués de deux éléments essentiels : des tables de correspondance (LUT ou Look-Up-Table) et des bascules Flip-Flop. Il est important de le souligner car les diverses familles des FPGA se distinguent par la façon dont les bascules et les LUT sont conditionnées ensemble. Les FPGA de la famille Virtex-II, par exemple, sont pourvus de slices avec deux LUT et deux bascules, tandis que ceux de la famille Virtex-5 ont des slices avec quatre LUT et quatre bascules. L'architecture des tables de correspondance elle-même peut être différente (quatre entrées au lieu de six) mais vous trouverez de plus amples détails sur la façon dont fonctionnent les LUT dans un autre chapitre.
Le Tableau n°1 répertorie les spécifications des FPGA utilisés dans les cibles matérielles NI LabVIEW FPGA. Jusqu'ici le nombre de portes a permis de comparer les circuits intégrés FPGA avec la technologie ASIC, mais cela ne permet pas de connaître réellement le nombre de composants particuliers au sein d'un FPGA. C'est l'une des raisons pour laquelle Xilinx n'a pas spécifié le nombre de portes pour la nouvelle famille Virtex-5.
|
|
Virtex-II 1000 |
Virtex-II 3000 |
Spartan-3 1000 |
Spartan-3 2000 |
Virtex-5 LX30 |
Virtex-5 LX50 |
Virtex-5 LX85 |
Virtex-5 LX110 |
|
Portes |
1 millions |
3 millions |
1 millions |
2 millions |
----- |
----- |
----- |
----- |
|
Bascules |
10 240 |
28 672 |
15 360 |
40 960 |
19 200 |
28 800 |
51 840 |
69 120 |
|
LUT |
10 240 |
28 672 |
15 360 |
40 960 |
19 200 |
28 800 |
51 840 |
69 120 |
|
Multiplicateur |
40 |
96 |
24 |
40 |
32 |
48 |
48 |
64 |
|
Bloc de RAM (kbit) |
720 |
1 728 |
432 |
720 |
1 152 |
1 728 |
3 456 |
4 608 |
Tableau n°1. Spécifications des ressources FPGA pour différentes familles
Pour mieux comprendre ces spécifications, il convient de prendre en considération la façon dont le code est synthétisé dans le circuit numérique. La synthèse est le processus qui consiste à traduire des langages de programmation de haut niveau en véritables mises en œuvre matérielles. Pour tout morceau de code synthétisable donné, qu'il soit graphique ou textuel, il existe un schéma de circuit correspondant qui décrit la façon dont les blocs logiques devraient être câblés les uns aux autres. Le Module LabVIEW FPGA ajoute de la logique autour de chaque fonction du diagramme avant d'envoyer le schéma final au compilateur. Examinons une petite portion de code du diagramme pour voir à quoi devrait ressembler le schéma correspondant. La Figure n°2 montre l'exemple de cinq signaux booléens transmis à un ensemble de fonctions booléennes afin de calculer graphiquement une seule valeur binaire.

Figure n°2. Petite portion de diagramme LabVIEW avec logique booléenne simple
Dans des conditions normales (en dehors de la boucle cadencée à une seule période de LabVIEW), le schéma de circuit correspondant qui résulte de la portion de diagramme de la Figure n°2 ressemble à la Figure n°3.

Figure n°3. Schéma de circuit correspondant à la logique booléenne de la Figure n°2
Cela peut être difficile à discerner, mais il y a en fait deux branches de circuit créées en parallèle. Les cinq fils noirs supérieurs aboutissent à la première branche, ce qui ajoute une bascule entre chaque opération de booléen. Les cinq fils noirs inférieurs sont reliés à une seconde chaîne de logique avec le même nombre de bascules, qui est créée pour suivre le nombre de périodes d'horloges nécessaires afin de propager les données à travers le circuit numérique. Au total, 12 bascules et 12 LUT sont utilisées pour la mise œuvre de ce schéma. La branche supérieure et chaque composant sont analysés dans les paragraphes qui suivent.
Bascules

Figure n°4. Symbole de la bascule
Les bascules sont des registres à décalage binaires qui servent à synchroniser la logique et à enregistrer les états logiques entre les périodes d'horloges. À chaque front d'horloge, une bascule déclenche la valeur 1 ou 0 (VRAI ou FAUX) sur son entrée et maintient cette valeur stable jusqu'au prochain front d'horloge. Dans des conditions normales, LabVIEW FPGA place une bascule entre chaque opération afin d'optimiser le temps de propagation disponible pour l'exécution de chaque opération. L'exception à cette règle se produit lorsque le code est placé à l'intérieur d'une boucle cadencée à une seule période. Dans cette structure de boucle spécifique, les bascules sont ajoutées uniquement au début et à la fin de l'itération de boucle, et c'est au programmeur de comprendre les considérations spécifiques au cadencement. Vous trouverez de plus amples détails sur la façon dont le code est synthétisé au sein d'une boucle cadencée à une seule période dans un prochain chapitre. La Figure n°5 représente la branche supérieure de la Figure n°3, avec les bascules indiquées en rouge.
Figure n°5. Schéma représenté avec les bascules en rouge
Tables de correspondance (LUT)

Figure n°6: LUT à quatre entrées
La logique qui demeure dans le schéma représenté par la Figure n°6 est mise en œuvre grâce à de très petites quantités de RAM sous la forme de LUT. Il est facile de supposer que le nombre de portes du système dans un FPGA se rapporte au nombre de portes NON ET et NON OU dans un circuit intégré spécifique, mais, en réalité, l'ensemble de la logique combinatoire (ET, OU, NON ET, XOU, etc.) est implémentée en tant que tables de vérité dans la mémoire LUT. Une table de vérité est une liste prédéfinie d'états de sorties pour chaque combinaison d'entrées. (De vagues réminiscences des tableaux de Karnaugh vous reviennent peut-être à l'esprit.)
Voici un bref rappel des cours de logique numérique :
L'opération ET booléenne, par exemple, est illustrée Figure n°7 :

Figure n°7. Opération ET booléenne
La table de vérité correspondante pour les deux entrées d'une opération ET est représentée Tableau n°2.
![]()
|
Entrée 1 |
Entrée 2 |
Sortie |
|
0 |
0 |
0 |
|
0 |
1 |
0 |
|
1 |
0 |
0 |
|
1 |
1 |
1 |
Tableau n°2. Table de vérité pour une opération ET booléenne
Vous pouvez aussi vous représenter les entrées avec une indexation numérique pour tous les états possibles des sorties, comme le montre le Tableau n°3.
|
Indice de LUT |
Sortie |
|
0 (00) |
0 |
|
1 (01) |
0 |
|
2 (10) |
0 |
|
3 (11) |
1 |
Tableau n°3. Implémentation LUT d'une table de vérité pour une opération ET booléenne
Les FPGA des familles Virtex-II et Spartan-3 sont pourvus de tables de correspondance à quatre entrées pour mettre en œuvre des tables de vérité avec jusqu'à 16 combinaisons de quatre signaux d'entrée. La Figure n°8 est un exemple de mise en œuvre de circuit à quatre entrées.

Figure n°8. Circuit de quatre signaux d'entrée correspondant à la logique booléenne
Le Tableau n°4 montre la table de vérité correspondante que l'on pourrait implémenter dans une LUT à quatre entrées.
|
Indice de LUT |
Sortie |
|
0 (0000) |
1 |
|
1 (0001) |
1 |
|
2 (0010) |
1 |
|
3 (0011) |
0 |
|
4 (0100) |
0 |
|
5 (0101) |
0 |
|
6 (0110) |
0 |
|
7 (0111) |
1 |
|
8 (1000) |
0 |
|
9 (1001) |
0 |
|
10 (1010) |
0 |
|
11 (1011) |
1 |
|
12 (1100) |
0 |
|
13 (1101) |
0 |
|
14 (1110) |
0 |
|
15 (1111) |
1 |
Tableau 4. Table de vérité correspondante pour le circuit représenté par la Figure n°8
Les FPGA de la famille Virtex-5 utilisent des LUT à six entrées pour mettre en œuvre des tables de vérité avec jusqu'à 64 combinaisons de six signaux d'entrée différents. Cela gagne en importance lorsque l'on utilise des boucles cadencées à une seule période dans LabVIEW FPGA, étant donné que la logique combinatoire entre les bascules peut devenir très complexe. Le chapitre suivant décrit la façon dont les boucles cadencées à une seule période optimisent l'utilisation des ressources FPGA dans LabVIEW.
Boucles cadencées à une seule période
L'exemple de code utilisé dans les paragraphes précédents supposait que le code était placé en dehors du cas d'une boucle cadencée à une seule période, et qu'un circuit annexe était synthétisé afin d'assurer l'exécution par flux de données synchrone. La boucle cadencée à une seule période est une structure particulière dans LabVIEW FPGA qui génère un schéma de circuit optimisé, avec pour objectif que toutes les branches de logique puissent s'exécuter dans un seul cycle d'horloge. Si une boucle cadencée à une seule période est configurée pour s'exécuter à 40 MHz, par exemple, toutes les branches de logique doivent s'exécuter en l'espace d'une impulsion d'horloge de 25 ns.
Si l'on plaçait la logique booléenne d'un des exemples rencontrés précédemment à l'intérieur d'une boucle cadencée à une seule période (voir Figure n°9), le schéma de circuit correspondant généré ressemblerait à la Figure n°10.
Figure n°9. Logique booléenne simple à l'intérieur d'une boucle cadencée à une seule période

Figure n°10. Schéma de circuit correspondant à la logique booléenne de la Figure n°9
Lorsqu'on la compare au schéma précédent représenté par la Figure n°3, il est évident que cette mise en œuvre est beaucoup plus simple. La logique entre les bascules nécessiterait au moins deux LUT à quatre entrées sur un FPGA de la famille Virtex-II ou Spartan-3 (voir Figure n°11).

Figure n°11. Une implémentation de la LUT à quatre entrées du schéma de circuit représenté par la Figure n°10
Étant donné que les FPGA de la famille Virtex-5 sont dotés de LUT à six entrées, on pourrait mettre en œuvre exactement la même logique au sein d'une seule LUT (voir Figure n°12).

Figure n°12. Une implémentation de la LUT à six entrées du schéma de circuit représenté par la Figure n°10
La boucle cadencée à une seule période utilisée dans cet exemple (Figure n°9) est configurée pour s'exécuter à 40 MHz, ce qui signifie que la logique entre n'importe quelle bascule donnée doit s'exécuter en l'espace d'une impulsion d'horloge de 25 ns. La vitesse maximale à laquelle le code peut s'exécuter dépend de la propagation des électrons à travers le circuit. La branche de logique avec le temps de propagation le plus long est appelée le chemin critique, et il détermine la vitesse d'horloge maximale théorique pour cette partie du circuit. Les LUT à six entrées sur les FPGA de la famille Virtex-5 réduisent non seulement le nombre total de LUT nécessaires à la mise en œuvre d'une portion de logique donnée, mais aussi le temps de propagation des électrons à travers cette portion. Cela signifie qu'il est possible de configurer la même boucle cadencée à une seule période pour des fréquences d'horloge plus élevées en choisissant tout simplement une cible matérielle Virtex-5.
Pour en savoir plus sur les avantages des FPGA de la famille Virtex-5, consultez le tutorial intitulé "Les cinq principaux atouts de la technologie FPGA".
Multiplicateurs et DSP slices

Figure n°13. Fonction Multiplier
La tâche apparemment simple qui consiste à multiplier deux nombres peut s'avérer extrêmement consommatrice de ressources et difficile à mettre en œuvre dans un circuit numérique. Pour fournir un certain cadre de référence, le Figure n°14 représente le schéma d'une des options d'implémentation d'un multiplicateur 4 bits par 4 bits utilisant la logique combinatoire.

Figure n°14. Schéma d'un multiplicateur 4 bits x 4 bits
Imaginez maintenant que l'on multiplie deux nombres de 32 bits : vous obtenez au final plus de 2000 opérations pour une seule multiplication. De ce fait, les FPGA sont dotés d'un circuit de multiplicateurs préconstruit pour économiser l'utilisation des LUT et des bascules dans les applications de traitement du signal et de mathématiques. Les FPGA des familles Virtex-II et Spartan-3 ont des multiplicateurs 18 bits x 18 bits, si bien que multiplier deux nombres de 32 bits requiert trois multiplicateurs pour une seule opération. De nombreux algorithmes de traitement du signal nécessitent de conserver le cumul des nombres multipliés, et, en conséquence, les FPGA aux performances plus élevées comme ceux de la famille Virtex-5 ont un circuit préconstruit multiplicateur-accumulateur. Ces blocs de traitement préconstruits, également appelés DSP48 slices, intègrent un multiplicateur 25 bits x 18 bits avec un circuit additionneur. LabVIEW FPGA, cependant, utilise la fonctionnalité des multiplicateurs de manière indépendante. Le Tableau n°5 illustre les ressources de multiplicateurs pour différentes familles de FPGA.
|
|
Virtex-II 1000 |
Virtex-II 3000 |
Spartan-3 1000 |
Spartan-3 2000 |
Virtex-5 LX30 |
Virtex-5 LX50 |
Virtex-5 LX85 |
Virtex-5 LX110 |
|
Nombre de multiplicateurs |
40 |
96 |
24 |
40 |
32 |
48 |
48 |
64 |
|
Type |
18x18 |
18x18 |
18x18 |
18x18 |
DSP48 Slices |
DSP48 Slices |
DSP48 Slices |
DSP48 Slices |
Tableau n°5. Ressources des multiplicateurs pour divers FPGA
Bloc de RAM
Les ressources de mémoire sont une autre spécification clé à prendre en compte lors du choix des FPGA. Une mémoire RAM définie par l'utilisateur, embarquée sur le circuit intégré FPGA, est utile pour le stockage d'ensembles de données ou faire passer des valeurs entre des boucles parallèles. Selon la famille FPGA, il convient de configurer la RAM embarquée en blocs de 16 ou 36 kbits. Il y a toujours la possibilité d'implémenter les ensembles de données sous forme de tableau utilisant des bascules. Toutefois, les tableaux volumineux deviennent rapidement fort consommateurs de ressources de logique FPGA. Un tableau comportant 100 éléments de nombres de 32 bits pourrait consommer plus de 30 % des bascules dans un FPGA de la famille Virtex-II 1000 ou occuper moins de 1 % du bloc de RAM embarquée. Les algorithmes de traitement de signaux numériques ont souvent besoin de conserver la trace d'un bloc entier de données, ou des coefficients d'une équation complexe, et sans mémoire embarquée, de nombreuses fonctions de traitement ne pourraient pas s'intégrer dans la logique configurable d'un circuit intégré FPGA. La Figure n°15 représente les fonctions graphiques permettant de lire et d'écrire dans la mémoire à l'aide d'un bloc de RAM.
Figure n°15. Fonctions de bloc de RAM pour lire et écrire dans la mémoire
Il est également possible d'utiliser des blocs de mémoire afin de contenir des données de formes d'ondes périodiques pour la génération de signaux embarquée en stockant une période complète sous la forme d'une table de valeurs et en indexant la table de manière séquentielle. La fréquence ultime du signal de sortie est déterminée par la vitesse à laquelle les valeurs sont indexées. Cette méthode peut être utilisée afin de modifier de manière dynamique la fréquence de sortie sans introduire de transition prononcée dans la forme d'onde.
Figure n°16. Fonctions de blocs de RAM pour buffers FIFO
L'exécution parallèle propre aux FPGA permet aux portions indépendantes de la logique matérielle d'être commandées par différentes horloges. Transmettre les données entre des logiques fonctionnant à des fréquences différentes peut s'avérer difficile, et la mémoire embarquée est fréquemment utilisée dans le but de lisser le transfert à l'aide de buffers FIFO (first-in-first-out ou premier entré, premier sorti). Il est possible de configurer les buffers FIFO, illustrés par la Figure n°16, pour qu'ils aient des tailles différentes et garantir que les données ne soient pas perdues entre des parties asynchrones du circuit intégré FPGA. Le Tableau n°6 représente le bloc de RAM configurable par l'utilisateur embarqué dans diverses familles de FPGA.
|
|
Virtex-II 3000 |
Virtex-II 1000 |
Spartan-3 1000 |
Spartan-3 2000 |
Virtex-5 LX30 |
Virtex-5 LX50 |
Virtex-5 LX85 |
Virtex-5 LX110 |
|
Mémoire RAM totale (kbits) |
1728 |
720 |
432 |
720 |
1152 |
1728 |
3456 |
4608 |
|
Taille des blocs (kbits) |
16 |
16 |
16 |
16 |
36 |
36 |
36 |
36 |
Tableau n°6. Ressources mémoire pour divers FPGA
Conclusion
L'adoption de la technologie FPGA continue de s'étendre à mesure que les outils de haut niveau évoluent et développent les concepts décrits dans ce white paper. Il demeure cependant important de jeter un œil à l'intérieur du FPGA et d'apprécier tout ce qui se produit réellement lorsque deux diagrammes sont compilés afin de s'exécuter dans du silicium. Comparer et sélectionner des cibles matérielles en s'appuyant sur les bascules, les tables de correspondance, les multiplicateurs et le bloc de RAM est le meilleur moyen d'effectuer le bon choix de FPGA pour une application. Comprendre l'utilisation des ressources est extrêmement utile lors du développement, tout particulièrement lors de l'optimisation de la taille et de la vitesse. Ces éléments fondamentaux n'ont pas la prétention de constituer une liste exhaustive de toutes les ressources et il y a de nombreuses autres composantes des FPGA qui n'ont pas été abordées ici. Vous pouvez approfondir vos connaissances des FPGA et de la conception de matériels numériques grâce aux ressources que nous vous recommandons ci-dessous.
Ressources supplémentaires
The Design Warrior's Guide to FPGAs - par Clive Maxwell
Articles d'utilisateurs de la technologie FPGA
Vidéo : introduction à LabVIEW
Les cinq principaux atouts de la technologie FPGA
Découvrez l'acquisition de données intelligente de la Série R
Module LabVIEW FPGA de National Instruments
Législation
Ce tutorial a été développé par National Instruments. Bien qu'un support technique puisse être fourni pour ce tutorial, il n'a pas été complètement testé ni vérifié, et NI ne garantit pas sa qualité, ni qu'il continuera à être supporté pour les nouvelles versions des produits et drivers qui y sont rattachés. CE TUTORIAL EST FOURNI "EN L'ÉTAT" SANS GARANTIE D'AUCUNE SORTE, ET EST SUJET À CERTAINES RESTRICTIONS COMME PLUS SPÉCIFIQUEMENT DÉTERMINÉES DANS LES CONDITIONS D'UTILISATION DE NI.COM (http://ni.com/legal/termsofuse/unitedstates/us/).





