Vous êtes sur la page 1sur 15

Travaux Pratiques FPGA

B. HAJJI (1ère partie) GE4

TP FPGA (1ère partie)

Un compte-rendu devra être fourni à l’issue de la seconde séance de TP

Exercice1 :

Le but de ce premier exercice est de manipuler les E/S sorties classiques de la carte
DE1. Dans un premier temps, nous allons nous charger de manipuler les boutons et
les LEDs présentes sur la carte. La figure 1 montre un petit programme VHDL
permettant d'afficher l'état des boutons sur les LEDs associées.
Suivre les étapes suivantes :

1. Créer un nouveau projet Quartus II pour votre circuit. Sélectionner le FPGA


Cyclone II EP2C70F896C6 comme étant le circuit cible.
2. Créer une entité VHDL avec le code fourni à la figure 1.
3. Réaliser l'affectation des E/S aux broches du FPGA. Pour se faire, il suffit
d'importer le fichier suivant : DE1_pin_assignement.csv. Ce fichier contient la
localisation de toutes les broches du FPGA et leur connexion aux éléments de
la carte. Attention, les noms donnés dans votre fichier doivent exactement être
identiques aux noms des broches donnés dans le fichier .csv

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY top is
port(
SW: in STD_LOGIC_VECTOR(2 downto 0);
LEDR: out STD_LOGIC_VECTOR(2 downto 0));
END top;

architecture une OF top IS


BEGIN
LEDR<=SW ;
END une ;

TP FPGA Page 1
Travaux Pratiques FPGA
B. HAJJI (1ère partie) GE4

Exercice 2 :

Concevoir l’architecture d’un composant seven_seg décrit en VHDL permettant de


générer les sorties a,b,c,d,e,f,g directement reliées aux entrées d’un afficheur. Les
chiffres affichés sur l’afficheur seront exprimés en BCD (de 0 à 9).

Ce composant possèdera les E/S suivantes :

entity seven_seg is port(


INP: in std_logic_vector(3 downto 0);
HEX: out std_logic_vector(6 downto 0));
end seven_seg;

Tester ce module en reliant les 4 entrées INP aux boutons présents sur la carte et
valider le fonctionnement de votre décodeur.

1. A l'aide de l'outil de QuartusII permettant de visualiser la netlist générée


durant l'étape de synthèse, décrivez la manière dont le décodeur a été
implantée dans le FPGA.
2. Quelles sont les ressources nécessaires à la mise en oeuvre d'un tel
décodeur ?

Exercice 3 :

La figure ci-dessus représente un décodeur 7 segments avec 3 entrées c1, c2 et c3. Le


décodeur à 7 sorties qui sont utilisés pour afficher un caractère sur un afficheur 7
segments. La table ci-dessus liste les caractères qui doivent être affiché pour les
différentes valeurs de c1,c2 et c3. Les 7 segments de l’afficheur sont identifiés par les
indices 0 à 6. Chaque segment est allumé lorsque on applique la valeur logique ‘0’.

1- Ecrire le code VHDL de ce décodeur dans un nouveau fichier


(char_7seg.vhd). Décrivez ce multiplexeur avec une architecture
comportementale en utilisant l’affectation sélective.

TP FPGA Page 2
Travaux Pratiques FPGA
B. HAJJI (1ère partie) GE4

2- Rajoutez la sortie HEX0 sur l’entité du composant top (top.vhd) qui représente
la sortie qui va sur les 7 segments de l’afficheur :
HEX0 : OUT STD LOGIC VECTOR(0 TO 6);
3- Instancier ce décodeur dans le composant top (top.vhd). Connectez les
entrées C1-3 avec Sw2-0 et connectez les sorties de ce décodeur avec HEX0.
4- Compilez le projet et chargez le circuit dans le FPGA. Tester le
fonctionnement de ce décodeur en changeant l’état des Switch et en observant
l’afficheur 7 segments.

Exercice 4 :

Avec le multiplexeur et le décodeur, le circuit ci-dessus permet d’afficher un des


caractères ‘H’, ‘E’, ‘L’, ‘O’ et rien sur l’afficheur 7 segments. Le code de chaque
caractère est sélectionné en modifiant l’état des Switchs SW14-0 et le caractère à
afficher et choisit avec les Switchs SW17-15. Pour cet exercice vous devez afficher le
mot HELLO sur 5 afficheurs 7 segments et faire défiler le message avec les switchs
SW17-15 comme le montre le tableau ci-dessous :

