L'utilisateur dispose de deux boutons nommés A et B. On actionne le bouton A pour faire +1, et le bouton B pour faire -1. Vous allez concevoir le circuit compteur/décompteur (ou CD) qui doit être incrémenté lors de l'appui sur le bouton A et décrémenté lors de l'appui sur le bouton B. Lorsqu'on appuie sur un bouton, quelque soit la durée de cet appui, l'incrémentation ou la décrémentation ne se font qu'une seule fois. Autrement dit pour faire +3, il faut appuyer 3 fois sur le bouton A, en relâchant l'appui entre deux actions sur le bouton. Et ceci même si on appuie longtemps sur le bouton.
Le circuit à concevoir sera constitué de 3 blocs :
- 2 blocs GEN_TOP ayant pour but de délivrer respectivement 2 impulsions TOP_A et TOP_B dont la durée est de une seule période d'horloge pour chaque appui sur les boutons A ou B.
Dans la pratique, cet appui (qui peut aller d'une fraction de seconde à plusieurs secondes) dure beaucoup plus longtemps qu'une période d'horloge (qui peut se compter en micro-secondes ou nano-secondes). Le role de GEN_TOP est de générer un signal dont la durée (une période d'horloge) est indépendante de la durée de l'appui sur le bouton.
- Un bloc UP_DOWN qui reçoit les signaux TOP_A et TOP_B. Lorque TOP_A est reçu par ce bloc, le compteur interne est incrémenté, alors que TOP_B provoque la décrémentation. Lorsque les 2 TOPs sont reçus ensemble (en même temps), le fonctionnement n'est pas spécifié et donc le concepteur a le choix de l'opération (incrémentation ou décrémentation ou rien).
Les modules GEN_TOP et UP_DOWN, que vous allez concevoir, seront des circuits synchrones, actionnés par la même horloge H.
Le signal NRST sert à initialiser d'une façon asynchrone les registres des modules (Reset asynchrone).Il est actif à l'état bas.
La figure suivante illustre l'architecture du compteur/décompteur CD.
