Vous êtes sur la page 1sur 4

TP FPGA

(Field Programmable Gate Array)

Contribuants :
Justin BAKOUBOLO : justin.bakoubolo@isen.yncrea.fr
Elisée THIBAUT : elisee.thibaut@isen.yncrea.fr

Novembre 2020
2

KEY WORDS décodeur, dont la sortie active est celle de position égale à la
FPGA – Séquenceur – Quartus – valeur du bus généré par le bloc incrémenteur.

1. INTRODUCTION 3.2: Synthèse d’un décodeur


L’objectif de ce TP est d’étudier le fonctionnement
d’un composant FPGA grâce à un environnement de
développement basé sur une carte d’évaluation DE2-115 Pour L’objectif de cette partie est de réaliser un décodeur,
cela , le logiciel de conception QUARTUS II est utilisé afin de pour afficher les valeurs du compteur modulo 6 réalisé
pouvoir créer des schémas électriques en utilisant des composants précédemment.
logiques, puis le logiciel MODELSIM-ALTERA pour simuler le
comportement de ces circuits, afin de les valider ou non.

METHODOLOGIE
Pour tester ces notions l’objectif du TP est de réaliser un
séquenceur, pour présenter des chiffres sur un afficheur 7
segments. La première étape est de réaliser un compteur modulo,
puis un décodeur qui analyse l’information apportée par le
compteur. Un diviseur de fréquence est également néscessaire
pour obtenir un affichage observable par l’œil humain. Fig. 2 Simulation illustrant le comportement du compteur
Finalement, l’implémentation d’un bouton poussoir au circuit, qui modulo 6
donne le sens d’affichage des segments (horaire ou anti-horaire),
ainsi que d’un système anti-rebonds est la dernière partie de la
synthèse de ce séquenceur. Comme on peut le voir sur la Fig.2, le circuit est
fonctionel, les sorties actives se succèdent à chaque front montant
de l’horloge, et se réinitialisent tous les 6 coups. Le fait que les
sorties soient considérées actives à l’état bas est dû aux inverseurs
2. RÉSULTATS DES SIMULATIONS placés en sortie du décodeur, comme visible en Fig.1. Cela est dû
Cette partie portera sur la présentation des solutions à une spécificité de l’énoncé « Les segments de l’afficheur sont
imaginées pour répondre aux problèmes posés dans les différents allumés lorsque la sortie correspondante du FPGA est à l’état
énoncés. Pour cela, les circuits et simulations clés seront bas » (page 6).
présentés, ainsi que l’explication du raisonnement qui a amené à
ces innovations.
3.3: Synthèse d’un diviseur de fréquence
3.1: Synthèse d’un compteur modulo 6

L’objectif de cette partie est de créer un compteur


modulo 6, car une séquence comprend 6 états successifs en sortie.

Fig.3 Compteur modulo 8 intégrant un diviseur de fréquence

La synthèse du diviseur de fréquence est composée de


plusieurs étapes.
Fig.1 Compteur Modulo 6
La première est d’ajouter un ‘clk_en’ sur le bloc
Ce compteur modulo 6 est tout d’abord constitué d’un incrémenteur, afin de ne pas prendre en compte tous les coups de
bloc ‘‘counter’’ qui incrémente de ‘1’ la valeur transmise par le l’horloge.
bus de bits qu’il génère à chaque front montant de l’horloge. Ce La seconde est de créer une nouvelle boucle de
compteur pourait en théorie compter jusque 7, mais le bloc compteur, mais cette fois ci modulo 8,333,333. Ce chiffre est le
‘‘compare’’ l’en empêche. En effet, quand ce dernier reçoit la ratio entre la fréquence de CLOCK_50 valant 50 MHz, et la
valeur ‘5’, il envoie un signal dans le ‘‘counter’’ forçant celui-ci fréquence désirée de 6 Hz. Le comparateur va donc renvoyer une
à se réinitialiser. Le dernier composant important est le valeur non nulle 6 fois par seconde. Le bus utilisé ici a une taille
3

de 23 bits, c’est pour pouvoir représenter le nombre 8,333,333. Il


aurait pu y avoir une taille plus grande, mais pas plus petite.

En branchant cette sortie sur l’entrée clk_en du


compteur de la boucle modulo 8, le compteur ne va incrémenter
sa valeur que toutes les 0.1666… secondes.

Dans l’objectif de rendre nos simulations plus rapides,


nous utiliserons dans toute la suite du TP un diviseur de fréquence
de ratio 10, le principe étant le même
Fig.6 Schéma de fonctionnement du bouton poussoir

Sur le schéma présenté en Fig.6, l’utilisation du bouton


poussoir est représenté par la pin KEY[0]. Puisque le bloc logique
est un ‘flip-flop’, à chaque front montant du signal du bouton
Fig.4 Représentation d’un diviseur de fréquence par 10 poussoir, la boucle s’active. (ie : lors du relâchement du bouton).