Pour réaliser cette fonction vous devez instancier 5 multiplexeurs et 5 décodeurs et


réfléchir aux différentes connectiques à faire entre les Switchs et les entrées des
multiplexeurs.
1- Rajoutez les sorties des 4 autres afficheurs 7 segments sur l’entité du
composant top (top.vhd) qui s’appelle respectivement HEX1, HEX2, HEx3 et
HEX4 : HEX0,HEX1,HEX2,HEX3,HEX4 : OUT STD LOGIC VECTOR(0 TO 6);
2- Instancier les différents composants nécessaires pour afficher le mot HELLO
sur 5 afficheurs et permettre de faire défiler le mot avec les Switch SW17-15

TP FPGA Page 3
Travaux Pratiques FPGA
B. HAJJI (1ère partie) GE4

comme le montre le tableau cidessus. Pour cela connectez les entrées de


SW17-15 avec l’entrée de sélection de tout les multiplexeurs et connectez les
entrées SW14-0 avec les entrées de tous les multiplexeurs.
3- Compilez le projet et chargez le circuit dans le FPGA. Tester le
fonctionnement de ce circuit en configurant correctement le code de chaque
caractères sur les Switchs SW14-0 et vérifiez le défilement du mot HELLO
avec les Switch SW17-15.

Exercice 5 :

Maintenant on désire faire défiler le mot HELLO sur les 7 afficheurs comme le
montre la table cidessus.

Modifiez le code de l’exercice 4 pour obtenir cette nouvelle fonction et testez sur la
carte DE2.

TP FPGA Page 4
Travaux Pratiques FPGA
B. HAJJI (2ère partie) GE4

TP FPGA (2ère partie)

Un compte-rendu devra être fourni à l’issue de la seconde séance de TP

Exercice 1 : Multiplexeur

En électronique, un multiplexeur (ou MUX) est un dispositif qui choisit un des


signaux d'entrée (analogiques ou digitaux) et le dirige dans une seule ligne de sortie.
Un multiplexeur permet à plusieurs signaux de partager un seul dispositif coûteux
ou une autre ressource (par exemple un convertisseur analogique-digital ou une
ligne de communication) plutôt que d'utiliser un dispositif par signal d'entrée. La
figure ci-dessous montre le circuit d’un multiplexeur 1 bit 2 vers 1 avec une entrée
de sélection sel. Si sel = 0 la sortie out du multiplexeur égale à l’entrée A, et sel =1
alors la sortie égale à B.

Figure 1 : Multiplexeur 1 bit 2 vers 1

1- Ecrire le code VHDL du multiplexeur 1 bit 2 vers 1 dans un nouveau fichier


(mux_1bit_2v1.vhd). Décrivez ce multiplexeur avec une architecture
comportementale en utilisant l’affectation sélective.
2- Compilez le projet et chargez le circuit dans le FPGA pour tester le
fonctionnement du multiplexeur. On pourra connecter les entrées du
multiplexeur aux Switch et la sortie au led.

En connectant plusieurs multiplexeurs 2 vers 1", on peut réaliser des circuits


plus complexes. La figure 2 montre un multiplexeur 8 bits 2 vers 1, la figure 3
montre un multiplexeur 5 vers 1 et la figure 4, un multiplexeur 3 bits de 5 vers.

Figure 2 : Multiplexeur 8 bits 2 vers 1

TP FPGA Page 1
Travaux Pratiques FPGA
B. HAJJI (2ère partie) GE4

Figure 3 : Multiplexeur 3 bits 5 vers 1

3- Ecrire le code VHDL du multiplexeur 3 bits 5 vers 1 dans un nouveau fichier


(mux_3bit_5v1.vhd). Décrivez ce multiplexeur avec une architecture
comportementale en utilisant l’affectation sélective.
4- Compilez le projet et chargez le circuit dans le FPGA pour tester le
fonctionnement du multiplexeur. On pourra connecter les entrées du
multiplexeur aux Switch et la sortie au led.

Exercice 2 : Comparateur

