30 / 63 · Concept
État suivant du compteur et priorité du reset
Unifier incrémentation, maintien, reset et rebouclage, puis calculer les résultats front par front.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Définir d'abord la fonction d'état suivant
Un compteur libre de bits avec reset synchrone et enable se définit ainsi :
Le resetReset Commande ramenant l'état à la valeur initiale spécifiée. Son caractère synchrone/asynchrone et sa priorité sur les autres commandes doivent être définis. est prioritaire ; enable=0 conserve l'état. Dans la visualisation ci-dessous, vous pouvez modifier enable pour comparer incrémentation et maintien.
Avec q initial=11, sélectionner reset=1 change seulement l'état suivant en 00. Avancez l'horloge pour constater quand le stockage change. Relâchez reset et parcourez 00→01→10→11→00 ; avec enable=0, vérifiez que les fronts continuent mais q reste constant.
Le reset synchrone est prioritaire sur enable. Si enable=0, conserver la valeur mémorisée. q=11; q_next = (q + 1) mod 4
Prédire chaque front
Avec un état initial de 3 et reset=1 au premier front puis 0, le compteur deux bits donne après les fronts 0,1,2,3,0. Même si reset est activé entre deux fronts, le registreRegistre Circuit stockant plusieurs bits d'état. Les registres synchrones du cours capturent leur entrée définie sur un front d'horloge. En savoir plus synchrone ne passe pas immédiatement à 0 avant le front montantFront montant Instant où l'horloge passe de 0 à 1, distinct du niveau désignant tout l'intervalle CLK=1. En savoir plus.
| Front | reset avant le front | Ancien C | Nouveau C |
|---|---|---|---|
| 1 | 1 | 3 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 2 |
| 4 | 0 | 2 | 3 |
| 5 | 0 | 3 | 0 |
Chaque colonne du chronogramme observe un front. Les entrées précèdent le front ; les états suffixés after suivent la mise à jour. L'alignement est un ordre d'échantillonnage, pas un retard physiqueRetard de propagation Temps nécessaire après un changement d'entrée pour que la sortie se stabilise à sa valeur correcte. Équivalence logique et caractéristiques temporelles sont distinctes. En savoir plus. À partir de 3, le premier reset prévaut sur l'incrémentation ; le dernier front reboucle de 3 à 0.
Voir les données du chronogramme
| Signal | Forme d'onde | Valeurs du bus |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count avant | 23452 | 11 → 00 → 01 → 10 → 11 |
| count après | 23452 | 00 → 01 → 10 → 11 → 00 |
Ne pas confondre les types de reset
Un if(rst) dans always_ff @(posedge clk) est synchrone, contrairement à un reset dont le front figure dans la liste d'événements. La désactivation asynchrone impose notamment recovery/removal ; ne changez pas de type simplement pour atteindre 0 plus vite.
Pour produire une impulsion périodique, définissez aussi son état déclencheur : signal haut tant que le compte est maximal, ou impulsion d'un cycle après le front de retour à 0 ? L'équation et l'observation diffèrent.
Essayez vous-même
Un compteur trois bits vaut 7. Appliquez rst=0,en=0 au premier front puis rst=0,en=1 au suivant. Quels sont les états ?
Lire l’explication
Le premier front conserve 7 ; le second reboucle sur trois bits et donne 0. Conserver la valeur 8 demande une largeur supérieure ou une politique distincte de saturation/erreur.