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

3.3.2 Conception sous EDK du module « Système à processeur »

[26] est un tutorial de référence pour cette conception. Il s'appuie sur un exemple simple permettant de tester l'Uart. Quelques autres exemples existent sur le site de Xilinx.

a) Architecture du système

Les différents blocs de cette figure sont disponibles soit sous forme d'IPs prêts à être implementés à l'aide des ressources logiques du FPGA, soit directement présents en blocs ASICs sur la puce FPGA (PPC405, ICAP, JTAG). Les composantes essentielles de ce système sont :

- Le Processeur PPC405

- Le bus PLB (Processor Local Bus) auquel est directement relié le processeur ; il est plus

rapide.

- Le contrôleur de BRAM (PLB_Bram_if_ctrl) qui permet d'associer une BRAM au bus

PLB ; cette BRAM servira de mémoire de données et/ou de programme au processeur.

- Le bus OPB (On-chip Peripheral Bus) permettant de connecter les autres périphériques

plus éloignés du processeur.

- Le pont PLB-OPB (Plb2Opb_Bridge) reliant les deux bus.

- Le bloc OPB_GPIO permettant de gérer les entrées/sorties utilisateurs (LEDs, Switch,

ecran LCD) suivant la plateforme de développement choisie.

- Le bloc OPB_UARTLite implémentant une interface série UART allégée qui nous

permettra de faire communiquer le système à processeur embarqué avec un ordinateur PC via l'application Hyperterminal sous Windows. Côté PC, l'HyperTerminal nous permettra d'interagir avec le système embarqué (à travers le clavier et le terminal émulés) et d'envoyer les fichiers de configuration au système à processeur via le port série du PC. Pour cela nous écrirons côté Processeur PPC405 le programme permettant ce genre d'échanges de données avec l'HyperTerminal1.

- Le bloc OPB_HWICAP qui est le contrôleur permettant d'utiliser le port ICAP.

- Le bloc OPB_EMC qui est le contrôleur de mémoire extérieur (Flash ou SRAM) ; dans

notre cas, nous avons utilisé une SRAM de 1 Mo externe à la puce et se trouvant sur la carte de développement utilisée.

- Le bloc PLB_ETHERNET qui implémente une interface réseau ; nous n'avons pas

implémenté ce bloc dans le design final car nous n'en avions pas besoin dans l'immédiat.

b) Création de la plateforme matérielle du système sous Xilinx EDK

A travers son interface graphique XPS, EDK permet de rajouter de façon interactive au processeur les blocs présentés figure 26, et d'unifier tout cet ensemble dans un design unique au niveau top (qu'il appelle par défaut system.vhd).

Les étapes essentielles sont les suivantes [26] :

- Démarrer XPS (Start ? Programs ? Xilinx Platform Studio 7.1i ? Xilinx Platform Studio).

- Créer un projet a l'aide "Base System Builder" XPS (File ? Project ? Base System Builder).

- Choisir un répertoire de travail (par exemple SELF_RECONF_PLATFORM de la Figure 27, sans espace sur le chemin).