Un comparateur binaire est un dispositif qui accepte deux mots binaires de 4 bits
sous forme parallèle A et B et qui possède des sorties binaires indiquant la relation
d’ordre entre ces mots : égalité, supériorité ou infériorité.

1- Combien de signaux de sortie sont-ils nécessaires ?


2- Faire le schéma synoptique du système.
3- Coder un comparateur binaire à mots de 4 bits. Les sorties seront visualisées
sur des diodes.

Exercice 3 : Additionneur

I. Conception d’un additionneur complet

L’objectif de cette partie est de concevoir puis implanter un additionneur complet


(FULL ADDER ) dans le FPGA CYCLONE présent sur la carte Altera DE1.

Rappel :
Un additionneur complet est constitué de deux demi-additionneurs dont la structure
est représentée Figure1.
Le schéma d’un additionneur complet est donné Figure 2.
Ce composant admet 3 entrées : A, B, Ci et 2 sorties : S et Co.

TP FPGA Page 2
Travaux Pratiques FPGA
B. HAJJI (2ère partie) GE4

Figure1 : Schéma d’un demi-additionneur (HALF ADDER)

Figure 2 : Schéma d’un additionneur complet(FULL ADDER)

a) Description en VHDL
Concevoir l’entité FULL_ADDER ainsi que l’architecture associée. Tester son
fonctionnement en l’implantant directement dans le FPGA. On pourra connecter
les entrées de l’additionneur aux boutons et les sorties aux leds.

b) Synthèse et Implantation
Implanter le FULL_ADDER dans le CYCLONE et en déduire les ressources
utilisées à l’aide des différents rapports générés:
Quels nombres de LE et de LUTs sont nécessaires pour implanter le design ?
Quels sont les « pires » temps de propagation des signaux au sein du circuit ?

A l’aide de l’éditeur de ressources (FLOORPLANNER) , vérifier le contenu des


différentes LUTs ainsi que le contenu des IOBs. Justifier le contenu des LUTs et
en déduire le fonctionnement correct de votre circuit.

II. Conception d’un additionneur parallèle 4 bits

A l’aide de votre composant FULL_ADDER, concevoir un additionneur parallèle 4


bits et expliquer le fonctionnement. En déduire la représentation structurelle et
implanter l’additionneur sur la carte.

III. Conception d’un additionneur 8 bits avec registres

A partir de l’additionneur réalisé dans l’exercice 4, créer une nouvelle version de


l’additionneur permettant d’effectuer des sommes sur des nombres codés en
complément à 2. Une sortie Overflow devra également être prévue lorsque la somme
produite par l’additionneur ne sera pas correcte.

TP FPGA Page 3
Travaux Pratiques FPGA
B. HAJJI (2ère partie) GE4

La représentation structurelle de l’additionneur est fournie à la figure 3.

Figure 3 : Représentation de l’additionneur 8 bits à réaliser. Les E/S passent par des
registres.

a) Inclure les nouveaux ports d’E/S dans votre projet. Connecter les entrées A et
B aux 2 registres et connecter les registres aux boutons SW7 à SW0. Utiliser
KEY(0) comme une entrée RESET asynchrone, KEY(1) comme une entrée
d’horloge manuelle, KEY(2) et KEY(3) comme entrée ENABLE des registres
d’entrée. Afficher A et B sur les leds (A sur LEDR et B sur LEDG) et afficher le
résultat de la somme sur les afficheurs 7 segments.
b) A l’aide des outils fournis par Quartus, déterminer le nombre de ressources
nécessaires à la réalisation d’un tel additionneur. Quelle est la fréquence
maximale d’utilisation du circuit ? Pourquoi ?

IV. Additionneurs prédéfinis par Alteras

Répeter l’exercice 5 en utilisant cette fois une des additionneurs prédéfinis par
Altera.
Pour se faire, sélectionner le menu Tools puis MegaWizard Plug_in Manager. Editer
puis générer le composant lpm_add_sub. Ne pas oublier de l’intégrer dans votre
projet.

Après avoir instancié ce composant dans votre code VHDL, compiler le projet et
utiliser l’outil Chip planner de QuartusII pour examiner les détails de l’implantation.
Une manière d’examiner le circuit sous Chip planner est donnée à la figure 4.

TP FPGA Page 4
Travaux Pratiques FPGA
B. HAJJI (2ère partie) GE4

