29 / 63 · Concept
Nombre d'états, largeur du compteur et codes inutilisés
Déduire la largeur de la plage de comptage et définir la récupération des états invalides.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Un compteur est aussi une machine à états
Un compteur répétant 0 à 9 nécessite dix états, donc au moins bits. Mais un 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 de quatre bits contient seize motifs : choisir la bonne largeur ne suffit pas à réaliser un comptage modulo-10.
M est le nombre d'états, pas le maximum. Compter de 0 à M−1 diffère de compter de 0 à M. Pour prendre en charge M=1, imposez une largeur minimale de 1 et maintenez toujours 0.
Parmi les seize codes de quatre bits, modulo-10 n'utilise que dix états normaux. Après avoir choisi la largeur, il faut définir la comparaison et la récupération.
- 10 états: count normal va de 0 à 9
- Stockage sur 4 bits: 16 codes, dont 10 à 15 inutilisés
- État suivant: Si en=1 et count≥9, revenir à 0
Les états hors plage font partie du contrat
Que doit faire un compteur modulo-10 qui atteint 12 ? Prouvez les conditions d'initialisation et de 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. En savoir plus qui excluent ce cas, ou définissez une récupération vers 0 à partir de toute valeur ≥9. Cela ne garantit pas une tolérance à toutes les pannes matérielles.
always_ff @(posedge clk) begin
if (rst) count <= 4'd0;
else if (en) begin
if (count >= 4'd9) count <= 4'd0;
else count <= count + 4'd1;
end
endCet exemple récupère aussi les codes invalides 10–15, mais sur un front où en=1. Avec enable=0, ils sont conservés. Une récupération immédiate exigerait une autre priorité des conditions.
Vérifier largeur et fonction séparément
Dix bits suffisent pour 0–999, mais une incrémentation libre va jusqu'à 1023. Il faut comparer l'état maximal prévu et sélectionner le retour à 0. Dans un compteur d'adresses, d'itérations ou de longueur de paquet, confondre les deux crée des accès ou des longueurs incorrects.
Essayez vous-même
Déterminez largeur minimale et nombre de codes inutilisés pour un compteur répétant 0–99. Que change une simple incrémentation de 1 sur cette largeur ?
Lire l’explication
Cent états demandent sept bits, avec codes inutilisés. Une simple incrémentation dépasse 99 et atteint 127 : elle réalise modulo-128, pas modulo-100.