Altifigence Academy

29 / 63 · Concetto

Numero di stati, larghezza del contatore e codici inutilizzati

Ricavare la larghezza dal campo di conteggio e definire il recupero degli stati invalidi.

Anche un contatore è una macchina a stati

Un contatore ciclico da 0 a 9 richiede dieci stati e almeno ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bit. Un registroRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci a quattro bit offre però 16 configurazioni: la larghezza corretta non realizza da sola il modulo 10.

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

M è il numero di stati, non il massimo. Contare da 0 a M−1 differisce da 0 a M. Se si supporta M=1, imponete almeno un bit e mantenete sempre 0.

Quattro bit offrono 16 codici, ma il modulo 10 usa solo dieci stati normali. Alla scelta della larghezza vanno aggiunti confronto e politica di recupero.

Progettare separatamente larghezza e condizione di ritorno a zero
  1. 10 stati: count regolare: da 0 a 9
  2. Memoria a 4 bit: 16 codici, da 10 a 15 inutilizzati
  3. Stato successivo: 0 se en=1 e count≥9

Anche gli stati fuori campo fanno parte del progetto

Se per qualche motivo il contatore modulo 10 a quattro bit diventa 12, cosa accade dopo? Si possono dimostrare condizioni di inizializzazione e resetReset Controllo che riporta allo stato iniziale specificato. Occorre definirne sincronicità e priorità rispetto agli altri controlli. Approfondisci che lo escludano, oppure prevedere il ritorno a 0 da valori almeno 9. Il recupero non garantisce tolleranza a qualsiasi guasto hardware.

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

L'esempio recupera anche i valori 10–15 al fronte con en=1. Con enable=0 mantiene anche quelli; se serve recupero immediato bisogna cambiare la priorità delle condizioni.

Larghezza e funzione si verificano separatamente

Dieci bit bastano per 0–999, ma l'incremento libero arriva a 1023. Servono confronto e selezione per tornare a 0 al massimo specificato. Nei contatori d'indirizzo, iterazioni e lunghezza dei pacchetti questa differenza produce direttamente accessi o lunghezze errati.

Prova tu

Qual è la larghezza minima di un contatore 0–99, quanti codici restano inutilizzati e cosa cambia usando solo +1?

Leggi la spiegazione

Cento stati richiedono sette bit; restano 128−100=28128-100=28 codici. Il semplice incremento supera 99 e arriva a 127: realizza modulo 128, non modulo 100.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.