WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Mise en oeuvre de l'auto-reconfiguration partielle et dynamique sur FPGA Xilinx Virtex-II pro


par Guy WASSI
Université Pierre et Marie Curie (Paris VI Jussieu) - Master informatique industrielle et systèmes automatisés 2005
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

2.3.2 Configuration du Virtex-II Pro de Xilinx

a) Vue en couche d'un FPGA

Le FPGA peut être vu comme une structure à deux couches (Figure 14):

Figure 14 : Vue en couche d'un FPGA [16]

- Une couche active ou couche logique qui comprend des ressources logiques, des

entrées/sorties, des ressources de routage, et éventuellement des blocs dediés.

- Une couche de configuration encore appelée mémoire de configuration et permettant de

programmer électriquement les caractéristiques des ressources de la couche active. En effet,
toutes les ressources logiques du FPGA sont contrôlées par le contenu de la «mémoire de

configuration» (chez Xilinx cette mémoire est à base de cellules SRAM1 volatiles, le FPGA doit donc être reconfiguré à chaque mise sous tension). Leur contenu fixe l'équation des LUTs, le routage des signaux, les entrées/sorties et leur tension ainsi que les paramètres de toutes les autres ressources du FPGA.

Pour programmer un FPGA, les instructions de contrôle de configuration ainsi que les données à écrire en mémoire de configuration sont fournies sous forme d'un bitstream qui est envoyé dans la puce via une interface de configuration (JTAG, SelectMap, Série,...).

b) Organisation de la mémoire de configuration et son influence sur la délimitation des modules reconfigurables

La mémoire de configuration du Virtex-II Pro est constituée d'un certain nombre de colonnes élémentaires de mémoires appelées Frames. Une Frame est la plus petite unité de mémoire reconfigurable individuellement dans un Virtex-II Pro ; elle est donc adressable individuellement sur 32 bits et permet ainsi aux FPGAs Xilinx d'être partiellement reconfigurables2. Une Frame occupe toute la hauteur du FPGA et chaque ressource programmable (CLBs, IOBs, IOIs, GCLKs, BRAMs) est constituée d'un certain nombre de frames (Error! Reference source not found.). Le nombre de Frames par ressource ainsi que la taille de la Frame dépendent

du type de FPGA et fixent la taille du fichier de configuration totale (Error! Reference source not found.). Par exemple dans un Virtex-II Pro XVP7 constitué de 1320 frames, on trouve 34 colonnes de CLBs, chacune comprenant 22 frames. A l'aide de la table 3, on peut refaire le calcul de ce nombre total de frames dans un Virtex-II Pro XVP7 comme suit :

Nbre_Frames_XVP7 = 2x4 IOB_frames + 2x22 IOI_frames + 34x22 CLB_frame

+ 6x64 BRAM_frames + 6x22 BRAMi_frames + 1x4 GCLK_frames = 1320 frames.

Reconfigurer partiellement un FPGA comme le Virtex-II Pro de Xilinx [24] consiste en la reconfiguration d'une ou plusieurs colonnes (plus précisement des Frames) de la mémoire de configuration. L'alignement en colonne des frames (et donc des ressources) sur la surface physique du FPGA explique le fait que, dans la reconfiguration partielle, on attribue exclusivement à un module les I/Os en contact avec la zone du FPGA attribuée au module. En effet, un module situé à l'extrémité gauche du FPGA engloberait forcément la première colonne d'entrées/sorties IOBs (figure 16) et serait ainsi le seul pouvant utiliser les entrées/sorties du côté gauche du FPGA.

1 Il est à noter qu'il existe plusieurs technologies de fabrication des FPGAs, et elles se distinguent généralement par le type de mémoire de configuration utilisé (SRAM, fuse et anti-fuse, etc...).

2 La société Atmel propose aussi des FPGAs à reconfiguration partielle, les AT40K, utilisant un système de mémoire cache de contextes de configuration très intéressant pour des applications de notre type.

Table 3 :Répartition des ressources en frames dans les FPGAs Virtex-II Pro

Table 4 : Taille des données de configuration dans la série Virtex-II pro