Dans la fenêtre du navigateur de projets, cliquez droit sur le composant de la


hiérarchie nommé lpm_add8 et sélectionner la commande Locate->Locate in Chip
planner. Ceci permet d’ouvrir la fenêtre correspondante. Positionner ensuite la
souris sur les éléments logiques et double-cliquer pour ouvrir l’éditeur de
ressources.

Que constatez vous ? Quelle(s) différences pouvez vous déceler avec l’implantation
de l’exercice 5.

Quelle est la nouvelle fréquence max de votre circuit ?

Figure 4 : Localisation de l’additionneur 8 bits dans l’outil Chip Planner

Figure 5 : Les éléments en surbrillance sont les composants de l’additionneur

TP FPGA Page 5
Travaux Pratiques FPGA
B. HAJJI (3ère partie) GE4

TP FPGA (3ère partie)

Un compte-rendu devra être fourni à l’issue de la seconde séance de TP

Exercice 1 : D flip-Flip

Le tableau 1 présente les ports de la bascule D flip-flop. L’entrée D est mémorisée à chaque front
montant du signal d’horloge clk.

Signal Type Direction Fonction


d std_logic Input Data input
clk std_logic Input Clock
q std_logic Output Data output

Tableau 1 : Description des signaux de la bascule D

1- Ecrire un programme en VHDL de la bascule D flip-Flop.


2- 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 Switch et la sortie au
led
3- Même travail demandé mais cette fois-ci pour une bascule D flip-flop avec Reset
Asynchrone et Synchrone.

Exercice 2 : Registre à décalage

1- Décrire en VHDL un registre à décalage 4-bit, utilisant les bascules D Flip-flop, présenté
par le schéma ci-dessous :

2- Compiler le tester le fonctionnement de ce circuit.

Exercice 3 : Compteur

1- Réaliser un compteur sur 4 bits par description comportementale.


2- Rajouter une entrée de remise à zéro asynchrone, puis synchrone.

TP FPGA Page 1
Travaux Pratiques FPGA
B. HAJJI (3ère partie) GE4

Les sorties seront d’abord visualisées sur des LED puis sur un afficheur 7 segments.

Exercice 4 : Diviseur de fréquence

On cherche à concevoir un diviseur d’horloge permettant de diviser la fréquence d’une horloge


d’entrée par 128. Pour se faire, on souhaite utiliser un compteur. Ce compteur possèdera :

- Une entrée CLK


- Une entrée RESET, synchrone, permettant la mise à 0 du compteur
- Une entrée CE, permettant la validation du comptage

1) Quelle doit être la taille du compteur ?

2) Ecrire un programme en VHDL de ce circuit et tester les fonctionnalités du compteur

TP FPGA Page 2
VHDL– FPGA-Travaux Pratiques ENSA-Oujda

TP n°4 : Conception d’un mini-calculateur


Le TP sera effectué sur 3 séances. Un compte rendu devra être fourni à l’issue de ces
séances.

1. Introduction

Le but de ce TP est de concevoir le mini-calculateur suivant basé sur une unité arithmétique
et logique et permettant d’effectuer des opérations sur des nombres de 4 bits. Le dispositif à
réaliser est décrit à la figure 1.

4
A R0
CE
UAL
R1
CE

B 4
R2 Res
CE

3
R3
CE

contrôleur clk
instruction 8

Figure 1 : Schéma bloc du calculateur à réaliser

Le circuit permet d’effectuer des calculs sur des opérandes de 4 bits et autorise le stockage
des résultats dans 4 registres de 4 bits (R0,R1,R2,R3) .
L’opérande A peut être issue d’une entrée du circuit ou venir d’un des 4 registres.
Une instruction sur 8 bits permet d’indiquer l’opération à réaliser. Elle possède le format
suivant :
7 6 5 4 3 2 1 0
Numéro Numéro
Reg destination Reg source Code_op

Res <= A op B
Res<= Ri op B

B. HAJJI Page 1
VHDL– FPGA-Travaux Pratiques ENSA-Oujda

Le champ Numéro Registre destination permet de sélectionner les registre dans lequel le
résultat de l’UAL sera stocké. Ce champ est stocké sur les bits (7 et 6) de l’instruction.
Le numéro de registre est désigné comme suit :

Instruction(7) Instruction(6) Registre désigné


