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.
