Dans cet exercice, vous allez réaliser un circuit qui fait varier l’intensité des LED en fonction du nombre d’interrupteurs en position haute.
Ouvrez le fichier CoCiNum/src/vhdl/Exercices/Dimmer/Dimmer.vhd
:
cd $HOME/CoCiNum/src/vhdl/Exercices/Dimmer
gedit Dimmer.vhd &
L’entité Dimmer
possède les ports suivants :
Port | Direction | Type | Rôle |
---|---|---|---|
clk_i |
Entrée | Logique | Le signal d’horloge global. |
switches_i |
Entrée | Vecteur de 16 bits | État des seize interrupteurs. |
leds_o |
Sortie | Vecteur de 16 bits | Commandes des seize voyants. |
En vous inspirant de l’entité NumberOfSwitchesUp,
ajoutez un processus qui compte le nombre d’interrupteurs à l’état haut et range
le résultat dans un signal count
.
La commande des LED suivra le principe de la modulation en densité d’impulsion (PDM).
Il s’agit d’une technique de conversion numérique-analogique simple qui produit
ue séquence d’impulsions sur un signal logique en respectant une certaine
proportion de '0'
et de '1'
.
Dans cet exercice, count
est un entier compris entre 0 et 16.
L’allumage des LED respectera alors les règles suivantes :
count
vaut 0, les LED seront toujours éteintes.count
vaut 1, les LED seront allumées 1/16 du temps.count
vaut 2, les LED seront allumées 2/16 du temps.count
vaut 15, les LED seront allumées 15/16 du temps.count
vaut 16, les LED seront toujours allumées.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é Dimmer
,
réalisez un diviseur de fréquence
qui produira un signal cycle
avec une impulsion toutes les millisecondes.
À chaque milliseconde, votre architecture mettra à jour un signal epsilon_reg
en respectant l’algorithme suivant :
si epsilon_reg > count alors
epsilon_reg ← epsilon_reg - count
sinon
epsilon_reg ← epsilon_reg + 16 - count
fin si
Affectez la sortie leds_o
pour que les LED soient éteintes
lorque epsilon_reg > count
et allumées le reste du temps.
Prenons trois exemples pour illustrer le fonctionnement de cet algorithme.
count = 4
:count = 5
:count = 13
:Dans un terminal, exécutez les commandes suivantes.
La commande cd
peut être omise si vous êtes déjà dans le dossier Dimmer
.
cd $HOME/CoCiNum/src/vhdl/Exercices/Dimmer
ghdl -a Dimmer.vhd
Modifiez votre fichier source jusqu’à ce qu’il n’y ait plus de message d’erreur.
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/Dimmer |
Dimmer.vhd |
Code source de l’entité Dimmer et de son architecture. |
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. |
Basys3 |
Basys3_Switches.xdc |
Fichier de contraintes pour Vivado, définition des interrupteurs. |
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 | Dimmer |
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é
Dimmer
, 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.