Au cours de ce TP vous allez étudier et concevoir des fonctions de logique séquentielle : un compteur/décompteur et un système anti-rebonds. Les tâches à effectuer sont :
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.

Pour valider le fonctionnement du compteur et des générateurs de TOP nous avons mis à votre disposition un banc d'essai (testbench).
Le simulateur affiche un chronogramme des stimulis envoyés par le testbench ainsi que les réponses de votre circuit.
Dans la réalité, aucun bouton poussoir ne fonctionne simplement comme on le souhaiterait: lorsqu'on appuie sur le bouton, la lame métallique qui bouge pour assurer le contact se met à vibrer et rebondir, si bien que pendant un certain temps, le circuit se ferme et s'ouvre plusieurs fois avant de se stabiliser. Vous avez remarqué que c'est le cas sur votre maquette. Le but de ce qui va suivre est de concevoir un système électronique qui remédie à ce problème.
|
lclk |
|
S0 pour le signal du bouton A |
|
S1 pour le signal du bouton B |
L'idée générale d'un système anti-rebonds (ou "filtre anti-rebonds") est de ne pas accorder de signification aux changements rapides du signal pendant la durée qui correspond à celle des rebonds. C'est une stratégie possible car la durée de ces rebonds (quelques microsecondes) est très inférieure à la durée d'appui sur le bouton (de l'ordre de la seconde). Il n'y a donc pas de confusion possible entre les rebonds d'une part, et l'action manuelle de l'opérateur d'autre part. Pour pouvoir dire cela, il faut avoir une bonne connaissance de la durée maximale possible des rebonds, ce que vous venez d'observer et de mesurer.
Imaginez un système anti-rebonds, basé sur un registre à décalage, permettant de filtrer les signaux d'entrée A et B. Ce système, nommé AR, sera intercalé sur les signaux des boutons, avant les GEN_TOP (voir figure suivante).

L'usage d'un registre à décalage consomme beaucoup de bascules si la durée des rebonds est très grande devant la période d'horloge. On peut faire plus économique en bascules, qui sont des circuits comportant beaucoup de transistors.