Altifigence Academy

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.

Un compteur est aussi une machine à états

Un compteur répétant 0 à 9 nécessite dix états, donc au moins ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 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.

N=⌈log⁡2M⌉,unused codes=2N−MN=\left\lceil\log_2 M\right\rceil,\qquad \text{unused codes}=2^N-M

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.

Largeur de stockage et condition de retour sont distinctes
  1. 10 états: count normal va de 0 à 9
  2. Stockage sur 4 bits: 16 codes, dont 10 à 15 inutilisés
  3. É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.

SystemVerilog
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
end

Cet 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 128−100=28128-100=28 codes inutilisés. Une simple incrémentation dépasse 99 et atteint 127 : elle réalise modulo-128, pas modulo-100.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.