- Choisir la carte de développement ciblée (dans notre cas c'est la carte Virtex-II Pro P4 FG456 Development Board de Memec Design).

- Configurer le processeur PPC (on peut laisser les fréquences par défaut proposées par BSB et choisir 100 Mhz comme fréquence du bus).

- Choisir les périphériques à utiliser sur la carte (LEDs, Switches, RS232 Uart, Boutons poussoirs).

1 HyperTerminal est un programme qui permet de se connecter à d'autres ordinateurs, à des sites Telnet, aux forums électroniques (BBS), aux services en ligne et aux ordinateurs hôtes, à l'aide d'un modem, d'un câble null-modem ou d'une connexion TCP/IP (Winsock).

- Rajouter les périphériques du processeur sur les bus appropriés suivant le schéma de la Figure 27 (ne pas oublier de rajouter de la mémoire interne BRAM de 16 ou 32 Ko et de la mémoire externe SRAM ou Flash de 1 Mo, pour l'instant le bloc PLB_Ethernet peut ne pas être ajouté).

- Générer la plateforme matérielle.

A l'issue de cette génération interactive de la plateforme matérielle, XPS aurait ainsi créé dans le répertoire SELF_RECONF_PLATFORM le fichier projet system.xmp , les fichiers (.mhs et .mss) décrivant l'architecture du système et quelques autres répertoires de la Figure 27(a).

Figure 26 : Architecture du système a processeur.

Figure 27 : Structure des répertoires du Projet

Les adresses d'implantations sont attribuées automatiquement aux différents périphériques dans l'espace d'adressage du bus auquel ils sont connectés. Mais la plateforme matérielle (les adresses, les paramètres des blocs IP, l'Ajout/Suppression de blocs IP, etc...) peut être modifiée ultérieurement de façon interactive (Project - Add/Edit Cores....).

c) Création de la plateforme logicielle Ceci se déroule en deux étapes :

- Génération des pilotes pour les blocs de la plateforme matérielle ainsi que des librairies

avec la commande Project - Software Platform Setting. Les fenêtres apparaissant permettent de choisir les versions des drivers du processeur et des périphériques (laisser les valeurs par défaut) , les librairies Xilinx à utiliser ( par exemple cocher Xilnet si on utilise le bloc Ethernet...), le compilateur à utiliser ( powerpc-eabi-gcc est le compilateur par défaut), les entrées/sorties standard du processeur (Stdin/Stdout, ici ce sera l'Uart). Ensuite les librairies peuvent être générées ( Tools - Generate Libraries and BSPs).

- Développement des applications pour le processeur embarqué. Sur la fenêtre System en

haut à gauche sous XPS permettant de voir l'architecture de la plateforme générée, on peut cliquer sur Applications pour voir les applications destinées au processeur. Cette fenêtre permet de créer de nouveaux projets pour le processeur, d'ajouter les programmes à éxecuter, et d'indiquer au processeur la mémoire de boot (Bram ou Sram), etc... A ce stade, Xilinx fournit des programmes simples (hello word, xil_printf,...) permettant de tester la plateforme en utilisant le clavier et l'ecran d'un PC comme des entrées/sorties standards du processeur via l'Uart et l'HyperTerminal.

d) Gestion de la mémoire et génération du linker script

