Fascicule Finale PDF
Fascicule Finale PDF
Fascicule Finale PDF
net/publication/276409231
CITATIONS READS
0 1,146
2 authors:
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Bouraoui Ouni on 17 May 2015.
Université de Sousse
Ecole nationale d’ingénieurs de Sousse
Résumé
Les TP de reconfiguration des FPGA sont destinés aux étudiants de troisième année
ingénieur électronique industriel de l’option Systèmes Electroniques Embarqués.
Ils permettent aux étudiants ingénieurs d’approfondir leurs connaissances dans
l’électronique, la micro-électronique et à maîtriser tous ce qui est vu en cours systèmes
embarqués dans le langage de description matériel VHDL et sous l’éditeur ISE de Xilinx.
Objectif Général
Ces travaux pratiques visent à approfondir les compétences acquises par l’apprenant en
description matériel (VHDL) :
- Connaître les bases conceptuelles et physiques de l'électronique,
- Maîtriser les technologies de pointe et exploiter les connaissances acquises pour la
conception et la réalisation de systèmes dans les différents champs d'application de
l'électronique industrielle,
- Acquérir une approche scientifique dans la résolution des problèmes et approfondir
les connaissances complémentaires nécessaires au travail d'un ingénieur,
- Communiquer efficacement ses idées et travailler seul ou en équipe.
Contenu théorique
Annexes
3 éme E.I TP1
1- But de la manipulation
Les objectifs de cette manipulation sont les suivants :
Etudier les différents modes de reconfiguration d’un FPGA.
Déterminer les avantages et les inconvénients de chaque mode de reconfiguration.
2- Etude théorique
2-1- Région reconfigurable
Par définition, une région reconfigurable constitue l’ensemble de ressources matérielles où
se fait l’implémentation physique du design. En effet, la surface de le FPGA avec ses divers
éléments logiques, de mémorisation et arithmétiques représente une région reconfigurable
pour le placeur de design.
2-2 Les différents modes de reconfiguration
2-2-1 Reconfiguration sans région reconfigurable
La reconfiguration sans région reconfigurable utilise tout le FPGA à chaque configuration,
c'est-à-dire toutes les ressources matérielles sont occupées pendant l’exécution d’une
application alors qu’elles ne sont pas réellement utilisées comme l’illustre la figure 1.
Eniso 2014-2015 1
3 éme E.I TP1
Eniso 2014-2015 2
3 éme E.I TP1
Eniso 2014-2015 3
3 éme E.I TP1
Eniso 2014-2015 4
3 éme E.I TP1
Eniso 2014-2015 5
3 éme E.I TP1
3. Editer ensuite le nom des entrées/Sorties, et leurs caractéristiques (in/out, bus/bit). Cette
étape est facultative. Cliquer Next puis Finish.
Eniso 2014-2015 6
3 éme E.I TP1
Etape 3 : Synthèse
1. Sélectionner le module et double clic sur Synthesize – XST dans la fenêtre de dessus.
2. On voit alors dans la console la synthèse qui s’effectue et le rapport des erreurs et des
warnings. Corriger les erreurs éventuelles, les warnings peuvent être ignorés.
Etape 4 : Simulation
Pour la simulation nous devons créer un fichier Test Bench, qui est un fichier VHDL qui
permet de créer des stimulus pour les entrées.
Pour créer un TestBench :
1. Clic droit sur la cible et New Source.
2. Sélectionner VHDL Test Bench et donner un nom, ici test, puis cliquer Next.
3. Sélectionner le module à tester, cliquer Next, puis Finish.
4. Dans la fenêtre Design en haut, il y a deux boutons radio, sélectionner Simulation. On voit
alors apparaître le Test Bench et son module associé.
5. Pour ajouter des stimulus, double clic sur test. En déroulant le code, on trouve une ligne de
commentaire Stimulus process, mais dans notre cas on utilise Clock process definitions,
ajouter les stimulus ici :
Eniso 2014-2015 7
3 éme E.I TP1
Eniso 2014-2015 8
3 éme E.I TP1
Eniso 2014-2015 9
3 éme E.I TP1
Eniso 2014-2015 10
3 éme E.I TP1
Eniso 2014-2015 11
3 éme E.I TP1
Eniso 2014-2015 12
3 éme E.I TP1
Questions :
1. Remplir le tableau suivant pour les trois modes de reconfiguration à l’aide des rapports
dans la fenêtre Design Summary > Detailed Reports
Eniso 2014-2015 13
3 éme E.I TP2
1- But de la manipulation
2- Etude théorique
2-1 Définitions
La mémoire vive ou aussi appelée RAM (Random Access Memory) (mémoire à accès
direct), est une mémoire dans laquelle une unité de calcul place les données lors de leur
traitement. La mémoire vive (RAM) est généralement une mémoire volatile au contraire de la
mémoire morte (ROM) : les données contenues dans la mémoire vive seront perdues dés
qu’une coupure d'alimentation électrique se produit. Donc, la mémoire vive se trouve dans un
état indéterminé dés le début de fonctionnement.
Une mémoire vive statique est une mémoire vive qui n'a pas besoin de rafraîchissement. Le
rafraîchissement de la mémoire est un processus qui consiste à lire périodiquement les
informations d'une mémoire et les réécrire immédiatement sans modifications, dans le but de
prévenir la perte de ces informations.
Eniso 2014-2015 14
3 éme E.I TP2
Cette mémoire utilise le principe des bascules électroniques pour enregistrer l'information.
Elle est très rapide, par contre, elle est chère et volumineuse. Elle consomme moins
d'électricité que la mémoire dynamique. Elle est utilisée pour la mémoire cache, par exemple
les mémoires caches L1, L2 et L3 des microprocesseurs.
Cette mémoire est une variante de la Static Random Access Memory (SRAM) où on utilise
un port double qui permet des accès multiples quasi simultanés, en entrée et en sortie.
Cette mémoire utilise la charge magnétique de l'électron pour enregistrer l'information. Elle
possède un débit de l'ordre du gigabit par seconde, un temps d'accès comparable à la mémoire
DRAM (~10 ns) et elle est non-volatile. Elle a commencé à être commercialisée en 2006.
Cette mémoire utilise le changement de phase du verre pour enregistrer l'information. Elle
est non-volatile. Elle a commencé à être commercialisée en 2012.
Une mémoire vive dynamique est une mémoire qui a besoin de rafraîchissement. La
DRAM a une structure simple, en effet, un pico-condensateur et un transistor pour un bit,
permet d'obtenir une mémoire dense à coût minime. Son inconvénient réside dans les courants
de fuite des condensateurs : l'information disparaît à moins que la charge des condensateurs
ne soit rafraîchie avec une période de quelques millisecondes. D'où le terme de dynamique.
La mémoire interne du FPGA de Xilinx possède la structure présentée dans la figure 1(pour
plus d’information voir annexe). Elle contient généralement deux ports A et B. Chaque port
est constitué par des bus d’adresses, de données et de contrôle. Ces bus permettent la lecture
et l’écriture dans la mémoire.
Eniso 2014-2015 15
3 éme E.I TP2
Figure.1 : BRAM
La figure 2 montre le principe de fonctionnement de BRAM. Tout d’abord, la mémoire est
initialisée par exemple à la valeur FFFF dans l’adresse a0, à la valeur ABCD sur le bus de
données et à 1001 (0=lecture, 1= écrire) sur le bus de contrôle. Ensuite, au front montant de
l’horloge, nous remarquons que le continu et la valeur de sortie de la mémoire prennent la
valeur AFFD.
Figure.2 : Chronogramme
Dans cette manipulation nous allons étudier la mémoire RAMB16_S2_S4 (voir annexe).
Ores et déjà, nous allons choisir à utiliser le port A. Le composant RAMB est déclaré comme
suit:
component RAMB16_S2_S4
port (
DIA : in STD_LOGIC_VECTOR (1 downto 0);
DIB : in STD_LOGIC_VECTOR (3 downto 0);
Eniso 2014-2015 16
3 éme E.I TP2
ENA : in STD_logic;
ENB : in STD_logic;
WEA : in STD_logic;
WEB : in STD_logic;
SSRA : in STD_logic;
SSRB : in STD_logic;
CLKA : in STD_logic;
CLKB : in STD_logic;
3- Travail demandé
3-1 Précautions.
Eniso 2014-2015 17
3 éme E.I TP2
Eniso 2014-2015 18
3 éme E.I TP2
Eniso 2014-2015 19
3 éme E.I TP2
Etape 3 : Synthèse
1. Sélectionner le module et dans la fenêtre de dessous, double clic sur Synthesize – XST.
2. On voit alors dans la console la synthèse qui s’effectue et le rapport des erreurs et des
warnings. Corriger les erreurs éventuelles, les warnings peuvent être ignorés.
Eniso 2014-2015 20
3 éme E.I TP2
Etape 4 : Simulation
Pour la simulation nous avons besoins de créer un fichier Test Bench, qui est un fichier
VHDL qui permet de créer des stimulus pour les entrées.
Pour créer un TestBench :
1. Clic droit sur la cible et New Source.
2. Sélectionner VHDL Test Bench et donner un nom, ici test, puis cliquer Next.
3. Sélectionner le module à tester, cliquer Next, puis Finish.
4. Dans la fenêtre Design en haut, il y a deux boutons radio, sélectionner Simulation. On voit
alors apparaître le Test Bench et son module associé.
5. Pour ajouter des stimulus, double clic sur test. En déroulant le code, on trouve une ligne de
commentaire Stimulus process et Clock process definitions.
6. Proposer des stimulus sur les entrées pour tester notre application.
7. Pour lancer la simulation, cliquer sur le Test Bench à simuler, et dans la fenêtre des
process, double clic sur Simulate Behavioral Model. ISE lance alors Isim. Il est possible que
Isim plante, il faut quitter Isim et le relancer autant de fois qu’il plante en double cliquant sur
Simulate Behavioral Model.
Eniso 2014-2015 21
3 éme E.I TP2
4. Sélectionner I/O Ports > All ports. Puis saisir les informations de tous les pins (voir
annexe).
5. Sélectionner File > Save Design et exit le PlanAhead
6. Pour vérifier tous les contraints temporelles et l’emplacement de différents pins
d’entrées/sorties ouvrir le fichier ".UCF".
7. Implémenter le design sur la carte FPGA et vérifier le fonctionnement du
BRAM "RAMB16_S2_S4 ".
Eniso 2014-2015 22
3 éme E.I TP3&4
1- But de la manipulation
2- Etude théorique
Eniso 2014-2015 23
3 éme E.I TP3&4
Début de l’exécution
Configuration Exécution
On vielle à ce que les tâches soient plus au moins de même taille. Le partitionnement
d’une application est itératif car il est difficile de juger la taille d’une partition avant le
placement et le routage. Il faut créer une partition initiale comme modèle en vue d’obtenir des
partitions de taille équivalente. Il convient à signaler que la reconfiguration dynamique totale
a des inconvénients qui sont l’origine de la complexité de l’opération. En premier lieu, Si on
n'est pas capable de le faire, l'usage des ressources de le FPGA ne sera pas efficace. En
second lieu, un problème de transition d’une configuration à une autre se pose en cas de
dépendance des données. Des configurations produisent des données intermédiaires qui
formeront les données d'entrées de la prochaine configuration chargée. Elles doivent être ainsi
construites d'une manière très rigoureuse en tenant compte des différentes phases de
l'application pour que les données intermédiaires soient correctement gérées. En dernier lieu,
ces configurations remplaçables restent respectivement dans le circuit durant une période
Eniso 2014-2015 24
3 éme E.I TP3&4
déterminée, néanmoins presque tous les outils de développement considèrent chacune d’elles
comme un modèle statique.
La conception des applications avec la reconfiguration dynamique partielle est basée sur
un partitionnement fonctionnel. Ces partitions ne doivent pas être entièrement exclusives
puisque elles peuvent être toutes actives en même temps, alors qu'avec la RDT il n'y a qu'une
seule partition qui est active à un instant donné. Toutes ces partitions ou opérations de la RDP
peuvent être considérées comme des modules indépendants qui sont chargés dans les FPGAs.
La figure 3 suivante illustre le principe de la reconfiguration dynamique partielle.
Eniso 2014-2015 25
3 éme E.I TP3&4
2.4-Wrapper
Pour travailler en reconfiguration dynamique partielle, il est nécessaire d’avoir une partie
statique et une partie dynamique ou reconfigurable. La région reconfigurable est fixe dans le
FPGA, les modules s’intégrant à cette région, sont soumis à certaines contraintes physiques.
Ils doivent avoir un Wrapper identique à la région reconfigurable, et donc un Wrapper
identique entre eux. Ce Wrapper est l’interface de communication entre la partie
reconfigurable et le reste du système, autrement dit, ce sont les entrées et les sorties des
modules. Les modules doivent avoir en commun, le nombre d’entrées/sorties, les noms des
entrées et des sorties et leur taille, comme le montre la figure 4 suivante.
Eniso 2014-2015 26
3 éme E.I TP3&4
Chaque bit d’entrées/sorties est connecté à une interface de communication (Bus macro,
Slice Bus Macro ou Pins Partition). On Voit donc qu’avec cette méthode on est limité en
flexibilité, bien que l’on puisse créer d’autres régions reconfigurables, les modules sont
dépendants du Wrapper de la région à laquelle ils appartiennent. D’autres méthodes avec
Wrapper dynamique, pourront être utilisées.
Le flux de communications entre les modules est routé d’une façon arbitraire pour la
reconfiguration dynamique totale. Par contre, les contraintes spatiales de la reconfiguration
dynamique partielle exigent le cheminement de flux de communication entre les modules
reconfigurables et les autres modules par un bus spécialisé appelé bus macro.
Eniso 2014-2015 27
3 éme E.I TP3&4
Le bus macro est la seule moyen qui assure la connexion des modules reconfigurables
avec le reste de l’architecture c'est-à-dire tout les signaux doivent passer à travers le bus
macro. Sauf les signaux globaux tels que l’horloge, Vcc et GND se sont traités par l’outil de
conception. Le bus macro à subi une évolution au niveau de sa structure et son constitution ce
qui a permis d’avoir une diversité des bus macro.
En effet, pour construire des bus macro de grande taille selon l’application nous faisons
l’instanciation des plusieurs composants de bus pris de la bibliothèque sous le format
‘‘.nmc’’. Par exemple, les données sont de taille de huit bits donc nous allons construire un
bus macro constitué par deux instances de bus de la bibliothèque.
Les nouveaux bus macro se basent sur des LUT comme illustre la figure 5 contrairement
aux anciens bus macro qui se basent sur les contrôleurs (buffers) à trois états qui sont
commandés suivant le sens voulu de droite à gauche au inversement.
Les bus sont classés selon le sens, la largeur et le temps de synchronisation dans plusieurs
types.
Sens: Selon la direction de signal de donnée nous utilisons les bus macro qui convient
soit de droite à gauche (R2L) ou de gauche à droite (L2R).
Eniso 2014-2015 28
3 éme E.I TP3&4
3- Travail demandé
3-1 Précautions
La manipulation est réalisée avec l’outil ISE10.1 et une carte de développement Virtex II
PRO, Il conviendra donc de faire les changements appropriés en fonction de la carte de
l’utilisateur. Les modules utilisés sont un compteur modulo 3, décompteur modulo 3, un
afficheur.
Eniso 2014-2015 29
3 éme E.I TP3&4
Eniso 2014-2015 30
3 éme E.I TP3&4
5. Editer ensuite le nom des entrées/Sorties, et leurs caractéristiques (in/out, bus/bit). Cliquer
Next puis Finish.
Etape 3 : Synthèse.
1. Sélectionner le module et dans la fenêtre de dessous, clic droite sur Synthesize – XST >
Properties > Xlinx Specific Options puis décocher Add I/O Buffers.
2. On voit alors dans la console la synthèse qui s’effectue et le rapport des erreurs et des
warnings. Corriger les erreurs éventuelles, les warnings peuvent être ignorés.
Etape 4 : Simulation.
1. Proposer des stimulus sur les entrées pour vérifier le fonctionnement de module
Le module global est le module top qui contient les différents modules statiques et
reconfigurables. Dans notre manipulation on doit allumer quatre diodes leds en utilisant soit le
compteur avec l’afficheur soit le décompteur avec l’afficheur. En effet, on a deux
Eniso 2014-2015 31
3 éme E.I TP3&4
1. Répéter l’étape 2 précédente et ajouter les fichiers ".vhd " nécessaires au projet pour créer
le module top de la première configuration C1.
Etape 2 : Synthèse.
1. Sélectionner le module et dans la fenêtre de dessous, clic droite sur Synthesize – XST >
Properties > Xlinx Specific Options puis cocher Add I/O Buffers.
Etape 3 : Implémentation.
Cette phase consiste à spécifier les pins d’entrées/sorties et les contraintes temporelles (s’il
existe des horloges dans le design) dans un fichier UCF (User Contraints File).
3. Assigner les pins d’entrées/sorties de le FPGA aux ports convenables de design dans notre
cas les 4 diodes leds et l’horloge. En outre, sélectionner le module et dans la fenêtre de
Eniso 2014-2015 32
3 éme E.I TP3&4
dessous, dérouler la plus à côté de User Contraints. Puis, double clic sur Floorplan
Area/ IO/ Logic - Post Synthesis, puis cliquer yes.
4. Saisir les informations de tous les pins. Puis enregistrer et fermer le Floorplanner.
library work;
use work.busmacro_xc2vp_pkg.all;
Eniso 2014-2015 33
3 éme E.I TP3&4
component BUFGP is
port (I : in std_logic;
O : out std_logic);
end component;
Editer le mappage entre les composants comme indique la figure 15. Ainsi, le bus
macro utilisé est le busmacro_xc2vp_l2r_async_narrow.
Eniso 2014-2015 34
3 éme E.I TP3&4
2. Sélectionner le module et dans la fenêtre de dessous, clic droite sur Synthesize – XST >
Properties > Synthesis Options > Keep Hierarchy > Yes. Puis au niveau de Cores Search
Directories saisir les différents chemins de chaque module et en fin cliquer ok et Run
Eniso 2014-2015 35
3 éme E.I TP3&4
Pour placer les modules dans le FPGA il faut utiliser toute la hauteur du FPGA.
Sélectionner le module puis Floorplan>Assign Area Constraint et choisir
l’emplacement du module dans le FPGA. Finalement, enregistrer et fermer le
Floorplanner.
5. Ajouter l’instruction suivante au niveau de fichier ".ucf " pour tous les modules actifs.
AREA_GROUP "AG_nom de module" MODE=RECONFIG;
Les modules actifs sont les modules reconfigurables et les modules statiques. Nous allons
commencer par le module compteur et de la même façon on va construire les autres modules.
map top.ngd
Eniso 2014-2015 36
3 éme E.I TP3&4
Eniso 2014-2015 37
3 éme E.I TP3&4
Dans cette section on va créer les bitstreams total et partiel. Tout d’abord, nous allons
créer le bitstream total pour réaliser la première configuration. Donc on doit saisir la
commande suivante :
Eniso 2014-2015 38
3 éme E.I TP3&4
Eniso 2014-2015 39
Annexes
1- RAMB16_Sm_Sn :
16384-Bit Data Memory and 2048-Bit Parity Memory, Dual-Port Synchronous Block
RAM with Port Width (m or n) Configured to 1, 2, 4, 9, 18, or 36 Bits.
Data Parity Address Data Parity Data Parity Address Data Parity
Component
Cellsa Cellsa Bus Bus Bus Cellsa Cellsa Bus Bus Bus
RAMB16_S9_S9 2048 x 8 2048 x 1 (10:0) (7:0) (0:0) 2048 x 8 2048 x 1 (10:0) (7:0) (0:0)
RAMB16_S9_S18 2048 x 8 2048 x 1 (10:0) (7:0) (0:0) 1024 x 16 1024 x 2 (9:0) (15:0) (1:0)
RAMB16_S9_S36 2048 x 8 2048 x 1 (10:0) (7:0) (0:0) 512 x 32 512 x 4 (8:0) (31:0) (3:0)
RAMB16_S18_S18 1024 x 16 1024 x 2 (9:0) (15:0) (1:0) 1024 x 16 1024 x 2 (9:0) (15:0) (1:0)
RAMB16_S18_S36 1024 x 16 1024 x 2 (9:0) (15:0) (1:0) 512 x 32 512 x 4 (8:0) (31:0) (3:0)
RAMB16_S36_S36 512 x 32 512 x 4 (8:0) (31:0) (3:0) 512 x 32 512 x 4 (8:0) (31:0) (3:0)
Each port is fully synchronous with independent clock pins. All port A input pins have
setup time referenced to the CLKA pin and its data output bus DOA has a clock-to-out time
referenced to the CLKA. All port B input pins have setup time referenced to the CLKB pin
and its data output bus DOB has a clock-to-out time referenced to the CLKB.
The enable ENA pin controls read, write, and reset for port A. When ENA is Low, no data
is written and the outputs (DOA and DOPA) retain the last state. When ENA is High and reset
(SSRA) is High, DOA and DOPA are set to SRVAL_A during the Low-to-High clock
(CLKA) transition; if write enable (WEA) is High, the memory contents reflect the data at
DIA and DIPA. When ENA is High and WEA is Low, the data stored in the RAM address
(ADDRA) is read during the Low-to-High clock transition. By default,
WRITE_MODE_A=WRITE_FIRST, when ENA and WEA are High, the data on the data
inputs (DIA and DIPA) is loaded into the word selected by the write address (ADDRA)
during the Low-to-High clock transition and the data outputs (DOA and DOPA) reflect the
selected (addressed) word.
The above descriptions assume active High control pins (ENA, WEA, SSRA, CLKA, ENB,
WEB, SSRB, and CLKB). However, the active level can be changed by placing an inverter on
the port. Any inverter placed on a RAMB16 port is absorbed into the block and does not use a
CLB resource.
Inputs Outputs
GSR ENA SSRA WEA CLKA ADDRA DIA DIPA DOA DOPA RAM Contents
No Chg1 No Chg1
0 1 0 1 addr data pdata RAM (addr) RAM(addr)2 RAM(addr) =>data RAM(addr) =>pdata
2
data3 pdata3
2- Afficheur 7 segments :
3- Diodes LEDS :
4- Boutons poussoirs :
5- Switcheurs :
6- Horloge :