Dans cet exercice, nous vous proposons de réaliser un métronome dont le tempo est défini par l’intervalle de temps entre deux appuis sur un bouton-poussoir.
Ouvrez le fichier CoCiNum/src/vhdl/Exercices/Metronome/Metronome.vhd
:
cd $HOME/CoCiNum/src/vhdl/Exercices/Metronome
gedit Metronome.vhd &
L’entité Metronome
possède les ports suivants :
Port | Direction | Type | Rôle |
---|---|---|---|
clk_i |
Entrée | Logique | Le signal d’horloge global. |
btn_center_i |
Entrée | Logique | L’état du bouton-poussoir central. |
leds_o |
Sortie | Vecteur de 16 bits | Commandes des seize voyants. |
Afin de détecter les instants où le bouton est pressé, tout en filtrant les
rebonds, l’architecture contiendra une instance de l’entité EventDetector
avec
son architecture Debouncer
(vous devez avoir réalisé au préalable l’activité
Circuits séquentiels).
Nous proposons de développer une architecture ayant le comportement suivant :
tapping_reg
indique si le circuit est en mode
« Mesure de l’intervalle entre deux appuis » ('1'
) ou en mode « Métronome » ('0'
).
Il est mis à '1'
au premier appui sur le bouton, et à '0'
au second appui.timer_max_reg
compte le nombre de fronts d’horloges écoulés entre le premier et le second appui.
La LED 0 indique l’état courant du bouton (sortie status_o
de l’entité EventDetector
).
La LED 1 est allumée.timer_reg
compte de manière cyclique de 0
à timer_max_reg
.
La LED 0 est allumée pendant un quart de chaque cycle de comptage de timer_reg
.
La LED 1 est éteinte.Dans un terminal, exécutez les commandes suivantes.
La commande cd
peut être omise si vous êtes déjà dans le dossier Metronome
.
cd $HOME/CoCiNum/src/vhdl/Exercices/Metronome
ghdl -a ../../EventDetector/EventDetector.vhd ../../EventDetector/EventDetector_Debouncer.vhd Metronome.vhd
Modifiez votre fichier source jusqu’à ce qu’il n’y ait plus de message d’erreur.
Démarrez la simulation en utilisant les commandes suivantes :
cd $HOME/CoCiNum/src/vhdl/Exercices/Metronome/tests
make
Le script de test affiche une fenêtre avec deux LED et un bouton.
Dans des conditions normales, une LED allumée a la couleur verte.
Si une LED s’allume en rouge, cela signifie généralement que le signal leds_o(i)
vaut 'U'
(signal non initialisé), ou 'X'
(valeur indéterminée).
Voir à ce sujet la section sur le type std_logic
.
Agissez sur le bouton et observez l’état des LED.
Vérifiez que vous obtenez le comportement attendu.
Pour afficher les chronogrammes, utilisez la commande suivante :
gtkwave Metronome.ghw
Par défaut, la fenêtre GTKWave n’affiche aucun chronogramme. Déroulez l’arborescence à partir de l’élément top dans le panneau SST en haut à gauche et sélectionnez les signaux à afficher dans la liste Signals en bas à gauche.
Utilisez les boutons de la barre d’outils pour dézoomer: le bouton Zoom fit ajuste l’échelle de temps pour que la durée totale de simulation corresponde à la largeur de la fenêtre.
Voici la liste des fichiers nécessaires à la construction du projet.
Tous ces fichiers sont situés dans des sous-dossiers de CoCiNum/src/vhdl
.
Sous-dossier | Fichier | Rôle |
---|---|---|
Exercices/Metronome |
Metronome.vhd |
Code source de l’entité Metronome et de son architecture. |
EventDetector |
EventDetector.vhd |
Code source de l’entité EventDetector . |
EventDetector |
EventDetector_Debouncer.vhd |
Code source de l’architecture Debouncer pour l’entité EventDetector . |
Basys3 |
Basys3_Buttons.xdc |
Fichier de contraintes pour Vivado, définition des boutons-poussoirs. |
Basys3 |
Basys3_Clock.xdc |
Fichier de contraintes pour Vivado, définition de l’horloge. |
Basys3 |
Basys3_Leds.xdc |
Fichier de contraintes pour Vivado, définition des LED. |
Si vous ne l’avez pas encore fait, démarrez Vivado à l’aide des commandes suivantes :
cd $HOME/CoCiNum
./scripts/vivado
Créez un nouveau projet en renseignant les informations suivantes :
Page | Champ ou action | Valeur |
---|---|---|
Project Name | Project name | Metronome |
Project location | CoCiNum/vivado |
|
Create project subdirectory | Oui | |
Project Type | RTL Project | |
Add Sources | Add Files | Fichiers .vhd dans le tableau précédent |
Copy sources into project | Non | |
Add Constraints | Add Files | Fichiers .xdc dans le tableau précédent |
Copy constraints files into project | Non | |
Default Part | Family | Artix-7 |
Package | cpg236 | |
Speed | -1 | |
Part | xc7a35tcpg236-1 |
Pour donner une valeur au paramètre générique CLK_FREQUENCY_HZ
de l’entité
Metronome
, exécutez cette commande dans le panneau Tcl Console de Vivado :
set_property generic CLK_FREQUENCY_HZ=100000000 [current_fileset]
Exécutez cette commande dans la console Tcl pour réduire la gravité de certains messages concernant les affectations de broches :
set_msg_config -id {Common 17-55} -new_severity {WARNING}
Générez le fichier binaire à charger dans le FPGA : Flow Navigator → Program and Debug → Generate Bitstream.
Vivado va enchaîner toutes les étapes d’analyse des fichiers sources, de synthèse logique, de placement et routage, pour terminer par la génération d’un fichier binaire à charger dans le FPGA.
À la fin des opérations, la boîte de dialogue Bitstream Generation Completed s’affiche. Choisissez Open Hardware Manager.
Vérifiez que l’interrupteur d’alimentation de votre carte Basys3 est en position OFF. Le cavalier situé à côté de l’interrupteur doit être en position USB.
Reliez le connecteur micro-USB de la carte à un port USB de votre PC. Mettez la carte sous tension.
En haut du panneau Hardware Manager, pressez Open target et choisissez Auto Connect.
Pressez ensuite Program Device.