Mémoire :
Mise en OEuvre de l'auto reconfiguration
partielle
et dynamique sur un FPGA Xilinx Virtex-II
Pro
Présenté par : Guy WASSI
LEUPI
En vue de l'obtention du :
Spécialité :
Informatique Industrielle et
Systèmes
Automatisés (IISA)
Laboratoire d'accueil
ETIS ENSEA - Université de Cergy
Soutenu le 07 Mars 2006
Jury :
Michel Drouin, Président
Véronique Perdereau, Responsable de la
formation
Amine Benkhelifa, Encadrant de stage
RESUME
Pour faire face à la complexité algorithmique et
aux exigences de flexibilité des applications futures (systèmes
de radio Communication 3G et 4G par exemple), de nouvelles approches doivent
être envisagées dans la conception des architectures
numériques. Dans ce contexte, les architectures reconfigurables
dynamiquement présentent des atouts considérables car elles
offrent le meilleur compromis Flexibilité/Performance. Les FPGAs (Field
Programmable Gate Array) sont les composants reconfigurables les plus denses et
flexibles, permettant des manipulations au niveau bit. Aujourd'hui, il existe
des plateformes mixtes (FPGA et Processeur intégré dans un SOC
unique une seule puce) permettant d'envisager l'auto-reconfiguration partielle
du FPGA sous le contrôle de son processeur embarqué. Dans une
telle configuration, la partie FPGA serait un accélérateur
matériel dont les fonctionnalités évolueraient et
s'adapteraient aux contextes, et ce sans interruption de service.
Mais les environnements de développement fournis par
les constructeurs de telles plateformes n'intègrent pas encore le flot
de conception des applications auto-reconfigurables. Certes les outils tels que
JBits API (Application Programming Interface) permettent de manipuler
sélectivement les ressources configurables des FPGAs Xilinx à
partir d'un PC. Mais JBits nécessite que JVM (Java Virtuel Machine)
tourne sur le processeur hôte, ce qui peut ne pas être souhaitable
dans le cas d'un système embarqué.
Ce rapport présente la mise en oeuvre d'une approche
modulaire (Modular Design Flow) de l'auto-reconfiguration dynamique et
partielle sur un FPGA Virtex-II Pro de Xilinx, le processeur PPC405
intégré reconfigurant dynamiquement et partiellement le FPGA via
un port interne. Pour cela nous avons développé une application
basée sur une API1 ICAP de Xilinx écrite en C et
permettant de lire/écrire/modifier la mémoire de configuration du
FPGA via l'interface interne ICAP (Internal Configuration Access Port). Bien
entendu cette API est assez légère pour tourner sur le processeur
PPC405 embarqué.
1 Application Programming
Interface
SOMMAIRE
|
Sommaire
Abréviations
Liste des figures
Liste des tableaux
Remerciements
|
2 5
5
6 5
|
1
|
INTRODUCTION
|
8
|
1.1
|
Le Contexte
|
8
|
1.2
|
But du stage
|
9
|
1.3
|
Travaux similaires
|
10
|
1.4
|
Environnement de travail
|
10
|
1.5
|
Plan du rapport
|
11
|
2
|
FPGA, RECONFIGURATION DYNAMIQUE ET CONCEPTION DE SYSTEMES
|
12
|
|
EMBARQUES
|
|
2.0
|
Introduction
|
12
|
2.1
|
Implémentation logicielle vs implémentation
matérielle d'une application
|
14
|
2.1.1
|
Implémentation logicielle
|
14
|
2.1.2
|
Implémentation matérielle
|
14
|
2.1.3
|
Partitionnement Matériel / Logiciel
|
15
|
2.2
|
Architecture des FPGAs (Field Programmable Gate Array)
|
16
|
2.2.1
|
Introduction
|
16
|
2.2.2
|
Principe de fonctionnement et Architecture Interne des FPGAs
|
16
|
2.2.3
|
Exemple d'architecture de FPGA : la série Virtex-II Pro de
Xilinx
|
18
|
2.2.4
|
Détails de quelques unes des ressources du Virtex-II Pro
|
19
|
a)
|
Les CLBs (Configurable Logic Blocks - Blocs de logiques
configurables)
|
19
|
b)
|
Les SLICES
|
19
|
c)
|
Les blocs multiplieurs 18 x 18 bits
|
20
|
|
d)
|
Le processeur PowerPC 405
|
21
|
2.3
|
Les divers scenarii de reconfiguration des FPGAs
|
22
|
2.3.1
|
Les modèles de reconfiguration
|
22
|
a)
|
La reconfiguration à contexte unique (Single Context)
|
22
|
b)
|
La reconfiguration multi-contextes (Multi-Context)
|
22
|
c)
|
La reconfiguration partielle ( Partially Reconfigurable)
|
23
|
|
2.3.2
|
Configuration du Virtex-II Pro de Xilinx
|
24
|
a)
|
Vue en couche d'un FPGA
|
24
|
b)
|
Organisation de la mémoire de configuration et son
influence sur la délimitation des modules reconfigurables
|
25
|
c)
|
Les modes de reconfiguration
|
27
|
d)
|
Le port de configuration interne ICAP
|
28
|
e)
|
Analyse des trames de configuration
|
30
|
3
|
METHODOLOGIES DE MISE EN OEUVRE DE L'AUTO-RECONFIGURATION
|
32
|
|
PARTIELLE ET DYNAMIQUE SUR LE VIRTEX-II PRO
|
|
3.1
|
Méthodologie de conception
|
33
|
3.1.1
|
Flot de conception standard (Ordinary Design Flow)
|
34
|
3.1.2
|
Le Flot de conception incrémentale (Incremental Design
Flow)
|
35
|
a)
|
La synthèse incrémentale
|
36
|
b)
|
Le Placement et Routage (P&R) Incrémental
|
36
|
3.1.3
|
Le Modular Design Flow pour la reconfiguration partielle
|
36
|
a)
|
Présentation
|
36
|
b)
|
Modular Design pour la reconfiguration partielle
|
37
|
|
3.2
|
Principe de l'Auto-Reconfiguration partielle et dynamique
|
38
|
3.2.1
|
De la reconfiguration partielle
|
38
|
3.2.2
|
De l'auto-reconfiguration dynamique
|
39
|
3.3
|
Exemple de mise en oeuvre d'une application auto-reconfigurable
sous ISE et EDK...
|
39
|
3.3.0
|
Introduction
|
39
|
3.3.1
|
La plateforme matérielle de développement, la carte
Virtex-II Pro de Memec Design
|
40
|
3.3.2
|
Conception sous EDK du module << Système a
processeur »
|
42
|
a)
|
Architecture du système
|
42
|
b)
|
Création de la plateforme matérielle du
système sous Xilinx EDK
|
43
|
c)
|
Création de la plateforme logicielle
|
45
|
d)
|
Gestion de la mémoire et génération du
linker script
|
45
|
e)
|
Implémentation du système à processeur
|
46
|
3.3.3
|
Conception sous ISE du design global <<Top » suivant
le Modular Design Flow
|
47
|
a)
|
Création des codes sources
|
47
|
b)
|
Etape de synthèse des fichiers sources
|
48
|
|
c)
|
Etape d'Initial Budgetting
|
50
|
d)
|
Etape d'Active Module Implémentation
|
51
|
e)
|
Etape de Final Assembly
|
52
|
f)
|
Etape de génération du bistream final
|
52
|
3.4
|
Récapitulatifs
|
53
|
4
|
DIFFICULTES RENCONTREES, CONCLUSION ET PERSPECTIVES
|
55
|
4.1
|
Difficultés rencontrées
|
55
|
4.1.1
|
Les restrictions physiques à la reconfiguration partielle
des FPGAs Xilinx
|
55
|
4.1.2
|
Les outils
|
56
|
4.2
|
Conclusion
|
57
|
4.3
|
Perspectives
|
58
|
4.3.1
|
Implémenter les bus macros pour les connexions
inter-modules
|
58
|
4.3.2
|
Utiliser XMS , le fichier de système de Xilinx
|
58
|
4.3.3
|
Implanter l'interface de Ethernet
|
58
|
4.3.4
|
OS temps réels pour la gestion de la ressource FPGA
|
59
|
A.
|
ANNEXES
|
60
|
A-1
|
ANNEXE 1: Les Outils
|
60
|
A-1.1
|
L'outil Floorplanner (Editeur de contraintes de placement, cas de
2 modules)
|
60
|
A-1.2
|
FPGA Editor (Routage avec bitstream complet)
|
60
|
A-2
|
ANNEXE 2: Procédure de création du fichier
SYSTEM.BMM
|
61
|
A-2.1
|
Fichier system_stub.bmm
|
61
|
A-2.2
|
Le fichier system.bmm
|
62
|
A-3.
|
ANNEXE 3: Utilisation de la Plate-forme de démonstration
|
62
|
A-3.1
|
Génération des bitstreams à partir des du
répertoire Modular
|
62
|
A-3.2
|
Paramètres de configuration de l'HyperTerminal
|
63
|
A-3.3
|
Message d'accueil de la demo
|
64
|
A-3.4
|
Exemple de début et fin de fichier RBT (module
compteur_rapide)
|
65
|
A-4.
|
ANNEXE 4 : Listing des programmes
|
66
|
A-4.1
|
Le code VHDL du Top (top.vhd)
|
66
|
A-4.2
|
Code VHDL d'un design du module reconfigurable
(compteur_lent.vhd)
|
69
|
A-4.3
|
Fichier de contraintes (top.ucf)
|
71
|
A-4.4
|
Les codes sources des programmes développés en C
pour le processeur PPC405.
|
73
|
A-4.5
|
Les fichiers de commande .batch pour le Modular
Design Flow
|
82
|
|
RÉFÉRENCES BIBLIOGRAPHIQUES
|
85
|
|