0 0 R0
0 1 R1
1 0 R2
1 1 R3

Le champ Numero Registre source permet de sélectionneur le registre dans lequel une
donnée servira à effectuer un calcul (avec l’opérande B). Ce champ est stocké sur les bits (5
et 4) de l’instruction. Le numéro de registre est désigné comme suit :

Instruction(5) Instruction(4) Registre désigné


0 0 R0
0 1 R1
1 0 R2
1 1 R3

Le bit 3 d’une instruction permet de préciser si l’on souhaite effectuer une opération sur les
entrées A et B ou sur B et une donnée provenant du registre dont l’adresse est spécifiée dans
le champ Numero registre source.

Le champ CodeOP est codé sur 3 bits et sert à indiquer la nature de l’opération à réaliser :

CodeOP Opération à réaliser


000 RES<= A ET B
001 RES<= A NON ET B
010 RES<= A OU B
011 RES<= A NON OU B
100 RES<=A XOR B
101 RES<=NOT A
110 RES<=A+B
111 RES<=A-B

Par exemple, si CodeOP=111, alors l’UAL effectuera une soustraction de A et B.

Exemple d’instruction :
L’instruction suivante : 01 01 1 111 signifie R1 <= R1 – B
00 10 0 100 signifie R2<= A xor B

B. HAJJI Page 2
VHDL– FPGA-Travaux Pratiques ENSA-Oujda

2. Conception de l’Unité arithmétique et logique

L’UAL possèdera les entrées sorties suivantes :

A
4
4
RES
A_SUP_B
A_INF_B
4 A_EGAL_B
OVFL
B ZERO
CodeOP NEG

A, B sont les opérandes sur 4 bits.


Res est le résultat des opérations.
A_SUP_B est une sortie permettant d’indiquer si A>B. Elle sera à l’état HAUT si A>B et à
l’état BAS dans le cas contraire.
A_INF_B est une sortie permettant d’indiquer si A<B. Elle sera à l’état HAUT si A<B et à
l’état BAS dans le cas contraire.
A_EGAL_B est une sortie permettant d’indiquer si A=B. Elle sera à l’état HAUT si A>B et à
l’état BAS dans le cas contraire.
OVFL est une sortie permettant d’indiquer si l’opération effectue un débordement de
capacité. Elle sera à l’état HAUT si tel est le cas, à l’état BAS sinon.
ZERO est une sortie permettant d’indiquer si le résultat est nul. Elle sera à l’état HAUT si tel
est le cas, à l’état BAS sinon.
NEG est une sortie permettant d’indiquer si le résultat est négatif. Elle sera à l’état HAUT si
tel est le cas, à l’état BAS sinon.

a. Conception d’un comparateur (4 bits)

1) Décrire un composant comparateur prenant deux entrées sur 4 bits, et


générant 3 sorties A_SUP_B, A_INF_B et A_EGAL_B

2) Simuler le fonctionnement du composant en réalisant le testbench adéquat.

b. Conception de l’UAL

1) A partir des différents circuits réalisés dans les parties (a et b), décrire l’UAL
complète en VHDL.
2) Concevoir le fichier testbench permettant de générer les stimuli à appliquer à
l’UAL
3) Simuler l’ensemble de l’UAL et vérifier son fonctionnement

B. HAJJI Page 3
VHDL– FPGA-Travaux Pratiques ENSA-Oujda

3. Conception des registres

Concevoir un registre 4 bits avec entrée clock_enable synchrone et une entrée CLR
asynchrone. Ecrire un test_bench permettant de valider le fonctionnement du
registre.

4. Conception des multiplexeurs et demultiplexeurs

A partir du schéma fourni à la figure 1, concevoir les multiplexeurs et


démultiplexeurs adéquats. Concevoir les tests-benchs associés.

5. Conception du décodeur

Concevoir un circuit de décodage permettant de générer les signaux de sélection des


multiplexeurs/démultiplexeurs, ainsi que les entrée CE des registres en fonction du
type d’instruction.

6. Conception Finale

Regrouper tous les éléments construits dans les sections 1 à 5 et concevoir le mini-
calculateur
Prendre soin de bien effectuer un test-bench pour valider le fonctionnement final.

B. HAJJI Page 4

Vous aimerez peut-être aussi