Pour faire la simulation présentée en Fig.4 une diviseur de Le ‘latch’ n’est pas utilisé ici car il continuerait
fréquence a été utilisé, de sorte que l'entrée clock enable du d’effectuer la boucle tant que le bouton n’est pas pressé,
compteur ne s'active qu'au 10 ème front montant de de la CLOCK ordonannt donc au compteur de changer sa manière de compter
50. (Up ou Down) en permanence, et empêchant donc le circuit de
réaliser sa fonction.
La boucle inverseur renvoyant l’opposé de la sortie
3.4: Utilisation d’un bouton poussoir dans l’entrée permet d’inverser à chaque appui la valeur
UPDOWN, et donc de détermine si le competur compte de
manière croissante (à 1) ou décroissante (à 0).
L’objectif de cette partie est d’utiliser un bouton
poussoir, de sorte qu’à chaque appui sur ce dernier, le compteur
change son ordre de comptage, à savoir croissant ou décroissant. Le compteur pouvant maintenant compter des deux
façons, il reste à gérer l’initialisation et la réinitialisation.

Pour cela, deux blocs de comparaison, un pour la valeur


5, le maximum et un autre pour 0, la valeur minimum. La stratégie
utilisée ici est que, si :

- Le bloc comparateur à la valeur 5 s’active, le circuit


vérifie que le compteur est en mode croissant, à savoir
UPDOWN qui vaut 1, et reinitialise le bloc
incrémenteur grâce à l’entrée reset
Fig.5 Circuit permettant d’obtenir un compteur croissant ou
décroissant - Le bloc comparateur à la valeur 0 s’active, le circuit
vérifie que le compteur est en mode décroissant, à
savoir UPDOWN qui vaut 0, donc son inverse vaut 1,
et initialise le bloc incrémenteur à la valeur 5 grâce à
La Fig.5 présente le circuit dans son ensemble, l'entrée set
comprenant le bouton poussoir, les comparateurs, et les parties
permettant de réinitialiser ou d’initialiser le compteur.
4

Fig.9 Diagramme d’état de la machine à mettre en


œuvre

Comme présenté en Fig.9, c’est la variable clk_enable


Fig.7 Schéma complet, intégrant le diviseur de fréquenc qui détermine si le système peut changer d’état. Les changement
de la valeur de sorties ne peuvent se produire qu’après 2
changements d’états du bouton (appui et relachement), ce qui
empêche le système de se bloquer.

En générant une machine d’état sur Quartus, on obtient


un code en langage VHDL, qui est composé de deux parties
distinctes, le ‘ENTITY’, qui déclare les ports utilisés, et
comment. La seconde partie est ‘ARCHITECTURE’, qui définit
les variables, et l’algorithme de manière générale.
Fig.8 Simulations du compteur croissant et décroissant

Le signal utlisé pour scruter l’entrée liée au bouton


Lors de la simulation représentée en Fig.8, le bouton poussoir peut être celui déjà utilisé pour diviser la fréquence de
poussoir est représenté par une horloge de fréquence 10 fois l’horloge, réalisé en partie 3.3. En effet, il est de la forme
inférieure à celle du compteur. d’impulsions brèves, de fréquence très basse devant l’horloge du
système
Il y est visible, qu’à chaque front montant du signal du
bouton poussoir (ie : lors du relâchement du bouton), le compteur
change l’ordre de comptage.
3. CONCLUSION
Cependant, lors de la simulation sur carte, avec un
bouton réel, le compteur ne prenait pas forcément en compte Pour conclure, créer des systèmes et des simulations sur
l’appui sur le bouton. Cela est dû à la ‘lenteur’ humaine, car même Quartus est une bonne alternative à utiliser directement une carte,
en n’appuyant qu’une fraction de seconde, l’horloge du circuit car la situation est idéalisée. Ainsi, la réalisation d’un séquenceur
réalise de nombreux tours, et crée des rebonds, ce qui empêche passe par la conception et la verification d’idées concernant le
un bon fonctionnement du bouton poussoir. Pour surmonter ce compteur, le réducteur de fréquence et enfin le système UpDown
problème, il faut instaurer un système anti-rebond. sans rebonds.

Ce dispositif anti-rebonds peut être réalisé avec une


machine d’états, qui ‘bloque’ le système dans un état tant que le
bouton reste appuyé ou ne reste pas appuyé. Ainsi, c’est la
pression ou le relâchement du bouton qui sera pris en compte. 4. REFERENCES

[1] Intel.com. 2013. Implementing State Machines (Verilog


3.5: Synthèse d’un système anti-rebonds HDL). [online] Available at:
<https://www.intel.com/content/www/us/en/programmable/
quartushelp/13.0/mergedProjects/hdl/vlog/vlog_pro_state_
Pour réaliser ce système, il faut réaliser un dispositif machines.htm#:~:text=A%20state%20machine%20is%20a,
permettant de scruter de manière périodique l’entrée reliée au simulated%20behavior%20of%20your%20design.>
bouton poussoir, avec une fréquence moins élevée que les
[Accessed 31 October 2020]
rebonds. C’est le passage de l’état haut à l’état bas qui permet un
changement d’état en sortie de la machine.