La Re-configuration dynamique des FPGAs consiste à changer la programmation de ces circuits logiques programmables alors qu'ils sont en activité.

À l'origine, ces circuits logiques programmables ont été conçus pour permettre de réaliser très rapidement des fonctions logiques plus ou moins complexes, c'est-à-dire directement opérées par un circuit électronique. Pour cela, le FPGA permet de définir et de redéfinir à volonté une configuration arbitraire de chemins entre des portes logiques élémentaires. Néanmoins, la redéfinition d'un circuit logique au sein du FPGA est une opération singulière, supposée peu fréquente, et réalisée alors que le système informatique au sein duquel il prend place est « hors-fonction ».

De nouveaux développements de cette technologie ont permis d'envisager la configuration et la re-configuration de circuits logiques programmables sans en interrompre le fonctionnement. Cette approche ouvre de nouvelles perspectives dans la réduction de la taille et de la consommation des FPGAs tout en offrant de nouvelles opportunités à leur exploitation.

Origine et Architecture des FPGAs Les FPGAs se traduisent en français par "circuits prédiffusés programmables". Les circuits prédiffusés sont des circuits partiellement préfabriqués. Ils contiennent un ensemble d'éléments (transistors, diodes, résistances, capacités, etc.) qui ne sont pas interconnectés entre eux. Contrairement aux circuits prédiffusés conventionnels, les circuits prédiffusés programmables ne demandent pas de fabrication spéciale en usine, ni de matériels de développement coûteuxLes composants FPGAs. thumb|alt=Classement des FPGAs|Figure 1 : Classement des FPGAs Les FPGAs ont été inventés et commercialisés la première fois par la société Xilinx en 1985. Ils sont de la famille des ASICs (Application Specific Integrated Circuit). Ils se situent entre les réseaux logiques programmables et les circuits prédiffusés. Ce sont donc des composants standard combinant la densité et les performances d'un circuit prédiffusé avec la souplesse due à la re-programmation des PLD (programmable logic device : circuit logique programmable). Sur le marché les fondateurs (Xilinx, Altera, Atmel) ont développé plusieurs familles de FPGA, concurrentes ou complémentaires, parfois moins performantes, parfois mieux adaptées. L'architecture, retenue par Xilinx se présente sous forme de deux couches : une couche appelée circuit configurable, une couche de mémoire SRAM (SelectRAM). La couche dite 'circuit configurable' est constituée d'une matrice de blocs logiques configurables CLB (Configurable Logic Block). Les CLBs permettent de réaliser des fonctions combinatoires et des fonctions séquentielles. Tout autour de ces CLBs, on trouve des blocs entrées/sorties IOB (Input/Output Block) dont le rôle est de gérer les entrées-sorties réalisant l'interface avec les modules extérieurs. thumb|alt=Architecture des FPGAs|Figure 2 : Architecture des FPGAs La couche SRAM est un ensemble de blocs de mémoire RAM configurables de différentes manières. Leur capacité est de 18KB. Les blocs de la SRAM peuvent être mis en cascade pour réaliser de larges zones de stockage enfouies dans le FPGA. La mise au point de la configuration d'un FPGA consiste dans un premier temps à décrire ses données de configuration sous forme d’une succession de bits qu'on appelle bitstream/fichier de configuration. Ce bitstream est stocké dans une ROM externe au FPGA. Ainsi à la mise sous tension du FPGA, sa mémoire SRAM est chargée à partir de cette ROM et la configuration est prise en compte. Ensuite une vérification est effectuée pour tester si le fonctionnement réel correspond bien à l'attente du concepteur.

La configuration d'un FPGA permet d'établir des interconnexions entre ses CLB et ses IOB. Pour cela, ils disposent de la mémoire SRAM interne dans laquelle sera écrit le fichier de configuration.

Certaines architectures de FPGA en fonction des constructeurs peuvent contenir : des BRAM (Bloc RAM) qui représentent un module de mémoire destiné aux grands éléments de stockage un VersaRing qui est un réseau additionnel de lignes d’interconnexion entre les IOB et les CLB: cela permet de changer facilement la configuration interne du circuit tout en gardant le même brochage à chaque signal d’horloge global il y a un DLL (Delay-locked loop) qui permet de modifier la phase du signal, pour améliorer les caractéristiques des flux des données en sortie.

Re-configuration dynamique thumb|213px|left|alt=Re-configuration des FPGAs|Figure 3 : Re-configuration des FPGAs

La logique re-configurable est une branche émergente de l'architecture informatique qui cherche à construire des systèmes informatiques flexibles et dynamiques. C'est-à-dire des systèmes ayant la propriété de pouvoir être modifiés après leur conception et pendant leur exécution, chose qui permet atteindre des niveaux de performance très élevésMarc, page 12. Au cœur de ces systèmes informatiques est le FPGA, ce circuit peut être facilement configuré et re-configuré par l'utilisateur final. Le FPGA possède un certain nombre d'interfaces de configuration qui sont utilisés pour télécharger les données de configuration afin de pouvoir changer à tout moment son fonctionnementBrad, page 420.

Que doit-on en attendre ? Le principal intérêt d’un système reconfigurable est de pouvoir changer à tout moment les algorithmes exécutés par le matériel, rappelons que cela est fait depuis bien longtemps par les microprocesseursDidier, page 1. La reconfiguration dynamique n’a donc de sens que si elle s’accompagne de performances (à coûts identiques) bien supérieures à celles des structures programmées classiques. Or, on constate que les processeurs conventionnels ou les DSP (Pentium, c60, c80, sharc) sont capables d’exécuter un algorithme de traitement d’images relativement complexe en temps réel. Ce qui semble discréditer quelque peu la technologie FPGA. On remarque cependant que les processeurs sont alors en limite d’utilisation : boucle interne de deux ou trois cycles optimisée au cycle près ; toute modification même minime remet en cause la faisabilité globale sous contrainte temps réel. D’autre part, ce résultat est obtenu pour des fréquences de travail supérieures d’un facteur dix par rapport aux solutions FPGA. Cependant la re-configuration dynamique est une solution architecturale et technologique qui ne permet pas des gains en vitesse de traitement, mais qui réduit la complexité de circuit nécessaire à une application donnée. Dans la suite on détaillera les approches de la re-configuration dynamique qui sont : la re-configuration pendant l'exécution du FPGA (run-time re-configuration), l'auto-reconfiguration.

La re-configuration pendant l’exécution (RTR) thumb|alt=Re-configuration pendant l’exécution|Figure 4 : Re-configuration des FPGAs pendant l’exécution C'est la capacité d’un FPGA à re-configurer ses ressources pendant l’exécution d’une application. Ce type de re-configuration devient une exigence de plus en plus importante sur les marchés de nombreux utilisateurs, en particulier les utilisateurs militaires qui doivent s'adapter rapidement à différentes menaces et l'évolution des formes d'onde de communication.

La RTR peut re-configurer les FPGAs plusieurs fois pendant l'opération normale d'une seule application comme indiqué sur la figure 4Brad, page 422.

Problématique propre à la RTR La nature dynamique du matériel présente deux nouveaux problèmes de conception, face à une RTR.

Le premier est la division de l’algorithme de l'application (Exemple : une application de traitement d'images) en segments temporaires exclusifs qui n'ont pas besoin de s’exécuter simultanément. Ce processus de division est appelé partitionnement temporaireBrad, page 423. Typiquement, on décompose l'algorithme en phases distinctes. Pour chacune de ces phases on définit un fichier de configuration. Ces fichiers de configurations sont ensuite téléchargés dans le FPGA comme requis par l'application. La division temporaire exige jusqu’à présent une participation ennuyeuse et prédisposée aux erreurs de l’utilisateur final de l’application.

Le second problème de conception consiste à coordonner le comportement entre les configurations des applications RTR. Ce comportement se manifeste sous la forme de communication inter-configuration, ou la transmission des résultats intermédiaires d'une configuration à l'autre. Cela arrive pendant la progression normale de l'application. Chaque configuration traitera des données et produira ensuite un certain résultat intermédiaire qui sert d'entrée à la configuration suivante. Cela a un effet énorme sur le processus de conception, parce que toutes les configurations doivent être soigneusement conçues, de telle sorte qu'elles marchent à travers les différentes phases de l’application et communiquent des résultats intermédiaires entre elles.

Principe de fonctionnement de la RTR Il existe deux approches de base qui peuvent être utilisées pour la mise en œuvre de la RTR : l'approche globale et partielle. Ces deux approches configurent toutes le FPGA lors de l'exécution de l’application. La principale différence entre elles est la façon dont le matériel dynamique est allouéBrad, page 427.

thumb|alt=Reconfiguration globale pendant l’exécution |Figure 5 : Re-configuration globale des FPGAs pendant l’exécution RTR globale: La RTR globale alloue toutes les ressources du FPGA dans chaque étape de re-configuration. Plus précisément, les RTRs globales sont divisées en différentes phases temporaires, où chaque phase est implémentée comme une configuration unique du système qui occupe toutes les ressources du FPGA. Au moment de l'exécution, à chaque phase d'avancement de l'application (pour laquelle la re-configuration du FPGA se fait), toutes les ressources du FPGA sont chargées avec les configurations associées à cette phase. Comme exemple la figure 5 montre comment une seule application est créée à partir de 3 configurations (A, B, C). L’application exécute séquentiellement les trois configurations du matériel temporairement disjointes.

Mise en œuvre d’un RTR globale

Dans la mise en œuvre de la RTR globale, la tâche principale de la conception est de diviser temporairement l’algorithme de l'application en partitions à peu près de même taille. Cette division permet d'utiliser efficacement des ressources re-configurables. Comme expliqué dans la partie des problématiques chaque partition est associé à un fichier de configuration. Cependant, l'étape de partitionnement temporaire est itératif c'est-à-dire que le concepteur doit créer une partition initiale, puis réitérer ensuite tant sur la conception que la division, jusqu’à ce que les tailles des partitions soient approximativement égales. Le principal inconvénient de cette approche est la nécessité d'une même taille de partitions temporaires. S’il n’est pas possible de faire cette division équitable des partitions, il en résultera une inefficacité d’utilisation des ressources du FPGA.

Une fois qu'une application a été temporairement partitionnée, un moyen doit être prévu pour soutenir la communication inter-configuration. Ceci parce que chaque phase occupe toutes les ressources re-configurables. Typiquement les partitions sont organisées de sorte que chaque phase de l’application calcule un certain résultat intermédiaire. Ce résultat intermédiaire est placé dans la mémoire ou un registre du FPGA. Lorsque la phase suivante est chargée commencera l'opération en lisant ce résultat intermédiaire et continuera ensuite à calculer le résultat suivant. Ce processus "chargement et exécution" continue jusqu'à ce que l'application soit terminée. L'avantage principal de la RTR globale est sa simplicité relative. Parce que les divisions de l'application sont à granularité grosse.

thumb|alt=Reconfiguration Partielle pendant l’exécution|Figure 6 : Re-configuration Partielle des FPGAs pendant l’exécution