Régler la durée de décompte

Dans cette étape, nous allons compléter le circuit de manière à permettre le réglage du temps souhaité. Nous allons également mettre en place la commande de l’alarme.

Mise en forme des signaux provenant des boutons-poussoirs

En mode réglage, l’utilisateur peut agir sur les boutons « + » et « - » pour modifier la valeur d’un compteur. Dans le minuteur, lorsque l’entrée btn_plus_i passe à '1', il faut activer l’entrée up_i du compteur correspondant au chiffre sélectionné.

L’entité UpDownCounter, de son côté, est construite de telle sorte que la valeur d’un compteur s’incrémente à chaque front d’horloge où son entrée up_i vaut '1'. Si nous voulons qu’un compteur s’incrémente une fois, il faut que son entrée up_i soit à '1' sur un seul front d’horloge.

Sur la figure ci-dessous, nous avons représenté les entrées/sortie d’un composant qui, lorsqu’il détecte qu’un bouton a été pressé, produit sur sa sortie evt_o une impulsion d’une durée égale à une période d’horloge.

Entité ButtonPressDetector

Le fonctionnement du détecteur d’appui peut être résumé par ce chronogramme. Il consiste à copier l’état du bouton dans deux signaux btn_reg(0) et btn_reg(1) décalés d’une période d’horloge. La comparaison de ces deux signaux permet de produire le signal evt_o.

Chronogramme de l'entité ButtonPressDetector

Pour le réaliser, nous proposons l’architecture suivante :

Architecture de l'entité ButtonPressDetector

Afficher la légende des schémas.

Nous faisons l’hypothèse que les boutons ne sont pas sujets aux rebonds.

Compléter la description du détecteur d’appuis

Ouvrez le fichier ButtonPressDetector.vhd :

cd $HOME/CoCiNum/src/vhdl/Pomodoro
gedit ButtonPressDetector.vhd &

Complétez l’architecture de manière à décrire le circuit de la figure ci-dessus.

Vérifier la syntaxe

Dans un terminal, exécutez les commandes suivantes. La commande cd peut être omise si vous êtes déjà dans le dossier Pomodoro.

cd $HOME/CoCiNum/src/vhdl/Pomodoro
ghdl -a ButtonPressDetector.vhd

Si nécessaire, modifiez le fichier ButtonPressDetector.vhd jusqu’à ce qu’il n’y ait plus de message d’erreur.

Simuler le fonctionnement du détecteur d’appuis

Démarrez la simulation en utilisant les commandes suivantes :

cd $HOME/CoCiNum/src/vhdl/Pomodoro/tests/ButtonPressDetector
make

Cette commande n’ouvre pas de nouvelle fenêtre. Elle exécute un scénario de test et enregistre les séquences de valeurs des signaux.

Une fois la simulation terminée, affichez les chronogrammes :

gtkwave -S ButtonPressDetector.tcl ButtonPressDetector.ghw

Observez l’évolution des valeurs des signaux. S’ils sont conformes au comportement attendu, vous pouvez passer à la suite. Dans le cas contraire, corrigez la description du compteur et relancez la simulation jusqu’à ce que vous obteniez des chronogrammes corrects.

Instancier quatre détecteurs d’appuis

Dans le fichier Pomodoro.vhd, complétez l’architecture en créant une instance de l’entité ButtonPressDetector pour chacun des boutons, comme représenté sur la figure ci-dessous. Le signal state_reg et le processus p_state_reg seront ajoutés ultérieurement.

Instanciation des détecteurs d'appuis

Afficher la légende des schémas.

Vérifier la syntaxe

Dans un terminal, exécutez les commandes suivantes. La commande cd peut être omise si vous êtes déjà dans le dossier Pomodoro.

cd $HOME/CoCiNum/src/vhdl/Pomodoro/
ghdl -a ButtonPressDetector.vhd UpDownCounter.vhd ../SegmentDisplay/SegmentDecoder.vhd Pomodoro.vhd

Si nécessaire, modifiez le fichier Pomodoro.vhd jusqu’à ce qu’il n’y ait plus de message d’erreur.

États du minuteur

Le bouton « Start/Stop » et le bouton « Select » permettent à l’utilisateur d’agir sur le comportement du minuteur, soit pour changer le chiffre sélectionné en mode réglage, soit pour alterner entre réglage, décompte et alarme. Nous pouvons mettre en évidence les différents états du minuteur, que nous avons représentés sur le diagramme ci-dessous.

Graphe d'états du minuteur

Afficher la légende des schémas.

Sur le diagramme ci-dessus, lorsqu’un signal combinatoire n’est pas explicitement affecté dans un état, on considère qu’il est mis à '0'. Par exemple, dans l’état COUNT_DOWN, les signaux alarm_o, up_minutes_tens, up_minutes_ones, up_seconds_tens, up_seconds_ones, led_minutes_tens_o, led_minutes_ones_o, led_seconds_tens_o et led_seconds_ones_o sont tous à '0'.

Sur les figures suivantes, nous proposons une réalisation possible de cette machine à états. L’état courant est mémorisé par le signal state_reg et la fonction de transition est réalisée par le processus p_state_reg.

Réalisation de la machine à états du minuteur

Afficher la légende des schémas.

Les signaux d’incrémentation et de décrémentation des compteurs sont affectés de manière, soit à réagir aux appuis sur les boutons, soit à décompter le temps, soit à ne rien faire, en fonction de l’état courant. La figure ci-dessous ne représente que le pilotage du compteur des dizaines des minutes ; les autres compteurs sont commandés d’une manière similaire.

Sorties du minuteur

Afficher la légende des schémas.

Compléter la description du minuteur

Dans le fichier Pomodoro.vhd, complétez l’architecture de la manière suivante :

  1. Déclarez un type énuméré State_t représentant les états possibles du système (voir le graphe d’états).
  2. Déclarez le signal state_reg de type State_t.
  3. Ajoutez un processus p_state_reg dans lequel vous décrirez la fonction de transition de la machine à états (voir le graphe d’états).
  4. En vous inspirant de la figure ci-dessus, modifiez les affectations des signaux de commande des compteurs.
  5. Enfin, ajoutez l’affectation de la sortie alarm_o.

Vérifier la syntaxe

Dans un terminal, exécutez les commandes suivantes. La commande cd peut être omise si vous êtes déjà dans le dossier Pomodoro.

cd $HOME/CoCiNum/src/vhdl/Pomodoro/
ghdl -a ButtonPressDetector.vhd UpDownCounter.vhd ../SegmentDisplay/SegmentDecoder.vhd Pomodoro.vhd

Si nécessaire, modifiez le fichier UpDownCounter.vhd jusqu’à ce qu’il n’y ait plus de message d’erreur.

Simuler le fonctionnement du circuit

Démarrez la simulation en utilisant les commandes suivantes :

cd $HOME/CoCiNum/src/vhdl/Pomodoro/tests/Pomodoro
make

Pour arrêter la simulation, refermez la fenêtre contenant les afficheurs sept segments. Il est alors possible de regarder les chronogrammes plus en détail.

gtkwave -S Pomodoro.tcl Pomodoro.ghw