Vous êtes sur la page 1sur 22

TP MINUTEUR

Electronique numérique:

Simulation Logique VHDL :


Etude d’un minuteur programmable ELHAROUCH YASSINE
affichant les minutes et les secondes FARAH ZAKARIAE
PROF: CHRISTIAN JOSSE
Sommaire.

 Introduction
 Cahier de charge
 Architecture globale
 Graphe d’état d’un minuteur
 Code registre et sa simulation
 Code décomptage unitaire et sa simulation
 Code décomptage dizaine et sa simulation
 Code séquenceur et sa simulation
1. INTRODUCTION :

Le but du TP est de modéliser en langage VHDL le système d’un


minuteur simple à 4 chiffres décimaux : 2 chiffres pour les minutes et 2
chiffres pour les secondes. Tout ça grâce à une carte BASYS 3 qui va être
coder à l’aide d’un logiciel qui s’appelle VIVADO.
Le système est composé principalement de 4 fichiers à simuler en
langage VHDL :
 Fichier registre : Physiquement, ce sont des bascules D....des
mémoires en fait ! On peut facilement retenir qu'un registre est
un tiroir dans lequel on stocke une valeur (ça stocke dans notre
projet les valeurs de départ).
 Fichier décomptage unitaire : A partir de son entrée d’horloge, sur
une base de 1 seconde, ce composant permettra de générer des
secondes et des minutes de la partie unité ; lorsque la partie
unitaire arrive à 0, elle revient à 9 (10 valeurs en total). Le
démarrage et l’arrêt du décompteur sont commandés par le
bouton BNTL.
 Fichier décomptage dizaine : C’est le même que celui précédent, la
différence que les dizaines partent de 5 jusqu’à 0 (6 valeurs en
totale).
 Fichier séquenceur : c’est le fichier qui rassemble le code de la
structure générale du système puisque le séquenceur qui pilote
les différents composants du minuteur.
2. CAHIER DES CHARGES :

Ci-dessous le cahier des charges à respecter pour le fonctionnement du


minuteur :
• On est en phase d’attente de réglage (dans la suite du TP nous
l’appelons INIT) jusqu’à ce qu’on appuie sur le bouton BTNL. Le système
passe en mode réglage et la LED0 s’allume durant ce mode.
• Dans le mode réglage, on fixe les 4 chiffres décimaux avec les 16
interrupteurs (SW [15 :0]) dont on dispose sur la carte BASYS : DM
(Dizaine des minutes : SW [15:12]), UM (Unités des minutes : SW
[11:8]), DS (Dizaines des secondes : SW [7:4]) et US (Unités des
secondes : SW [3:0]). On appuie sur BTNR pour valider les réglages. Pour
que le réglage soit valide les chiffres rentrés doivent être compatibles
avec le format DMUMDSUS (phase de vérification). Tant que le chiffre
n’est pas validé on reste dans le mode réglage et on redemande à faire
rentrer des nouvelles valeurs.
• Lorsque le chiffre est validé, on quitte le mode réglage et on passe
dans le mode attente. LEDO s’éteint et LED1 s’allume.
• Le minuteur se met en marche une fois l’appuie sur BTNL. LED0 et
LED1 s’éteignent et LED2 s’allume.
• Arrivé à ‘0000’ l’afficheur se bloque : on entre en mode blocage. Les 4
LED sont allumées.
• Un appuie sur BTND et le système revient à l’état initial.
3. ARCHITECTURE GLOBALE :

Brièvement, chaque switch contient une valeur pour qu’elles soient


stocker dans des registres. Ces derniers sont liés à un bloc de
vérification qui vérifie si les valeurs sont bien conformes. Si tout est
bon, le bloc retourne un ‘1’ au séquenceur sur son entrée ‘CHIF_OK’. Le
séquenceur de sa part donne l’ordre de charger les valeurs dans le
décompteur. Puis il valide le décompteur pour lancer le minutage
jusqu’au zéro. A cette phase, on a deux options possibles :
 La boucle revient à l’état du chargement du décompteur par les
mêmes valeurs existantes dans les registres et relancer le
minutage.
 Ou bien revenir à l’état ‘INIT’ et rentrer de nouvelles valeurs.
La figure ci-dessous montre l’architecture globale du projet :
4. GRAPHE D’ETAT :

Tout ce qui était


expliqué dans la partie
précédente ainsi que le
cahier de charge se
traduit facilement
grâce à ce graphe
d’état.
En suivant les états et
les conditions, on peut
facilement traduire le
cahier de charge en
code VHDL.
5. CODE REGISTRE ET SA SIMULATION :
5.1 Code registre :
5.2 Code simulation registre :
5.3 Simulation code registre :