La Figure 15 montre le format d'une adresse de Frame et la Figure 16 montre le principe d'adressage des Frames. Par exemple, toutes les adresses ou le mot binaire BA1 = 00 adressent les colonnes de Frames configurant les GCLK, les IOB, les IOI et toutes les colonnes

1 Chaque frame de configuration a une adresse unique sur 32 bits composee des champs BA (Block Address), MJA (Major Address) et MNA (Minor Address) et un octet. Comme indique a la figure 16. BA indexe le bloc de ressources a configurer (par exemple les blocs BRAM), MJA identifie la colonne dans le bloc, MNA identifie la frame et l'octet sert de compteur de mots par frame. Un mot dans une frame ne pourrait etre adresse, voir [Xilinx 06] page 339 pour details.

de CLB alors que pour BA = 01 (resp. 10 ou 2 en decimal) on adresse les colonnes frames configurant les colonnes BRAM (resp. colonnes de BRAM INTerconnection). La valeur des bits MJA et MNA permet d'adresser une frame précise.

Dans un design modulaire, la largeur minimale admissible d'un module est de 4 Slices (plus précisément 4 colonnes de Slices correspondant à 2 colonnes de CLBs, car la hauteur d'un module est toujours égale à celle du FPGA). Reconfigurer partiellement un module revient à reconfigurer toutes les frames de ses ressources.

Figure 15 : Format d'adresse d'une Frame

Figure 16 : Adressage de la mémoire de configuration

c) Les modes de reconfiguration

La configuration des FPGAs Xilinx peut être effectuée de l'extérieur (à partir d'un PC par exemple, ou d'un microcontroleur) selon les modes suivants :

- Serial (Programmation série).

- JTAG / Boundary-Scan (Programmation via la sonde JTAG). - SelectMap1 (Programmation parallèle).

Et de l'intérieur par:

- Le port ICAP qui est une interface permettant d'accéder à la mémoire de configuration du FPGA. Cette interface est celle que nous avons utilisée pour la reconfiguration partielle du FPGA par le processeur PPC 405 intégré, mais avant, le FPGA doit avoir été configuré totalement par l'un des modes de reconfiguration extérieur cité ci-dessus.

1 SelectMap est une interface de configuration du FPGA depuis l'exterieur. Il permet d'accéder en lecture/écriture à la mémoire de configuration du FPGA suivant plusieurs modes. Pour les détails, voir [Xilinx 06] en page 306.

d) Le port de configuration interne ICAP

Le port ICAP (Figure 17) est un sous-ensemble de l'interface SelectMap. Il est physiquement présent sur le FPGA en bas a l'extrême droite de la puce. Il utilise le même protocole que SelectMap en mode esclave. Il est capital dans la mise en oeuvre de l'autoreconfiguration. En effet, il sert d'interface d'accès interne à toute la mémoire de configuration du FPGA et permet ainsi au processeur intégré de le reconfigurer partiellement. Dans [24] en page 317 sont précisées les précautions à prendre vis-a-vis des autres modes de configuration lors de l'utilisation du port ICAP.

Figure 17 : Port ICAP Figure 18: Architecture materielle pour

la reconfiguration via le port ICAP

Pour faciliter l'utilisation de l'ICAP, Xilinx fournit sous forme d' IP1 un Controleur d'ICAP2 (Figure 178) dont les détails peuvent être trouvés dans [25]. Le contrôleur est instancié comme périphérique du processeur PPC405 et implemente sous EDK à l'aide des ressources du FPGA. Il est connecté au bus OPB (On chip Peripheral Bus). Il utilise une BRAM de 16 Ko (suffisant pour contenir les données de configuration d'une Frame) qui sert de mémoire de cache aux données de configuration en provenance du bus pour le port ICAP (reconfiguration) ou vice versa (Readback) . La BRAM double port est connecté d'un coté au contrôleur d'ICAP et de l'autre au bus OPB.

Xilinx fournit également pour le contrôleur une couche logicielle (pilotes) sous forme de fonctions légères écrites en C (Error! Reference source not found.) et évitant d'avoir à gérer la communication entre le bus et l' ICAP. Par exemple l'écriture en mémoire de configuration du FPGA se fait en 2 temps (voir table 5):

