Vous êtes sur la page 1sur 39

Université des Sciences et de la Technologie Houari

Boumediene
Faculté de Génie électrique

Département d’électronique

Travaux Pratiques
ElEctroniquE numériquE
avancéE : FPGa - vHDl
Master 1ére année

Élaboré par: Mr. Djamel ADDOU


USTHB/FEI TP-FPGA-VHDL

AVANT-PROPOS

Ce fascicule de travaux pratiques présente un ensemble d’études de


simulations et expérimentales couvrant le programme du module FPGA. Les séances,
étalées sur quatre manipulations, sont classées dans le même ordre chronologique que
celui des chapitres du cours.
Il aidera à mieux s’imprégner de la théorie exposée en cours en permettant sa
mise en pratique au laboratoire.
Il est enrichi par des condensés de cours où l’étudiant pourra trouver des
rappels relatifs aux méthodes de travail en laboratoire.
Il comprend, à la fin de chaque TP, une partie de différentes applications à
implémenter. Evidemment, l’enseignant garde toute la latitude de modifier les
applications simulables et synthétisables que celles déjà indiquées.

Chaque expérience décrite comporte :

 Le but de la manipulation qui résume le travail à réaliser.


 Le rappel théorique qui donne un condensé du cours.
 Le travail de préparation qui consiste à aider l’étudiant à retrouver les
résultats de simulation. Ce travail doit être impérativement effectué avant la
manipulation.
 La manipulation proprement dite.

Mr. Djamel ADDOU

S O MM A I R E
TP1 : Guide pratique du logiciel Xilinx ISE : Saisie du flot de conception d’un circuit numérique
TP2 : Structuration et Simulation des Systèmes Combinatoires Simples
TP3 : Développement d’un système numérique Séquentiel : Bascules et Registres
TP4 : Structuration et Simulation des Systèmes Séquentiels Simples : Compteurs

D. ADDOU
2
USTHB/FEI TP-FPGA-VHDL

Travaux Pratiques
Circuits logiques programmables : FPGA-VHDL

Guide de démarrage
Les TP vont être faits sur des cartes Digilent qui embarquent un FPGA Xilinx. Ces cartes
incluent également des entrées sorties telles que : Switches, Leds, afficheur 7-segments,
oscillateur, ...

Vous devez téléchargez et installez XilinxISE 8.1 (Integrated Software Environment). Cet outil
est gratuit (version web pack : version dédiée au laboratoire). Veuillez noter que vous devez,
aussi, télécharger et installer Logiciel Digilent Adept. Le logiciel contient les pilotes pour la
carteque vous avez besoin et fournit également l'interface pour programmer le FPGA.

ISE 8.1 est un environnement intégré de développement de circuits numériques. Il permet


l‘implémentation matérielle sur un FPGA de la compagnie Xilinx dont la programmation des
designs de ce FPGA est effectuée sous trois formes principales
• Schémas,
• Schémas de description matérielle (HDL) comme VHDL;
• Diagrammes d’états.

ISE 8.1 intègre donc différents outils permettant de passer à travers tout le flot de conception
d’un circuit numérique :
• Un éditeur de textes, de schémas et de diagrammes d’états ;
• Un compilateur VHDL/Verilog ;
• Un outil de simulation ;
• Des outils pour la gestion des contraintes temporelles ;
• Des outils pour la synthèse ;
• Des outils pour la vérification ;
• Des outils pour l’implantation sur FPGA.

.Dans notre laboratoire, des conceptions numériques seront implémentées dans la carte
Basys2
qui a un FPGA Xilinx Spartan3E –XC3S500E avec le package CP132. Cette partie FPGA,
d’environ 500K portes, appartient à la famille Spartan des FPGA. Ces cartes de
développement sont disponibles dans une variété de packages. Nous utiliserons des cartes
emballées dans un boîtier à 132 broches portant le numéro de référence suivant :
XC3S500ECP132.
Des informations détaillées sur ces cartes sont disponibles sur le site Xilinx
https://www.xilinx.com/support/documentation/data_sheets/ds312.pdf

D. ADDOU
3
USTHB/FEI TP-FPGA-VHDL

TP1
Guide pratique du logiciel Xilinx ISE 8.1:
Saisie du flot de conception d’un circuit numérique

1. But du TP
L’objectif du TP1 est la prise en main de l'outil de simulation et de programmation (Xilinx ISE 8.1).
Ce TP1, référencé comme guide, permettra d’énumérer et décrire les étapes simples pour :
Créer un projet dans ISE 8.1;
Décrire un circuit numérique à l’aide d’une description hiérarchique, basée sur un
schéma ou à base d’un programme VHDL;
Simuler le circuit ;
Synthétiser et implémenter le circuit via un FPGA ;
Programmer le FPGA de la carte de développement utilisée, pour vérifier et valider le
fonctionnement du circuit.
2. Créer un nouveau projet
Les outils Xilinx peuvent être lancés en cliquant sur l'icône du navigateur de projet sur le bureau
Windows. Cela devrait ouvrir la fenêtre Project Navigator sur votre écran. Cette fenêtre affiche
(fig.1) le dernier projet accédé (Veuillez le fermer), Choisir : File > Close Project

Fig. 1 : Écran principal du navigateur de projet de Xilinx ISE.

D. ADDOU
4
USTHB/FEI TP-FPGA-VHDL

Pour créer un nouveau projet, il faut :

1. Choisir : File > New Project. L'écran de saisie de nouveau projet apparaîtra.
2. Entrer nom du projet pour « Project Name ». Exemple : "TP1"
il est ajouté automatiquement au nom du répertoire contenant le projet.
3. Sélectionner le répertoire de votre travail >> Exemple : C:\TP-FPGA\TP1 dans le
champ « Project Location ».
4. Sélectionner Schematic pour Top-Level Source Type, et cliquer sur Next.

Fig. 2 : Écran de saisie du nom du projet et de sa localisation.

5. Sélectionner les valeurs suivantes dans la fenêtre ˝ New Project Wizard Device Properties"
Product Category: All
Family: Spartan3E
Device: XC3S500E
Package: FG320
Speed:-4
Top-Level source Type : Schematic
Synthesis Tool: XST (VHDL/Verilog)
Simulator: ISE Simulator (VHDL/Verilog)
PreferredLanguage: VHDL.

6. Cliquer sur Next 3 fois, et ensuite Finish pour compléter la création du nouveau
projet.

Fig. 3 : Écran de saisie des caractéristiques du projet.

D. ADDOU
5
USTHB/FEI TP-FPGA-VHDL

3. Description du circuit numérique en mode schématique


On se propose dans cette démonstration de concevoir un demi-additionneur. Ce circuit arithmétique
de base accepte 2 bits (a et b) en entrée et les additionne. Il a deux sorties: une retenue et une somme.
Ainsi, les fonctions à réaliser sont:
Somme= a « xor » b et Retenue = a « and » b
Pour créer un nouveau schéma, il faut :

1. Dans le navigateur ISE, Choisir : Project > New Source.


2. Sélectionner Schematic comme type de source.
3. Entrer Demiadd comme nom de fichier.
4. Cliquer sur Next et ensuite sur Finish. Un nouveau schéma appelé demiadder est
, ajouté au projet et ouvert pour édition.

Fig. 4 : Fenêtre pour ajout d’un nouveau fichier.

Pour saisir le schéma de l'additionneur "demiadder", il faut :