On peut voir clairement lors du chargement load et au front montant de


l’horloge, le ‘Dout’ prend la valeur du switch et la conserve dans le
registre.
6. CODE DECOMPTAGE UNITAIRE :
6.1 Code décomptage 9 :
Le principe du décomptage unitaire c’est que à chaque fois que les
unités arrivent à zéro, le décompteur revient à 9.
6.2 Code simulation décomptage 9 :

Le code simulation décomptage donne comme valeur de départ 7 dans


notre cas.
6.3 Simulation du Code décomptage 9 :

Notre bloc décompteur permet de décompter toutes les secondes


une unité de seconde, si cette unité de seconde est à 0 alors nous
devons la faire repasser à 9 puis décompter une dizaine de secondes au
prochain coup d’horloge.
Nous allons donc avoir quatre sous-blocs dans ce bloc, un bloc qui
va décompter de 9 à 0 pour les unités de seconde, un qui va décompter
de 5 à 0 pour les dizaines de secondes puis un sous-bloc qui lui va
décompter de 9 à 0 pour les unités de minute et un dernier sous-bloc
qui décompte de 5 à 0 pour les dizaines de minute.
7. CODE DECOMPTAGE DIZAINE :

7.1 Code décomptage 5 :


De même que précédemment, ci-dessous le code de décomptage
dizaine :
7.2 Code simulation décomptage 5 :
7.3 Simulation Code décomptage 5 :
Le code simulation décomptage donne comme valeur de départ 3 dans
notre cas.

7.4 Architecture du décomptage :


Nous voyons sur notre architecture que nous avons une entrée
commune (OK) à nos trois sous-blocs qui permet de commencer à
décompter si cette entrée est à l’état bas alors nous recopions en sortie
ce que nous avons en entrée.
Si cette fois-ci, nous avons go à l’état haut alors nous pouvons
commencer à décompter. Donc à chaque front montant de l’entrée
clk_1Hz (qui représente notre horloge globale divisée pour arriver à
1Hz) nous décomptons comme ce que nous avons dit en préambule.
Pour finir, à chaque fois que nous avons notre bus de sortie d’un sous-
bloc qui est à zéro alors la variable ‘VALID’ passe à 1 ce qui permet de
décompter le prochain sous-bloc car elle est rebouclée sur l’entrée
clk_1Hz du bloc suivant. Par conséquent, si toutes nos sorties internes
‘VALID’ sont à l’état haut (donc nous affichons 0 sur nos afficheurs 7
segments) nous avons donc fini de décompter et par conséquent nous
devons faire passer notre sortie stop à l’état haut. Nous utilisons pour
cela un ET logique entre toutes ces variables internes.
8. CODE SEQUENCEUR :

Le séquenceur est un bloc fonctionnel qui nous permet de gérer tous les autres
blocs. Il reçoit en entrée toutes les actions de l’utilisateur. C’est la partie
commande d’un système automatisé.
Notre minuteur commence tout d'abord avec l'état INIT. Ensuite lorsque l'on
appuie sur le BTNL, on passe à l'état Um, dans laquelle la led LD0 pour signaler
que nous sommes situés dans la phase REGLAGE et la valeur saisie pour Um est
mémorisée. On appuie sur BTND pour valider notre saisie puis nous nous
retrouvons à l'étape DS où la valeur DS est stockée et la led LD0 toujours à 1. Nous
appuyons à nouveau sur le BTNL pour valider puis nous nous retrouvons à l'état
Us dans lequel la led LD0 est toujours allumée et enregistrer la valeur de Us.
Une fois la valeur de Us rentré, nous validons à l'aide du BTNR puis on se retrouve
à l'étape CHARG_REGISTRE qui met fin aux réglages car elle éteint la led LD0 et
allume la led LD1. Une fois avoir choisi les quatre variables Um, DS, Us et Dm il ne
reste plus qu'à appuyer de nouveau sur BTNL pour lancer le minuteur : c'est l'état
MINUTEUR.

8.1 Code séquenceur :


8.2 Code simulation séquenceur :
8.3 Simulation Code séquenceur :

9. CONCLUSION :

Au cours de ce TP, nous avons réalisé un minuteur à l’aide des


connaissances acquises lors de nos séances de cours et TDs. Nous
avons réussi à réaliser les différents blocs de notre système. On a
essayé de comprendre en premier lieu le fonctionnement général
du minuteur à travers les schémas et les architectures et les
diagrammes d’état avant d’attaquer le codage VHDL. Cependant,
nous n’avons pas pu réaliser les tests sur la carte BASYS 2.

Vous aimerez peut-être aussi