• Aucun résultat trouvé

6.8 Implémentation physique en utilisant les outils de Xilinx

6.8.1 Création du système dans EDK

6.8.1.1 L’architecture

Comme expliqué au début du chapitre, dans l’application Downscaler, il s’agit du redimensionnement des images d’une vidéo pour passer du format CIF (Common In- termediate Format : 352x288 pixels) en des images de taille 132x128 pixels. Les images redimensionnées seront affichées successivement sur l’écran (un moniteur connecté au FPGA). L’architecture sur laquelle l’application Downscaler sera exécutée est illustrée dans la figure 6.24. Elle contient un processeur MicroBlaze pour exécuter les tâches logicielles de l’application et pour communiquer avec les accélérateurs matériels et les périphériques. La mémoire locale du processeur est implémentée par les BRAMs du FPGA. L’architecture contient aussi 4 accélérateurs dont deux (h f ilter_0 et h f ilter_1) sont dédiés au filtre horizontal et les 2 autres (v f ilter_0 et v f ilter_1) au filtre vertical. Ces accélérateurs ont une interface slave (SPLB) et une interface master (MPLB) avec le bus PLB. L’interface slave est partagée entre le contrôleur et la région contrôlée pour communiquer avec le processeur. L’interface master est utilisée seulement par la région contrôlée pour communiquer avec le bus afin de permettre le transfert des données entre la région contrôlée et la mémoire externe sans passer par le processeur. La mémoire externe utilisée ici est une DDR3. Cette mémoire est accessible à travers un contrôleur de mémoire. Un contrôleur TFT (Thin Film Transistor) est utilisé afin d’afficher successi- vement les images redimensionnées de la vidéo sur l’écran. L’architecture contient aussi

un UART (Universal Asynchronous Receiver Transmitter) afin d’afficher des messages sur un hyperterminal permettant de suivre l’évolution de l’application et du contrôle. Les boutons poussoirs sont utilisés ici pour donner différentes valeurs au niveau de performance requis durant l’exécution. Ce changement de niveau de performance est traité comme une interruption par le processeur. Pour cela, un contrôleur d’interruption est utilisé. Le capteur de niveau de batterie est émulé par une IP développée en suivant le même principe utilisé dans la simulation de la section 6.6 (un mode de chargement et un mode de déchargement). Un Timer est utilisé afin de déterminer, entre autres, les temps requis pour l’exécution des filtres selon la configuration active. Un contrôleur d’ICAP est utilisé pour communiquer avec l’ICAP afin de réaliser les reconfigurations partielles. Les bitstreams partiels sont stockées dans un CompactFlash. Pour y accéder, un contrôleur System ACE est utilisé. Ce CompactFlash contient aussi le système à charger initialement dans le FPGA (une combinaison entre le bitstream total initial et du logiciel à exécuter par le processeur). La vidéo à traiter est aussi stockée dans le CompactFlash. On pourrait remplacer cela par une entrée caméra. Enfin, l’architecture contient aussi le coordinateur qui est connecté aux contrôleurs des régions reconfigurables.

La figure 6.25 illustre l’implémentation de l’architecture avec l’outil EDK 12.4 de Xilinx en indiquant les interfaces des différents composants. Les interfaces représentées par des carrés sont des interfaces master et celles représentées par des cercles sont des interfaces slave du bus PLB (en jaune), ou du bus local (en bleu) permettant la connexion entre le processeur et les contrôleurs de sa mémoire locale (implémentée par des BRAMs). Les fréquences utilisées pour cette architecture sont 100MHz pour le processeur, 200MHz pour la DDR3, 100MHz pour l’ICAP et 25MHz pour le TFT. Les autres périphériques fonctionnent à 100MHz.

6.8.1.2 Intégration du contrôle semi-distribué

La figure 6.26 illustre l’intégration du contrôleur dans l’accélérateur matériel implé- mentant le filtre horizontal. Lors de la création d’une IP dans l’outil EDK, lorsqu’on active les options de la logique master (pour implémenter l’interface master) et le burst (dont nous expliquerons l’utilité plus tard), l’IP générée contient trois composants : 1) le plbv46_slave_burst, 2) le plbv46_master_burst_01_v1 et 3) le userlogic. Les deux premiers

composants sont des enveloppes d’interface permettant l’adaptation entre les interfaces PLB slave et master et les interfaces IPIC utilisées par tous les IP-Core Xilinx indépen- damment du bus utilisé (OPB, PLB ou AXI). Pour intégrer le contrôleur dans cette IP, il faut l’intercaler entre l’enveloppe de l’interface slave et le composant user_logic puisqu’ici l’interface slave du bus est partagée par le contrôleur et la région contrôlée. Il faut aussi ajouter le port lié au capteur de niveau de batterie et ceux liés au coordinateur en tant que ports de l’IP. Le composant user_logic instancie un composant h f ilterPRR. C’est ce composant qui va être placé dans une région reconfigurable. Le code VHDL de ce module n’est pas intégré dans le système puisque plusieurs implémentations sont possibles pour ce module. Donc, seule l’interface externe du module est déclaré dans le module user_logic.

Pour le coordinateur, il suffit juste de l’adapter au format Xilinx, en lui créant un fichier PAO (Peripheral Analyze Order) pour la déclaration des fichiers vhdl qu’il

|ht !]

FIG. 6.25 – Arborescence des composants du système dans l’outil EDK

HFilterController user_logic plbv46_slave_burst plbv46_master_burst_01_v1 SPLB MPLB IPIC slave IPIC slave IPIC master battery_level battery_level hfilterPRR to_coordinator from_coordinator hfilter

Ressources occupées Mode

HFilter_mode1 HFilter_mode2 HFilter_mode3

Number of Slice Registers 1846 1097 733

Number of Slice LUTs 3597 1997 1154

Number of Block RAM/FIFO 1 1 1

V Filter_mode1 V Filter_mode2 V Filter_mode3

Number of Slice Registers 2221 1317 865

Number of Slice LUTs 4369 2408 1441

Number of Block RAM/FIFO 1 1 1

TAB. 6.9 – Ressources occupées par les différentes implémentations des filtres

contient et un fichier MPD (Microprocessor Peripheral Description) pour déclarer, entre autres, ses ports. Pour l’intégration des contrôleurs, il s’agit de modifier les fichiers PAO et MPD pour prendre en compte les nouveaux fichiers VHDL et les nouveaux ports par rapport à ceux de l’IP générée par Xilinx. Ensuite, il faut établir la communication entre les IPs h f ilter_0, h f ilter_1, v f ilter_0, v f ilter_1 et le coordinateur. Les ports liés à la communication avec le coordinateur ne sont pas déclarés en tant que records VHDL dans le fichier MPD de l’IP h f ilter, puisque ce fichier ne supporte pas ces types de données. Pour cela, les ports liés à la communication du module h f ilter doivent être déclarés séparément (décomposer les records) et liés aux champs correspondants des ports to_coordinator et f rom_coordinator du module HFilterController.

Après l’intégration du contrôle, la partie statique du système est synthétisée. Les différentes versions des modules h f ilterPRR et v f ilterPRR sont synthétisées séparément comme nous expliquerons dans la sous-section suivante. Les résultats de synthèse (partie statique et les différentes versions des modules de reconfigurables) seront ensuite intégrés dans l’outil PlanAhead pour implémenter les différentes configurations du systèmes et en générer les bitstreams nécessaires.