1. Dans la barre de menu, cliquer sur Add> Symbol ou sur l'icône de la barre d’outils,
la fenêtre des symboles s'ouvre à gauche du la fenêtre du schéma affichant la liste des
librairies disponibles ainsi que la liste des composants de chaque librairie (Fig.5).
2. Sélectionner la librairie Logic dans « Categories ».
3. En sélectionnant respectivement, and2, et xor2, ajouter toutes les portes de l'additionneur.

4. Dans la barre de menu, cliquer sur Add>Wire ou sur l’icône de la barre d’outils pour
ajouter les liaisons entre les symboles.

5. Dans la barre de menu, cliquer sur Add> I/OMarker ou sur l’icône pour ajouter les
connecteurs d’entrée/sortie. Choisir le type de connecteurs dans la fenêtre « Processes » à
gauche du schéma et cliquer ensuite sur l’extrémité du fil auquel on souhaite ajouter le
connecteur.

D. ADDOU
6
USTHB/FEI TP-FPGA-VHDL

6. Dans la barre de menu, cliquer sur Add>Text ou sur l’icône pour ajouter au coin
inférieur gauche de la feuille, les noms et matricules des étudiants, le numéro de sous-groupe
et le numéro du TP.

Fig.5 : Fenêtre des symboles.

Vous devriez obtenir le schéma final suivant (Fig. 6) :

Fig. 6 : Schémas du demi-additionneur.

D. ADDOU
7
USTHB/FEI TP-FPGA-VHDL

Pour finir, vérifier votre schéma avec le bouton de la barre d’outil de dessin ou en
sélectionnant dans barre menu Tools>Check Schematic. Vérifier les messages dans la
console au bas de l’écran. S’il y a des erreurs, corrigez-les et recommencer la vérification.
Pour sauvegarder le schéma, cliquer dans la barre de menu sur File > Save ou sur l'icône

de la barre d'outil.

4. Simulation comportementale
La simulation comportementale permet de vérifier le fonctionnement du circuit avant son
implémentation et ne tient pas compte des délais de propagation et des caractéristiques temporelles.

4.1 Création des vecteurs de test ou stimuli (test bench)

1. Dans le navigateur ISE, Choisir Project > New Source.


2. Sélectionner Test BenchWaveForm comme type de source.
3. Entrer demiaddtb comme nom de fichier.
4. Cliquer sur Next 2 fois et ensuite sur Finish. Une nouvelle fenêtre s'affiche (Fig.7 à
gauche).
5. Cette fenêtre permet d’effectuer une initialisation temporelle (détermination des
paramètres de l’horloge et de certaines contraintes temporelles) apparaît. Vu que nous
travaillons en combinatoire, il faut cocher l’option combinatorial (or internal clock)
dans le cadre clock information.Modifier ensuite la durée de la simulation : Mettez là à
1500 ns (initial Length of Test Bench).
6. Cliquer ensuite sur Finish.
Un nouveau fichier de vecteur de test appelé demiaddtb est créé, ajouté au projet et ouvert
pour édition.
7. Modifier les entrées. Pour inverser une entrée donnée, il suffit de cliquer sur le signal à
l'instant ou on souhaite l'inverser. Et, avec le bouton droit de la souris, cliquer sur le début
de la courbe (juste à côté de la zone grise) correspondant au signal de l’entrée a; et
sélectionner set value.
8. Dans la fenêtre qui s’ouvre choisir pattern wizard. Et, modifier les valeurs de pulse
width et initial delay à une valeur 4 cycles (Fig.7 à droite). Cliquer sur Ok
9. Répéter les mêmes étapes pour l’entrée b, avec comme valeurs 2 cycles.
10. Sauvegarder le fichier obtenu en cliquant dans la barre de menu sur File > Save

D. ADDOU
8
USTHB/FEI TP-FPGA-VHDL

Fig.7 : Écran de saisie des caractéristiques temporelles (cas du combinatoire).

4.2 Lancement de la simulation comportementale

1. Dans la fenêtre « Sources », sélectionner Behavioral Simulation dans le champ


«Sources for : ».
2. Sélectionner le fichier de stimuli (demiaddtb).
3. Dans la fenêtre « process », cliquer sur + à coté de « Xilinx ISE Simulator ».
4. Pour commencer la simulation comportementale, double cliquer sur Simulate
Behavioral Model.
5. Pour consulter les résultats de simulation, sélectionner l'onglet Simulation dans la
fenêtre principale.
Après simulation du circuit, vérifier et commenter les résultats de la simulation
comportementale.
Sauvegarder le banc d’essai avec File >Save.
5. Synthèse et implémentation du circuit numérique

Viens ensuite la phase de synthèse ("Synthetize XST") puis de placement et de routage


("Implement Design"). Ainsi, la synthèse consiste à traduire la description du circuit en blocs
disponibles dans la technologie utilisée. Par exemple, pour un circuit décrit avec un schéma et qui
doit être réalisé sur un FPGA, le processus de synthèse convertit et regroupe les portes logiques du
schéma en composantes réalisables sur le FPGA choisi.
L’implémentation du circuit est divisée en quatre sous étapes:
• la transformation (mapping) : regrouper les composantes obtenues lors de la synthèse dans
des blocs spécifiques du FPGA;

D. ADDOU
9
USTHB/FEI TP-FPGA-VHDL

• la disposition (placement) : choisir des endroits spécifiques sur le FPGA où disposer les
blocs utilisés, et choisir les pattes du FPGA correspondant aux ports d’entrée et de sortie;
• le routage (routing) : établir des connexions entre les blocs utilisés;
• la configuration (configuration) : convertir toute cette information en un fichier pouvant être
téléchargé sur le FPGA pour le programmer.
Pendant l’étape de disposition de l’implémentation, il faut assigner des broches spécifiques du
FPGA à des ports d’entrée et de sortie de son design. Pour le design présent, les ports d’entrée sont
a et b et les ports des sortie sont somme et retenue. Cette assignation des ports se fait par l’entremise
d’un fichier de contraintes avec l’extension « .ucf » (pour user constraints file):

1. Dans la fenêtre sources, sélectionner Synthesis/Implementation


2. Dans la fenêtre Process, dérouler le menu User Constraints et double-cliquer sur Assign
Package Pins.
3. Dans la fenêtre suivante cliquer sur Yes pour créer automatiquement le fichier
d’assignation (.ucf) des ports du FPGA.
4. Une fenêtre d’assignation de broches va s’ouvrir. Entrer, dans la section Loc du menu
Design Object List – I/O Pins, les numéros des broches reliant le FPGA à votre circuit
(fig. 8).
Exemple : K18 pour a, H18 pour b, J14 pour somme et J15 pour retenue (à vérifier sur la
carte). Cela a pour effet de connecter les entrées aux commutateurs SW0 et SW1 et les
sorties aux diodes émettrice de lumière LD0 et LD1 de la carte Nexsys2.
5. Sauver les allocations effectuées en sélectionnant File_Save. Sélectionner XST Default
<> pour le type de sauvegarde. Cliquer sur Ok et fermer la fenêtre d’assignation des
broches.
6. Dans la fenêtre Sources, sélectionner le fichier "demiadd.sch"
7. Dans la fenêtre Process double cliquer sur Generate Programming File. Attendre
quelques minutes et vous devriez obtenir le schéma suivant indiquant que les étapes de
synthèse ont bien été effectuées (Fig. 9).

Fig. 8 : Table de location des broches

Fig. 9 : Chaines de compilation

D. ADDOU
10
USTHB/FEI TP-FPGA-VHDL

8. L'implémentation est l'étape de transformation de la description du circuit en fichier de


programmation "BIT file". Donc, il vous reste à positionner le mode de l’horloge utilisé
lors du chargement du FPGA. Sélectionnez "demiadder.sch", puis dans la fenêtre
processes, cliquez droit sur Generate Programming File et dans le menu déroulant sur
Process Properties. Positionnez la FPGA Start-UPClock à JTAGClock dans Startup
Options (fig. 10). A ne pas oublier, pour chaque nouveau projet, il faudra lors de la
première compilation vérifier ce paramètre.

Fig. 10 : Interface JTAG

9. Enfin, afin de programmer et de communiquer avec la carte Nexys2, lancer le logiciel


Adept Digilent. Cliquer sur l’icône
10. Connecter la carte Nexsys2 à votre ordinateur avec un câble USB. Cliquez sur le menu
déroulant en surbrillance représenter en figure 11 et sélectionnez le nom de la carte avec
laquelle vous essayez de communiquer, puis l'application Adept devrait détecter votre carte
peu après.

Fig. 11 : Connexion de la carte Nexys2

11. Après les étapes précédentes, la chaîne doit être initialisée automatiquement, mais vous
pouvez aussi cliquer sur "Initialisation de la chaîne" pour initialiser manuellement.
Maintenant nous somme prêt pour programmer les composants.
12. Lorsque vous essayez de programmer le FPGA, Cliquez sur le bouton Parcourir sur l'icône
du dispositif FPGA, sélectionnez votre fichier de configuration (*.bit) et cliquez sur le

D. ADDOU
11
USTHB/FEI TP-FPGA-VHDL

bouton Ouvrir. Après cela, le programme de la puce FPGA par un clique droit sur l'icône
du dispositif FPGA et sélectionnez "Device Program" ou simplement cliquer sur le bouton
"Program" sur la droite (Fig. 12).

Fig. 12 Chargement du code produit par ISE sur le FPGA de la carte Nexys2

13. Lorsque vous essayez de sauvegarder dans la PROM, Cliquez sur le bouton Parcourir à
l'icône du périphérique PROM, sélectionnez votre fichier de configuration (*.bit) et cliquez
sur le bouton Ouvrir. Après cela, programmer la PROM par un clic droit sur l'icône du
périphérique PROM et sélectionnez "Device Program" ou simplement frapper le bouton
"Program" sur la droite. Nous pouvons également effacer la PROM avant de la
programmer.
14. Enfin, si la programmation a été faite avec succès, nous devrions être en mesure de voir si
nos projets et chargements fonctionnent réellement bien sur la carte.

6. Description du circuit numérique en mode VHDL


1.Refaire les étapes de la section 3 et choisir le « top-level source type» HDL au lieu de
shematic.
2. Sélectionner le menu Project New Source.

D. ADDOU
12
USTHB/FEI TP-FPGA-VHDL

3. Sélectionner VHDL Module comme source et entrer le nom du design que vous
allez concevoir.

4. Vérifier que l’option add to project est cochée.


5. Cliquer sur Next
6. Déclarer les ports d’entrée/sortie du design comme définis ci-contre.

7. Cliquer sur Next et ensuite sur Finish. Une ébauche du fichier apparaît avec la description
de l’entité et de l’architecture.

8. Dans la description de l’architecture, en dessous de l’énoncé begin, insérer les fonctions


permettant de calculer la somme et la retenue, tel que montré ci-dessous.

D. ADDOU
13
USTHB/FEI TP-FPGA-VHDL

Une fois le fichier VHDL édité, il est conseillé de vérifier la syntaxe du design afin de trouver
des erreurs de syntaxe, de typographie :
1. Vérifier que synthesis/implementation est sélectionné dans la liste déroulante de la fenêtre
sources.
2. Sélectionner le fichier VHDL VHDL_didacticiel pour afficher les processus liés dans la
fenêtre process.
3. Cliquer sur le « + » à coté de synthesize-XST.
4. Double-cliquer sur le processus check syntax. Si tout va bien, un crochet vert apparaît.
Sinon, consulter les messages d’erreur dans la console au bas de l’écran.
5. Corriger les erreurs s’il y a lieu, puis fermer le fichier VHDL.
6. Refaire les étapes des sections 4. et 5.

7. Application

Il vous est demandé de réaliser un soustracteur complet 1 bit (a, b, et Cin représentent les entrées et
d et Cout pour les sorties) en mode schématique et le faire valider son implémentation par votre
enseignant.

D. ADDOU
14
USTHB/FEI TP-FPGA-VHDL

Annexe TP1 :

Carte de Développement Xilinx Nexsys2

ASSIGNATIONS DES BROCHES

Bouton – Poussoir : Au niveau bas, il passe au niveau haut quand il est pressé.

Interrupteurs : à deux positions (bas : 0 et haut : 1)

D. ADDOU
15
USTHB/FEI TP-FPGA-VHDL

TP2
Structuration et Simulation des Systèmes
Combinatoires Simples
1. But du TP
Dans ce TP, vous allez réaliser votre première conception
simple qui va vous permettre de découvrir les entrées et sorties
de la carte Nexys2. Par la même occasion, ce TP vise à fournir Consignes
une initiation à l’utilisation des outils de Xilinx et Digilent. De  Faire valider le code par l’enseignant
par sa simplicité, c’est aussi un bon exemple pour comprendre avant la programmation de la carte ;
le fonctionnement de la chaîne de transformation : comment à  Faire valider chacune des applications
partir d’un code de description ou un schéma de circuit vous par l’enseignant ;
allez, par ISE, produire un fichier toplevel.bit. Ce fichier est
 Il vous est conseillé de faire un compte-
ensuite chargé sur la carte afin d’implanter sur celle-ci le circuit
spécifié dans ISE.
rendu et le rendre à la fin de séance TP.

2. Rappel du cours : Structure d’un module VHDL


2.1 Description d’un système numérique :
Par le biais du langage VHDL, la description passe par 3 étapes différentes. L’ensemble est
contenu dans un fichier source portant l’extension *.vhd .
a) La déclaration des ressources externes
-- On retrouve en en-tête du fichier source *.vhd
(bibliothèques) ; library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

b) La description de l’entité du système, correspondant à la liste des entrées/sorties ;


L’entité permet de spécifier les différents ports entityTP2i s
d’entrées/sorties du système. Pour chacun d’entre eux, il est port(
indispensable de donner sa direction : a , b :inSTD_LOGIC ;
s :outSTD_LOGIC) ;
In entrée simple ;out sortie simple endTP2
Buffer sortie rétroactive ;inout entrée-sortie bidirectionnelle

c) La description de l’architecture correspondant à la définition des fonctionnalités du système.


architectureBehavorial of TP2 is
Une architecture est reliée à une entité et permet de décrire le
--déclaration des signaux
fonctionnement du système. Cette description peut être de deux Begin
types : Processus1 ;
Description comportementale : le comportement du système Processus2 ;
est décrit (description la plus couramment utilisée enVHDL) ; …
End Behavorial
Description structurelle : description réservée à des fonctions
simples ou précalculées.

D. ADDOU
16
USTHB/FEI TP-FPGA-VHDL

2.2 Objets en VHDL 2.3 Types en VHDL


Signal objet physique, associé à des événements bit, bit_vector, integer, boolean : type de base
Variable intermédiaire de calcul, non physique std_logic, std_logic_vector, signed, unsigned : type IEEE
constant

2.4 Opérations en VHDL 2.5 Notations