1 Intellectual Property

2 Sur la figure 17, opb_hwicap est le nom d'instance choisi pour le contrôleur d'ICAP lors de son implémentation sous EDK comme périphérique du processeur. De même on le connecte à un bus (OPB) et on lui attribue une adresse d'implantation dans l'espace d'adressage du bus.

- La fonction storageBufferWrite( ) permet au processeur d'écrire un certain nombre de trames binaires (512 mots de 32 bits au maximum pour les 16Ko de BRAM) en BRAM de cache.

- La fonction deviceWriteFrame( ) permet ensuite au contrôleur de transférer ces trames précédemment écrites en BRAM vers le port ICAP qui les interprètent pour configurer le FPGA frame par frame. Ces trames proviennent des bitstreams de configuration partielle du FPGA et contiennent toutes les informations nécessaires à l'adressage et à la configuration d'une ou plusieurs frames.

Les fonctions storageBufferRead( ) et deviceReadFrame( ) jouent respectivement le même rôle que les deux précédentes mais plûtot dans le sens ICAP - Processeur PPC405 et servent donc à lire le contenu des frames du FPGA (Readback).

Table 5 : Fonctions permettant de lire et écrire en mémoire de configuration via le port ICAP

Figure 19 :L' Interface de configuration du Virtex-II Pro et ses registres

e) Analyse des trames de configuration1

1 Premieres et les dernieres lignes d'un fichier bitstream au format ASCII (.rbt)

Comme expliqué plus haut, configurer le FPGA revient à y envoyer à l'interface de configuration (Figure 19) un fichier bitstream de configuration sous forme de trames qui comprennent les données de contrôle de configuration et les données à écrire dans les frames de configuration pour programmer les ressources. On distingue globalement:

- Les trames d'écriture

- Les trames de lecture

- Les trames de synchronisation

- Etc...

[23] étudie en détails au chapitre 4 toutes ces trames et les registres cités dans l'exemple cidessous.

Les premières et les dernières lignes (il peut en avoir plusieurs milliers de lignes suivant la taille du module) d'un exemple de fichier bitsteam au format RBT apparaît plus haut. Il permet de reconfigurer un module du FPGA. Ce sont donc des trames d'écriture. Nous l'avons généré dans le cadre de ce projet. La trame de reconfiguration commence en ligne 8. On peut décrypter ces quelques lignes de trames comme suit [23] :

- Les 7 premières lignes représentent l'entête du fichier RBT ; elles renferment quelques renseignements.

- 0xff, 0xff, 0xff, 0xff : Mot inutile (ligne 8).

- 0xaa, 0x99, 0x55, 0x66 : Mot de synchronisation. Demande au FPGA de commencer à analyser les mots suivants.

- 0x30, 0x00, 0x80, 0x01 : Mot d'entête ; annonce une écriture de 1 mot dans le registre de commandes.

- 0x00, 0x00, 0x00, 0x07 : Remise à zéro du registre du CRC.

- 0x30, 0x01, 0xc0, 0x01 : Mot d'entête. Annonce l'écriture du code d'identification du FPGA (registre IDCODE).

- 0x01, 0x24, 0xa0, 0x93 : Code d'identification du FPGA

- 0x30, 0x00, 0x80, 0x01 : Mot d'entête. Annonce une écriture de 1 mot dans le registre de commande (registre CMD).

- 0x00,

0x00,

0x00,

0x01 : Initialise l'écriture des données de configuration

- 0x30,

0x00,

0x20,

0x01 : Mot d'entête. Annonce l'écriture de l'adresse de la colonne

élémentaire.

- 0x00, 0x48, 0x0c, 0x00 : Adresse de l'unité élémentaire à reconfigurer (voir figure 15 et figure 16).

- 0x30, 0x00, 0x40, 0xd4 : Mot d'entête. Annonce l'écriture de 212 mots de 16 bits de configuration. Nous indiquons ici la taille de l'unité élémentaire spécifique à chaque FPGA.

- En fin de fichier on a toujours la même séquence de trames, et le mot de fin est 0x00, 0x00, 0x00, 0x0D.

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy