Compteur de secondes

Introduction

Cette leçon a pour objectif de compléter la formation précédente sur l'utilisation de Quartus.

Pour la réalisation de projets plus ambitieux, il est recommandé de décomposer le projet en un ensemble de sous-fonctions. Ce découpage a plusiseurs objectifs :

  1. Le premier, évident, part du principe que décomposer le projet en plusieurs sous-fonctions permet de simplifier l'écriture de chacune des tâches réalisés par le projet.
  2. Le second est une conséquence intéressante : la description séparée des différentes sous-fonctions d'un projet permet à chaque membre d'une équipe de travailler séparément. Et ce découpage des tâches va jusqu'à la validation séparée (test unitaire) de chacune des sous-fonctions du projet.

Une fois chacune des fonctions primaires écrites, testées et validées, on peut les réunir et les interconnecter entre elles sur un schéma unique qualifié de schéma hiérarchique. Il reste alors à valider l'ensemble par un test global.

Sujet

On veut réaliser un dispositif capable de compter les secondes qui s'écoulent.

La base matériel du dispositif est imposée : il s'agit d'une carte DE1 de Terrasic.

Pour rythmer le fonctionnement de notre système, on dispose sur la DE1 d'un signal d'horloge, noté clk, de 50MHz.

Dans cette première approche, on se limite à l'affichage des secondes de 0 à 9 et on utilise à cet effet un afficheur à 7 segments, l'afficheur HEX0 de la carte DE1.

On utilise également le bouton poussoir KEY3 de la DE1 comme bouton de reset actif à l'état bas pour initialiser le système et remettre le compteur à 0.

Pour finir, le comptage s'effectuera de manière cyclique et lorsque le compteur sera à 9, il repassera à 0 à la seconde suivante.

Travail préparatoire

Proposer un découpage fonctionnel à partir de blocs fonctionnels simples pour passer des entrées (reset et clk) aux sorties de pilotage de l'afficheur 7 segments (signaux A, B, C, D, E, F, G).

Correction

La vidéo ci-dessous présente le projet faisant l'objet de cette démonstration :

Décodeur 7 segments

  1. Créer un nouveau projet sous le nom : compteur_secondes
    Note : tous les blocs définis dans cet article seront intégrés à ce projet.
  2. A l'aide du programme en Python, créer le squelette des programmes VHDL pour la réalisation et le test du décodeur 7 segments : decodeur7segments.vhd pour la réalisation et test_decodeur7segments.vhd pour le test bench associé.
    Remarques :
    - le chiffre à afficher sera codé sur les 4 entrées E0, E1, E2, E3 (poids forts sur E3 et faible sur E0). On aura 7 sorties (A, B, C, D, E, F, G) pour les 7 segments.
    - pour le nom de l'entité, il faudra entrer decodeur7segments
  3. Intégrer les deux fichiers créés au projet.
  4. Ecrire le code de la description comportementale en utilisant la structure when ... else ...
  5. Tester ce programme de façon exhaustive.
    Remarque : ne pas oublier de mettre le fichier decodeur7segments.vhd en sommet de hiérarchie et de configurer la simulation pour utiliser ModelSim-Altera comme outil de simulation externe.
  6. A l'issue des tests, créer un symbole pour pouvoir utiliser le décodeur 7 segments dans un schéma.
    Méthode : choisir Create symbol en effectuant un clic droit sur l'intitulé de fichier decodeur7segments.vhd dans le navigateur de projet.
Correction

Compteur

Dans le même projet, on décrit maintenant créer un bloc fonctionnel capable de compter de 0 à 9.

  1. Rappeler le nombre de bits nécessaire pour coder une information couvrant l'intervalle 0 à 9.
  2. Le comptage se fait de façon synchrone et on ajoute la possibilité de réaliser un remise à 0 asynchrone.
    En entrée, on trouvera donc un signal clk pour l'horloge et un signal reset pour la remise à 0 active à l'état bas (c'est reset=0 qui provoque la remise à 0).
    En sortie, on choisit de travailler sous forme vectorielle et le signal de sortie sera un std_logic_vector(3 downto 0) nommé cpt.
    Utiliser le programme Python pour générer les fichiers avec comme nom d'entité compteur4bits permettant d'obtenir le fichier compteur4bits.vhd et le fichier de test test_compteur4bits.vhd
  3. Compléter le programme dans compteur4bits.vhd et modifier le fichier de test test_compteur4bits.vhd pour avoir une fréquence de comptage de 1MHz et une impulsion basse de reset durant 100ns toutes les 20us.
  4. Configurer Quartus pour la simulation en ajoutant ce nouveau test bench.
  5. Tester le programme obtenu.
Correction

Diviseur de fréquence

Correction

Schéma hiérarchique

Correction

Simulation du projet complet

Correction