LOGIQUES :and, nand, or, nor, xor, xnor, not bit : '0' ou '1' ;
DÉCALAGE :sll, slr, sla, sra, rol, ror bit_vector : "0100";
RELATIONNELS : =, /=, <, >, <=, >= ASCII : "Texte";
ARITHMÉTIQUES : +, -, *, /, MOD Décimal : 423;
AFFECTATION : <= Hexadécimal : x"1A"

2.6 Instructions en VHDL


Affectation
conditionnelle sélective For… generate
>>>
x<= a when cond1 else withexpr select for iinMIN to MAX
b whencond2 else, x<= a whenval1, generate
Hors … b when val2, Instructions de description;
processus z; …
end loop;
z when
others ;

Test>>> SI CAS Blocs répétitifs Temporisation


If x="0" then casex is for iin 0 to 5loop wait until
y <=’0’; when "00" => y<="0"; instructions; Clk ‘event and
Dans elsif x="01" then when "01" => y<="10"; end generate; clk=’1’;
y <=’0’; when others => y<="11";
end if ; whilei<5loop instructions;
processus end case
instructions;
end loop;

Syntaxe :
Remplissage d’un
Label : process(liste des signaux de sensibilité) Détecteur d’un front
bit_vector
Nom des objets internes : types ; -- si nécessaire
--Front montant --tous les bits à 0
begin
ifclk ‘event andclk=’1’ then … X<= (others=>’0’);
...
--Front descendant --tous les bits à 1
endprocess;
ifclk ‘event andclk=’0’ then … X<= (others=>’1’);

3. Manipulation : Décodeur Hexa - 7 segments


Pour cette première expérience, nous aborderons les dispositifs les plus fondamentaux de la carte
NEXSYS, le segment de switch et l’afficheur LED 7-segment. La première partie est assez simple:
utiliser 4 interrupteurs SW0 à SW3 pour représenter un nombre de 4-bit binaire dont la valeur peut
évidemment s’afficher en hexa entre 0-F.

D. ADDOU
17
USTHB/FEI TP-FPGA-VHDL

Pour commencer, il faut créer un décodeur hexadécimal vers 7 segments qui transforme un code
binaire sur 4 bits en 7 signaux affichant le caractère correspondant sur l'afficheur.
3.1 Dresser la table de vérité du décodeur Hexa-7seg. Les segments de l’afficheur sont notés A B
C D E F G comme indiqué sur la figure 1 suivante. Il faut imposerun niveau 0 pour allumer un
segment et un niveau 1 pour l'éteindre.

Fig. 1 : Affichage sur 4 bits 7 segments


3.2 Créer un nouveau projet. La phase de démarrage est la même que pour le premier TP à savoir
Créer un nouveau projet que vous appelez «TP2". Tapez le nom du projet TP2 dans le champ «
Project Name » et sélectionnez le type HDL pour le design principal (Fig. 2).

Fig. 2: Écran de saisie des caractéristiques du projet.

3.3 Ajouter une nouvelle source de type VHDL Module dans lequel on décrira en langage VHDLle
comportement du décodeur. Nommer ce fichier hex_7seg. Cliquer sur Next. Une nouvelle fenêtre
s'ouvre, il faut indiquer les noms, tailles et sens des différentes entréeset sorties du composant
logique. Les entrées sont les 4 bits du code hexadécimal switchs(3 :0),les sorties sont les 7 segments
nommés seg(6 :0) permettant d'afficher le caractère et 4 anodes nommées anodes(4 :0).

D. ADDOU
18
USTHB/FEI TP-FPGA-VHDL

Fig. 3: Écran du module de définition entrées et sorties


Un nouveau fichier nommé hex_7seg.vhd s'ouvre. Une partie du code VHDL est déjà écrite. Ce
code est composé de deux blocs : un bloc ENTITY qui reprend les entrées et les sorties spécifiées
précédemment et un bloc ARCHITECTURE qui décrit le comportement des sortiesen fonction des
entrées.
3.4 Compléter la partie ARCHITECTURE. (fig. 4)

entity hex_7seg is
Port ( switches : in STD_LOGIC_VECTOR (3 downto 0);
seg : out STD_LOGIC_VECTOR (6 downto 0);
anodes : out STD_LOGIC_VECTOR (3 downto 0));
end hex_7seg;
architectureBehavioral of hex_7seg is
begin
withswitches select
seg<=
"1000000" when x"0" ,
"1111001" when x"1" ,

Fig. 4 : Code VHDL du décodeur Hex-7seg


Enregistrer le fichier hex_7seg.vhd. Le sélectionner puis vérifier la syntaxe en cliquant surCheck
Syntax, sous la rubrique “Synthesize-XST” dans le volet Process. Corriger les erreurs éventuelles.

3.5 Synthèse et implémentation :

Viens ensuite la phase de synthèse ("Synthetize XST") puis de placement et de routage


("Implement Design"). Ces étapes nécessitent la connaissance, d’une part, de la cible (FPGA) et,
d’autre part, de l’environnement du circuit(entrées/sorties associées aux autres composants de la
maquette). Il est donc nécessaire, avant de réaliser ces étapes-là, de faire l’assignation des broches
du composant avec la description fournie. Pour cela, vous pouvez vous aider de la fonction "Assign
Package Pins" dans la partie "User Constraints" et de la documentation de la maquette fournie.
Sachant que l’assignation des ports se fait par l’entremise d’un fichier de contraintes avec
l’extension "UCF". Vous pouvez remplir la table de location des ports (partie location " LOC "),
comme le montre la figue 5 et vérifier bien ces derniers sur la carte elle-même (Fig. 5).

D. ADDOU
19
USTHB/FEI TP-FPGA-VHDL

"anodes<0>" LOC = "F17";


"anodes<1>" LOC = "H17";
"anodes<2>" LOC = "C18";
"anodes<3>" LOC = "F15";
"seg<0>" LOC = "L18";
"seg<1>" LOC = "F18";
"seg<2>" LOC = "D17";
"seg<3>" LOC = "D16";
"seg<4>" LOC = "G14";
"seg<5>" LOC = "J17";
"seg<6>" LOC = "H14";
"switchs<0>" LOC = "G18";
"switchs<1>" LOC = "H18";
"switchs<2>" LOC = "K18";
"switchs<3>" LOC = "K17";

Fig. 5 : La table de location des ports


L'implémentation est l'étape de transformation de la description du circuit en fichier de
programmation "BIT file". Donc, il vous reste à positionner le mode de l’horloge utilisé lors du
chargement du FPGA. Sélectionnez hex_7seg.vhd, puis dans la fenêtre processes, cliquez droit sur
GenerateProgramming File et dans le menu déroulant sur ProcessProperties. Positionnez la
FPGA Start-UPClock à JTAGClock dans Startup Options (fig. 7).A nepasoublier, pour chaque
nouveau projet, il faudra lors de la première compilation vérifier ce paramètre.

Fig. 7 : Option JTAG

Une fois que toutes les étapes de "compilation" sont réussies (Fig. 8), le fichier binaire *.bit est
généré (avec un double clic sur GenerateProgramming File) et peut alors êtreimplanté dans le FPGA.Pour
cela, il est nécessaire de relier la carte sur un des ports USB de l’ordinateur et d’allumer la carte
d’étude(interrupteur le plus à gauche - SW8).

D. ADDOU
20
USTHB/FEI TP-FPGA-VHDL

Fig. 8 : Chaine de compilation

