Dans cet exercice on cherche à représenter sous forme de bargraph le temps pendant lequel un bouton est resté pressé ou relâché.
Ouvrez le fichier CoCiNum/src/vhdl/TimePressed/TimePressed.vhd :
cd $HOME/CoCiNum/src/vhdl/TimePressed
gedit TimePressed.vhd &
L’entité TimePressed 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. | 
Sachant que la fréquence du signal d’horloge clk_i est indiquée par le
paramètre générique CLK_FREQUENCY_HZ de l’entité TimePressed,
réalisez un diviseur de fréquence
pour gérer la vitesse à laquelle on met à jour l’affichage.
Un signal count_reg tiendra à jour le nombre de LED à allumer.
Dans un processus synchrone sur l’horloge, à chaque cycle du diviseur de fréquence,
mettez à jour count_reg de la manière suivante :
count_reg.count_reg.La gestion de la sortie leds_o en fonction de count_reg est identique à
celle de l’exercice Bargraph.
Dans un terminal, exécutez les commandes suivantes.
La commande cd peut être omise si vous êtes déjà dans le dossier TimePressed.
cd $HOME/CoCiNum/src/vhdl/TimePressed
ghdl -a TimePressed.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/TimePressed/tests
make
Le script de test affiche une fenêtre avec une rangée de 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 TimePressed.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 | 
|---|---|---|
TimePressed | 
TimePressed.vhd | 
Code source de l’entité TimePressed et de son architecture. | 
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 | TimePressed | 
| 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é
TimePressed, 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.