Notre architecture comprend une mémoire (BRAM) interne au FPGA et connectée au bus PLB et une mémoire externe SRAM (SRAM de 1 Mo se trouvant sur la carte d'extension P160 Comm) connectée au bus OPB. A cause de leur petite taille et de leur distribution sur la puce (il serait très coûteux en ressources FPGAs de les associer et de les connecter au bus PLB), les BRAM ne sont pas appropriées comme mémoire de stockage des bitstreams de configuration. Ces dernières peuvent etre stockés en SRAM externe.

Le processeur démarre toujours par un programme initial de boot en BRAM et peut ensuite être dérouté vers un programme se trouvant en mémoire SRAM externe à l'aide de XMD1.

Le Linker script est un fichier de script indiquant les sections du code et les zones mémoires qui les contiendront. Il sert lors de la compilation du code sous EDK. Lors de la génération automatique du fichier Linker script, toutes les sections du code sont automatiquement mises en mémoire BRAM par défaut. Dans notre application, il est nécessaire de modifier ce fichier pour

1 Xilinx Microprocessor Debugger se lance sous EDK par Tools - XMD ; il permet de charger en SRAM externe l'executable .elf et de brancher le processeur sur ce code. En effet, lorsqu'on fait Tools - Update Bitstream, un programme est chargé par défaut dans la BRAM interne (Bootloop.c). C'est une boucle infinite 'exécut é par le processeur. Pour que le processeur BOOT sur un programme il faut aller a la fenetre «Application», cliquer droit sur le projet Software concerne et choisir «Initialize BRAM». Le

envoyer certaines sections en mémoire SRAM externe1 (comme la section .data par exemple car c'est celle dans laquelle les bitstreams de configurations seront chargées) ; en effet la BRAM n'est pas assez capacitive pour contenir les fichiers bitstreams des modules.

e) Implémentation du systeme à processeur

On peut à présent générer le fichier bitstreams correspondant à la plateforme matérielle générée plus haut, afin de configurer le FPGA. Pour cela il faut choisir ajouter au projet un fichier de contraintes (.ucf) spécifiant les connexions des les options de projet. A ce stade, deux cas se présentent :

(i) Déroulement de tout le flot sous EDK afin de tester et valider le module.

Project - Options - Hierarchy and flow (This is the toplevel of my design) - Synthesis Tool (ISE XST ) - Implementation tool flow (XPS_Xflow) - Ok

Tools - Clean , Tools - Generate libraries

Tools - Built user application : génère l'exécutable destiné au processeur.

Tools - Generate netlist : fait la synthèse de la plateforne matérielle (fichiers .ngc).

Tools - Generate bitstream : génère le fichier system.bit permettant de configurer le FPGA et d'y implémenter la plateforme matérielle de la Figure 26.

Tools - Update bitstream : associe l'exécutable (.elf) destiné au processeur au fichier system.bit de configuration du FPGA et génère en fichier unique download.bit téléchargeable dans le FPGA. Cette commande lancée toute seule déroule automatiquement les étapes précédentes de la génération des librairies à la génération du fichier download.bit.

A ce niveau, l'outil Impact permet de configurer le FPGA avec le fichier download.bit. A la fin de la configuration du FPGA, le processeur exécute le programme chargé en mémoire. On peut alors vérifier et valider les plateformes matérielles et logicielles du système.

Remarque: Il peut arriver que le lancement du programmateur de FPGA depuis XPS échoue ; dans ce cas démarrer l'outil Impact...

Démarrer-9 Programmes - Xilinx ISE 7.1i -9Accessoires Æ Impact

...ensuite choisir le mode de programmation (Boundary Scan par exemple), puis joindre le fichier download.bit et programmer le FPGA.

programme choisi pour initialiser la BRAM est celui dont l'exécutable ( .elf) servira a générer le fichier download.bit.

1 Pour envoyer certaines sections du code en mémoire SRAM, on peut le faire graphiquement (voir [Xilinx 08]) ou manuellement en éditant le fichier Linker_script et en redirigeant les sections du type data (.data, .sdata), .sbss, et .text vers la SRAM. Bien entendu les sections de boot voire la pile (stack) peuvent rester en BRAM pour accélerer l'exécution.

Le déroulement entier du flot sous EDK génère les répertoires suivants (Figure 27.a) :

- Le répertoire hdl qui contient les fichiers vhdl du module system et de ses composantes (IPs). Ces fichiers sont générés automatiquement à la génération de la plateforme matérielle sous EDK.

- Le répertoire « Synthesis » qui contient tous les fichiers de synthèse générés lors de la génération de la Netlist sous EDK (Tools - Generate Netlist).

- Le répertoire « Implémentation » crée par EDK pour stocker tous les fichiers de netlist nécessaire à implémenter le module fixe (system).

(ii) Exportation du système à processeur vers ISE comme module fixe d'un design

global.

Apres avoir testé et validé le module dans un flot totalement intégré sous EDK, on doit changer les options du projet afin d'exporter ce module vers ISE comme module fixe du design Top de la Figure 24 de la façon qui suit:

Project - Options - Hierarchy and flow (This is a submodule of my design)

- Synthesis Tool (ISE XST ) - Implementation Tool flow (XPS_Xflow) - Ok

Le processus est ensuite identique au cas (i) ci-dessus jusqu'à la génération de la netlist (Tools - generate netlist), suivi par l'exportation du module vers ISE par la commande : Tools - Export to ProjNav. En effet, dans ce cas de figure, les bitstreams ne sont pas générés sous EDK.

Remarque : L'exportation du module vers ISE crée automatiquement un projet ISE s'il n'existe pas encore.

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