Le fichier généré se trouve dans votre projet et se nomme ici hex_7seg.bit. L’utilitaire Adept
(Digilent) sera alors utiliser pour transférer le fichier binaire vers le FPGA.Pour cela, lancez Adept
depuis le menu démarrer de votre PC. Il vous suffit de sélectionner le bon fichier avec Browse et
une fois effectué vous pouvez charger le code produit par ISE sur le FPGA de la carte Nexys.
Cliquez sur Program.

Enfin, Tester et vérifier le fonctionnement de votre circuit. Le faire valider par votre enseignant.

4. Applications
On se propose ici de reprendre en main le logiciel Xilinx ISE. Pour cela, il vous est demandé de
réaliser les systèmes suivants et faire valider leurs fonctionnements par votre enseignant :
4.1 Réaliser un soustracteur complet à 1 bit. Conformément à la description utilisée en TP1, les
entrées seront réalisées à l’aide des switchs et les sorties seront visualisées sur des LEDs.
4.2 Réaliser un multiplexeur 4 vers 1. Les entrées seront réalisées par des interrupteurs et les sorties
par des LEDs.

D. ADDOU
21
TP2
Structuration et Simulation des Systèmes
Combinatoires Simples
1. But du TP
Dans ce TP, vous allez réaliser votre première conception
simple qui va vous permettre de découvrir les entrées et sorties
de la carte Nexys2. Par la même occasion, ce TP vise à fournir Consignes
une initiation à l’utilisation des outils de Xilinx et Digilent. De  Faire valider le code par l’enseignant
par sa simplicité, c’est aussi un bon exemple pour comprendre avant la programmation de la carte ;
le fonctionnement de la chaîne de transformation : comment à  Faire valider chacune des applications
partir d’un code de description ou un schéma de circuit vous par l’enseignant ;
allez, par ISE, produire un fichier toplevel.bit. Ce fichier est
 Il vous est conseillé de faire un compte-
ensuite chargé sur la carte afin d’implanter sur celle-ci le circuit
rendu et le rendre à la fin de séance TP.
spécifié dans ISE.

2. Rappel du cours : Structure d’un module VHDL


2.1 Description d’un système numérique :
Par le biais du langage VHDL, la description passe par 3 étapes différentes. L’ensemble est
contenu dans un fichier source portant l’extension *.vhd .
a) La déclaration des ressources externes
-- On retrouve en en-tête du fichier source *.vhd
(bibliothèques) ; library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

b) La description de l’entité du système, correspondant à la liste des entrées/sorties ;


L’entité permet de spécifier les différents ports entityTP2i s
d’entrées/sorties du système. Pour chacun d’entre eux, il est port(
indispensable de donner sa direction : a , b :inSTD_LOGIC ;
s :outSTD_LOGIC) ;
In entrée simple ;out sortie simple endTP2
Buffer sortie rétroactive ;inout entrée-sortie bidirectionnelle

c) La description de l’architecture correspondant à la définition des fonctionnalités du système.


architectureBehavorial of TP2 is
Une architecture est reliée à une entité et permet de décrire le
--déclaration des signaux
fonctionnement du système. Cette description peut être de deux Begin
types : Processus1 ;
Description comportementale : le comportement du système Processus2 ;
est décrit (description la plus couramment utilisée enVHDL) ; …
End Behavorial
Description structurelle : description réservée à des fonctions
simples ou précalculées.
USTHB/FEI TP-FPGA-VHDL

2.2 Objets en VHDL 2.3 Types en VHDL


Signal objet physique, associé à des événements bit, bit_vector, integer, boolean : type de base
Variable intermédiaire de calcul, non physique std_logic, std_logic_vector, signed, unsigned : type IEEE
constant

2.4 Opérations en VHDL 2.5 Notations


LOGIQUES :and, nand, or, nor, xor, xnor, not bit : '0' ou '1' ;
DÉCALAGE :sll, slr, sla, sra, rol, ror bit_vector : "0100";
RELATIONNELS : =, /=, <, >, <=, >= ASCII : "Texte";
ARITHMÉTIQUES : +, -, *, /, MOD Décimal : 423;
AFFECTATION : <= Hexadécimal : x"1A"

2.6 Instructions en VHDL


Affectation
conditionnelle sélective For… generate
>>>
x<= a when cond1 else withexpr select for iinMIN to MAX
b whencond2 else, x<= a whenval1, generate
Hors … b when val2, Instructions de description;
processus z; …
end loop;
z when
others ;

Test>>> SI CAS Blocs répétitifs Temporisation


If x="0" then casex is for iin 0 to 5loop wait until
y <=’0’; when "00" => y<="0"; instructions; Clk ‘event and
Dans elsif x="01" then when "01" => y<="10"; end generate; clk=’1’;
y <=’0’; when others => y<="11";
end if ; whilei<5loop instructions;
processus end case
instructions;
end loop;

Syntaxe :
Remplissage d’un
Label : process(liste des signaux de sensibilité) Détecteur d’un front
bit_vector
Nom des objets internes : types ; -- si nécessaire
--Front montant --tous les bits à 0
begin
ifclk ‘event andclk=’1’ then … X<= (others=>’0’);
...
--Front descendant --tous les bits à 1
endprocess;
ifclk ‘event andclk=’0’ then … X<= (others=>’1’);

3. Manipulation : Décodeur Hexa - 7 segments


Pour cette première expérience, nous aborderons les dispositifs les plus fondamentaux de la carte
NEXSYS, le segment de switch et l’afficheur LED 7-segment. La première partie est assez simple:
utiliser 4 interrupteurs SW0 à SW3 pour représenter un nombre de 4-bit binaire dont la valeur peut
évidemment s’afficher en hexa entre 0-F.
Pour commencer, il faut créer un décodeur hexadécimal vers 7 segments qui transforme un code
binaire sur 4 bits en 7 signaux affichant le caractère correspondant sur l'afficheur.

D. ADDOU
2
USTHB/FEI TP-FPGA-VHDL

3.1 Dresser la table de vérité du décodeur Hexa-7seg. Les segments de l’afficheur sont notés A B
C D E F G comme indiqué sur la figure 1 suivante. Il faut imposerun niveau 0 pour allumer un
segment et un niveau 1 pour l'éteindre.

Fig. 1 : Affichage sur 4 bits 7 segments


3.2 Créer un nouveau projet. La phase de démarrage est la même que pour le premier TP à savoir
Créer un nouveau projet que vous appelez «TP2". Tapez le nom du projet TP2 dans le champ «
Project Name » et sélectionnez le type HDL pour le design principal (Fig. 2).

Fig. 2: Écran de saisie des caractéristiques du projet.

3.3 Ajouter une nouvelle source de type VHDL Module dans lequel on décrira en langage VHDLle
comportement du décodeur. Nommer ce fichier hex_7seg. Cliquer sur Next. Une nouvelle fenêtre
s'ouvre, il faut indiquer les noms, tailles et sens des différentes entréeset sorties du composant
logique. Les entrées sont les 4 bits du code hexadécimal switchs(3 :0),les sorties sont les 7 segments
nommés seg(6 :0) permettant d'afficher le caractère et 4 anodes nommées anodes(4 :0).

Fig. 3: Écran du module de définition entrées et sorties

D. ADDOU
3
USTHB/FEI TP-FPGA-VHDL

Un nouveau fichier nommé hex_7seg.vhd s'ouvre. Une partie du code VHDL est déjà écrite. Ce
code est composé de deux blocs : un bloc ENTITY qui reprend les entrées et les sorties spécifiées
précédemment et un bloc ARCHITECTURE qui décrit le comportement des sortiesen fonction des
entrées.
3.4 Compléter la partie ARCHITECTURE. (fig. 4)

entity hex_7seg is
Port ( switches : in STD_LOGIC_VECTOR (3 downto 0);
seg : out STD_LOGIC_VECTOR (6 downto 0);
anodes : out STD_LOGIC_VECTOR (3 downto 0));
end hex_7seg;
architectureBehavioral of hex_7seg is
begin
withswitches select
seg<=
"1000000" when x"0" ,
"1111001" when x"1" ,

Fig. 4 : Code VHDL du décodeur Hex-7seg


Enregistrer le fichier hex_7seg.vhd. Le sélectionner puis vérifier la syntaxe en cliquant surCheck
Syntax, sous la rubrique “Synthesize-XST” dans le volet Process. Corriger les erreurs éventuelles.

3.5 Synthèse et implémentation :

Viens ensuite la phase de synthèse ("Synthetize XST") puis de placement et de routage


("Implement Design"). Ces étapes nécessitent la connaissance, d’une part, de la cible (FPGA) et,
d’autre part, de l’environnement du circuit(entrées/sorties associées aux autres composants de la
maquette). Il est donc nécessaire, avant de réaliser ces étapes-là, de faire l’assignation des broches
du composant avec la description fournie. Pour cela, vous pouvez vous aider de la fonction "Assign
Package Pins" dans la partie "User Constraints" et de la documentation de la maquette fournie.
Sachant que l’assignation des ports se fait par l’entremise d’un fichier de contraintes avec
l’extension "UCF". Vous pouvez remplir la table de location des ports (partie location " LOC "),
comme le montre la figue 5 et vérifier bien ces derniers sur la carte elle-même (Fig. 5).

D. ADDOU
4
USTHB/FEI TP-FPGA-VHDL

"anodes<0>" LOC = "F17";


"anodes<1>" LOC = "H17";
"anodes<2>" LOC = "C18";
"anodes<3>" LOC = "F15";
"seg<0>" LOC = "L18";
"seg<1>" LOC = "F18";
"seg<2>" LOC = "D17";
"seg<3>" LOC = "D16";
"seg<4>" LOC = "G14";
"seg<5>" LOC = "J17";
"seg<6>" LOC = "H14";
"switchs<0>" LOC = "G18";
"switchs<1>" LOC = "H18";
"switchs<2>" LOC = "K18";
"switchs<3>" LOC = "K17";

Fig. 5 : La table de location des ports


L'implémentation est l'étape de transformation de la description du circuit en fichier de
programmation "BIT file". Donc, il vous reste à positionner le mode de l’horloge utilisé lors du
chargement du FPGA. Sélectionnez hex_7seg.vhd, puis dans la fenêtre processes, cliquez droit sur
GenerateProgramming File et dans le menu déroulant sur ProcessProperties. Positionnez la
FPGA Start-UPClock à JTAGClock dans Startup Options (fig. 7).A nepasoublier, pour chaque
nouveau projet, il faudra lors de la première compilation vérifier ce paramètre.

Fig. 7 : Option JTAG

Une fois que toutes les étapes de "compilation" sont réussies (Fig. 8), le fichier binaire *.bit est
généré (avec un double clic sur GenerateProgramming File) et peut alors êtreimplanté dans le FPGA.Pour
cela, il est nécessaire de relier la carte sur un des ports USB de l’ordinateur et d’allumer la carte
d’étude(interrupteur le plus à gauche - SW8).

D. ADDOU
5
USTHB/FEI TP-FPGA-VHDL

Fig. 8 : Chaine de compilation

Le fichier généré se trouve dans votre projet et se nomme ici hex_7seg.bit. L’utilitaire Adept
(Digilent) sera alors utiliser pour transférer le fichier binaire vers le FPGA.Pour cela, lancez Adept
depuis le menu démarrer de votre PC. Il vous suffit de sélectionner le bon fichier avec Browse et
une fois effectué vous pouvez charger le code produit par ISE sur le FPGA de la carte Nexys.
Cliquez sur Program.

Enfin, Tester et vérifier le fonctionnement de votre circuit. Le faire valider par votre enseignant.

4. Applications
On se propose ici de reprendre en main le logiciel Xilinx ISE. Pour cela, il vous est demandé de
réaliser les systèmes suivants et faire valider leurs fonctionnements par votre enseignant :
4.1 Réaliser un soustracteur complet à 1 bit. Conformément à la description utilisée en TP1, les
entrées seront réalisées à l’aide des switchs et les sorties seront visualisées sur des LEDs.
4.2 Réaliser un multiplexeur 4 vers 1. Les entrées seront réalisées par des interrupteurs et les sorties
par des LEDs.

D. ADDOU
6
TP3
Développement d’un système numérique
Structuration, Simulation et Implémentation (suite)

1. But du TP

1. Concevoir un décodeur pour un affichage à 7 Consignes


segments dans le cadre de l'additionneur 4 bits.  Faire valider le code par l’enseignant
avant la programmation de la carte ;
2. Implémentez la conception et configurez le FPGA.
 Faire valider chacune des applications
3. Vérifiez expérimentalement le fonctionnement de par l’enseignant ;
l'additionneur 4 bits et affichez le résultat dans le  Il vous est conseillé de faire un compte-
cadre des opérandes signés et non signés. rendu et le rendre à la fin de séance TP.

1. Rappel du cours : Représentation des nombres en VHDL


1.1 Il existe deux types de données scalaires permettant de représenter des nombres en VHDL :

• Les entiers (qui sont synthétisables) avec par exemple :

signal I : integer range -128 to 127; I sera codé sur 8 bits en CA2
signal J : integer range 0 to 15; J sera codé sur 4 bits non signés
signal K : integer range -32768 to 32767; K sera codé sur 16 bits en CA2
signal L : integer; L sera codé sur 32 bits en CA2 (par défaut)
• Les réels (qui ne sont pas synthétisables mais que l’on peut utiliser dans un testbench)
avec par exemple :
signal X : real; X peut être compris entre -1038 et 1038 (float 32 bits par défaut)

1.2 Le package std_logic_arith : Les types signed et unsigned


Les types signed et unsigned ont la même définition que le type std_logic_vector.
Les opérateurs arithmétiques, de comparaisons et les fonctions de conversion définis dans
std_logic_arith traiteront de la même manière les types signed et unsigned sauf que signed
sera interprété comme un nombre binaire signé codé en CA2 et unsigned sera interprété
comme un nombre binaire non signé.
1.3 Opérateurs arithmétiques : +, -
Chaque opérateur peut porter sur un type signed, unsigned ou integer mais en aucun cas sur
un std_logic_vector . Voici des exemples d’utilisation :
signal u1, u2 : unsigned (3 downto 0);
USTHB/FEI TP-FPGA-VHDL

signal s1, s3 : signed (3 downto 0);


signal s2 : signed (4 downto 0);
signal v1 : std_logic_vector (3 downto 0);
signal v2 : std_logic_vector (4 downto 0);
signal i1, i2 : integer;
u1 <= "1001"; -- = 9
s1 <= "1001"; -- = -7
i1 <= 16;
s2 <= u1 + s1; -- = 2
v2 <= u1 + s1; -- = "00010"
u2 <= i1 - u1; -- = 7 : erreur à la synthèse car i1=32 bits et u1=4 bits
s3 <= -s1; -- = 7

2 Implémentation d'un additionneur 4 bits avec Décodeur HDL 7 segments

Dans le TP précédent, vous avez conçu un additionneur 4 bits (ADD4bits) en utilisant un


additionneur complet (FullADD) comme bloc de construction. Dans ce TP, vous développerez le
circuit pour inclure un décodeur (conçu en HDL) afin que vous puissiez afficher les résultats de
l'addition sur un afficheur à 7 segments. Le schéma fonctionnel du système est présenté à la figure
1. À la fin de la manipulation, vous implémenterez cet additionneur dans un FPGA et vérifierez
expérimentalement les performances.

Figure 1 : Schéma fonctionnel de l’additioneur4 bits avec affichage

2.1 Créez un nouveau projet, où vous devrez joindre les fichiers sources suivants :
- fichier VHDL Adder4.vhd
- fichier VHDL Bin2Hex.vhd

D. ADDOU
2
USTHB/FEI TP-FPGA-VHDL

- fichier VHDL AffgAdder4.vhd.


Pour cet effet, vous réalisez les étapes suivantes :
2.2 Additionneur 4 bits :
a) Faire la description VHDL d'un additionneur 4 bits (Adder4.vhd ) utilisant l'opérateur
"+". Remarque : Le "&" est l'opérateur de concaténation en VHDL.
b) Faire la simulation de l’additionneur 4 bits.
2.3 Décodeur d'afficheur LED à 7 segments :
En utilisant le code de "Décodeur Hexa - 7 segments" utilisé en TP2, insérez le code
(Bin2Hex.vhd) dans votre projet.
2.4 Affichage des résultats sur une LED (pour les dizaines) et afficheur 7-segments (pour
les unités) :
a) Faire la description VHDL de l’additionneur 4 bits avec Décodeur HDL 7-segments
(AffgAdder4.vhd) décrit par la figure 1.
b) Pour plus d’éclaircissement et ous pouvez obtenir de l'aide à partir de schémas :
DispAdder4 et Adder4 (voir les schémas émis par le logiciel).
c) Faire la simulation du circuit.
d) Editez les noms de port et attribuez les broches d'E/S FPGA.
e) Synthétisez, implémentez la conception, puis générez le bitstream.
f) Programmez et téléchargez la conception sur le FPGA (choisissez le fichier de
téléchargement DispAdder4.bit).
g) Testez et vérifiez la fonctionnalité du circuit conçu.
2.5 Reprendre la manipulation pour les cas de nombres signés. Faire le test et vérification de la
validité des résultats.

3 Implémentation d'un multiplexeur 4 vers 1 à partir des multiplexeurs 2 vers 1

Créer un nouveau projet pour décrire un modèle VHDL Complet (Entité Et Architecture
Structurelle) du Multiplexeur 4-Vers-1 illustré par la figure 2.

D. ADDOU
3
USTHB/FEI TP-FPGA-VHDL

Figure 2 : Schéma structurel du Multiplexeur 4-Vers-1

- Faire l’analyse du circuit


3.1 Component Mux2 vers 1
a) Faire la description VHDL d'un multiplexeur 2 vers1 (Mux2v1.vhd ).
b) Faire la simulation de l’additionneur 4 bits.
3.2 Le multiplexeur 4 vers 1
a) Faire la description structurelle VHDL du multiplexeur 4 vers 1(Mux4v1.vhd) décrit
par la figure 1.
b) Pour plus d’éclaircissement et vous pouvez obtenir de l'aide à partir du schémas :
Mux4v1 (voir le schémas émis par le logiciel).
c) Faire la simulation du circuit.
d) Editez les noms de port et attribuez les broches d'E/S FPGA.
e) Synthétisez, implémentez la conception, puis générez le bitstream.
f) Programmez et téléchargez la conception sur le FPGA (choisissez le fichier de
téléchargement Mux4v1.bit).
g) Testez et vérifiez la fonctionnalité du circuit conçu.

D. ADDOU
4
USTHB/FGE TP4/FPGA-VHDL

TP4
Développement d’un système numérique
Séquentiel : Bascules et Registres
1. But du TP
Dans le cadre de développement d’un système séquentiel via les outils CAO Xilinx, Nous nous
intéressons beaucoup plus dans ce TP aux instructions séquentielles qui se déclarent dans le corps
d’un process en VHDL. À l'issue de ce TP, vous devriez être capable de :
1. Connaitre le fonctionnement d’une bascule D.
2. Construire un registre à décalage simple avec des bascules.
3. Construire un registre à décalage chargeable.

2. Rappel de cours :
2.1. Code VHDL de la bascule D : Front d’horloge

 Pour modéliser une bascule, il est nécessaire de pouvoir la décrire, le fait que le changement d’état
se produit sur une transition d’un signal d’horloge et non sur sa valeur. Pour ce faire, on peut
utiliser les attributs d’évènements (event attribute) définis en VHDL.
 L’exemple ci-dessous démontre l’utilisation de l’attribut event sur le signal CLK, dénoté par
CLK’event. La condition CLK =’1’ dénote alors un front montant.

 Le package std_logic_1164 contient aussi deux fonctions, utilisées pour synchroniser un process
sur une horloge : rising_edge() et falling_edge(). Ces deux fonctions retournent des valeurs
booléennes.

D. ADDOU 1
USTHB/FGE TP4/FPGA-VHDL

2.2. Code VHDL de la bascule D : Initialisation (entrées forcées)

 Une bascule D a deux entrées supplémentaires, PRE (Preset ou set : mise à 1) et CLR (Clear ou
reset: mise à zéro). Ces deux entrées sont asynchrones ou synchrones et permettent à l'utilisateur
de définir les conditions initiales pour la bascule.
 Les deux exemples ci-dessous, montrent les deux types de signaux d’initialisations envisageables :

2.3 Registres à décalages


Définition :
 Registre capable de transférer des données entre 2 cellules binaires consécutives
 Sens du transfert :  bidirectionnel
 unidirectionnel (gauche vers droite ou droite vers gauche) .
Caractéristiques d’un registre à décalage complet
 1 entrée x de chargement parallèle sur n bits
 1 entrée série xR pour le décalage série vers la droite
 1 entrée série xL pour le décalage série vers la gauche
 1 entrée de contrôle CTRL sur 2 bits pour le chargement parallèle ou le décalage série
 1 entrée CLR d’initialisation (a)synchrone
 1 sortie z sur n bits
Représentation symbolique

D. ADDOU 2
USTHB/FGE TP4/FPGA-VHDL

3. Manipulation

3.1 Manipulation 1 : D Flip Flop (DFF)

1- Ecrire le code de description VHDL qui permet de réaliser


une bascule D flip-Flop (figure 1).
2- Saisir le code, Sauvegarder, Compiler, Corriger les erreurs si
nécessaire.
3- Simuler et Vérifier les résultats via test bench Waveform.
Fig. 1

4- Compilez le projet et chargez le circuit dans le FPGA pour tester le fonctionnement de la bascule
D flip-flop. On pourra connecter les entrées de la bascule
aux Switchs, L'entrée Clock sera reliée à un bouton-
poussoir (BTN0) et la sortie au led.
5- Même travail demandé mais cette fois-ci pour une bascule
D flip-flop avec Reset Asynchrone et Synchrone (figure 2).

Fig. 2
3.2 Manipulation 2 : Registres à décalages

1. En utilisant le paramètre "Geniric" qui permet de définir la taille du registre, écrire le code de
description VHDL pour la réalisation d’un registre, entrée série/ sortie série (SISO) (figure 3).
2. Compilez le projet pour un registre à décalage de 4 bits et chargez le circuit dans le FPGA pour
tester le fonctionnement du registre.
3. Même travail demandé mais cette fois-ci pour réaliser un registre, entrée parallèle/ sortie série
(PISO) (figure 4). Vous utiliserez la commande "load" qui permet de charger le registre.

Fig. 3 : Exemple de registre SISO Fig. 4 : Exemple de registre PISO


Data_out(t)=data_in(t-N) Conversion // série
(Ex : Ligne à retard numérique) (Ex : Sérialisation des données)

D. ADDOU 3
USTHB/FGE TP4/FPGA-VHDL

3.3 Manipulation 3 : Analyse d’un système séquentiel

Soit le circuit numérique représenté par la figure 5 :


1. Faire l’analyse du circuit et donner le rôle du circuit.
2. Ecrire le code de description VHDL qui permet de réaliser le rôle prévu de ce circuit.
3. Compiler le code VHDL de ce circuit et Visualiser les chronogrammes des E/S.
Vérifier les résultats via la simulation.

Fig. 5

D. ADDOU 4
USTHB/FGE/M1 TP5/FPGA-VHDL

TP5
Développement d’un système numérique
Séquentiel : Les Compteurs

1. But du TP
L’objectif du TP est de saisir en VHDL, simuler et tester l’implémentation d’:
1. un diviseur d’horloge ;
2. un compteur 4 bits avec reset et sortie sur afficheur 7-segments de la carte FPGA ;
3. un compteur asynchrone utilisant des bascules D.

2. Rappel de cours :
2.1. Diviseur de fréquence
 Le diviseur d'horloge est également connu sous le nom de diviseur de fréquence, qui divise la
fréquence d'horloge d'entrée et produit une horloge de sortie. Dans notre cas, on prend la
fréquence d'entrée de l’horloge de la carte FPGA à 50 MHz et on divise la fréquence de cette
dernière pour générer un signal de sortie de 1Hz.
 Exemple : Pour avoir une horloge de 2 Hz (période de 0,50s) à partir d'une horloge de 50MHz
(période de 2.10-8s), il nous faut un compteur qui s'incrémente chaque front montant via un
process séquentiel. Ainsi, le signal d'horloge de 2Hz doit changer de valeur chaque 0.25s (c.a.d.
0.25s à ‘1’ et 0.25 s à ‘0’). C’est la valeur de comptage correspondante à la fréquence de sortie
qu’on doit exprimer en VHDL : 0.25s/0.00000002s est égal à 12500000. En effet, si le comptage
est égal à 12500000 donc clk_2_hz <= not(clk_2_hz) et on remet le compteur à 0.

2.2. Compteur

 Un compteur est une variable qui permet de compter des évènements par rapport à une horloge.
Il est caractérisé par :
o Sa possibilité de décomptage/décomptage (+/-).
o Son pas d’incrémentation
o Sa résolution binaire (nombre de bits nécessaires).
 Le compteur le plus simple formé par une simple bascule D (figure 1) est un diviseur de fréquence
par deux : la fréquence de changement de la variable d’état sera la moitié de celle de l’horloge.

Fig. 1

D. ADDOU 1
USTHB/FGE/M1 TP5/FPGA-VHDL

 En mettant plusieurs bascules de ce type en cascade, on peut obtenir un facteur de division de 2


puissances n, n étant le nombre de bascules. La figure 2 montre que l'on peut obtenir un facteur
de division de 16 (24) avec quatre bascules D.

Fig. 2

3. Manipulation :

3.1 Manipulation 1 : Compteur binaire 4-bits

Nous allons synthétiser un compteur et utiliser l'afficheur 7 segments pour visualiser ses valeurs.
L'horloge disponible sur notre carte de développement est une horloge 50MHz. Il va donc falloir
considérablement ralentir cette horloge pour pouvoir regarder défiler les valeurs du compteur. La
figure 3 présente le travail à réaliser :

Clk_50MHz Diviseur Clk_1Hz Sorties


Compteur
Fréquence Affichage
binaire 4-bit

Reset

Fig. 3

Le compteur sera piloté par une horloge d’environ 1Hz (clk_1Hz) et remis à zéro par le signal reset piloté
par un bouton poussoir. La valeur du compteur (Sorties binaires sur 4 bits) s'affichera sur un afficheur 7
segments. Chaque bloc du diagramme sera représenté en VHDL par un processus (process). A l'intérieur
d'un processus, on décrit les instructions séquentiellement comme dans un programme. Mais tous les
processus s'exécutent en parallèle simultanément. Les processus de l'architecture sont interconnectés par
le biais des signaux.

D. ADDOU 2
USTHB/FGE/M1 TP5/FPGA-VHDL

Processus 1 : Diviseur de fréquence (fig. 4)


a) Créer un fichier source VHDL nommé DivFreq.vhd.
b) Décrire ce système en VHDL, pour passer d’une fréquence de 50 MHz à 1 Hz.
c) Compilez, programmez, testez le fonctionnement de votre système.

Clk_50MHz Diviseur Clk_1Hz


Fréquence

Fig. 4
Processus 2 : Compteur/décompteur (fig. 5)

a) Créer un fichier source VHDL nommé Cpt.vhd.


b) Ecrire le code de description VHDL qui permet de réaliser le compteur/décompteur en utilisant
l’entrée de commande de la direction du comptage (Dir).

Fig. 5

c) Saisir le code, Sauvegarder, Compiler, Corriger les erreurs si nécessaire.


d) Simuler et Vérifier les résultats via test bench Waveform.
Processus 3 : Transcodeur binaire 7 segments (fig. 6)

a) Créer un fichier source VHDL nommé Aff7seg.vhd.


b) En utilisant le code VHDL du "Décodeur Hexa -7 B Seg
segments" utilisé en TP2, insérez le code dans votre
projet.
c) Compiler et tester le fonctionnement du transcodeur. Fig. 6

Réalisation du Compteur binaires 4-bits avec affichage


a) Créer un fichier source VHDL nommé counter4.vhd
b) Faire la description structurelle du compteur "counter4.vhd" en y instanciant et en y reliant les 3
modules comme le montre la figure 3.

D. ADDOU 3
USTHB/FGE/M1 TP5/FPGA-VHDL

c) Compilez le projet et chargez le circuit dans le FPGA pour tester le fonctionnement du compteur.
On pourra connecter les entrées aux Switches et l'entrée Clock_50Hz sera reliée à l’horloge de la
carte FPGA. Faire valider votre implémentation par l’enseignant.

3.2 Manipulation 2 : Compteur asynchrone modulo 16 avec bascules D

a) Faire l’analyse du circuit séquentiel représenté par la figure 7. Justifier le rôle du circuit.
b) Créer un fichier source VHDL nommé Cpt4D.vhd.
c) Réaliser le compteur asynchrone binaire 4-bit (fig. 7) à partir de la description VHDL d’une
bascule D active sur front descendant ( nommer le fichier ffD.vhd)
(Vous pouvez utiliser l’instruction concurrente for … generate)
d) Compilez le projet et chargez le circuit dans le FPGA pour tester le fonctionnement du compteur.
On pourra connecter l’entrée Clk à un bouton poussoir et les sorties des bascules aux Leds. Faire
valider votre implémentation par l’enseignant.

D1 Q1 D2 Q2 D3 Q3 D4 Q4

Clk 𝑸1 𝑸2 𝑸3 𝑸4

Reset
Fig. 7

D. ADDOU 4

Vous aimerez peut-être aussi