bitGateLab Digital · Impara
Italiano
Apri il simulatore

Impara › Argomento 10

Contatori e registri a scorrimento: progetto passo dopo passo

7 min di lettura · Team bitGateLab

Un contatore è un gruppo di flip-flop che percorre una sequenza fissa di stati a ogni impulso di clock; un registro è un gruppo di flip-flop che memorizza o fa scorrere una parola binaria. Con essi si misurano tempi, si dividono frequenze, si convertono dati da seriale a parallelo e si generano sequenze di controllo. Devi avere ben chiari i flip-flop D, JK e T e le loro tabelle di eccitazione, spiegati in latch e flip-flop.

Contatore asincrono (ripple)

Il modo più semplice di contare è concatenare flip-flop T con T = 1, in modo che ciascuno commuti e divida la frequenza per 2. Solo il primo riceve il clock di sistema; ciascuno dei successivi prende come clock l'uscita del precedente. Con flip-flop attivati sul fronte di discesa si collega la Q di uno stadio al clock del successivo e il contatore conta in avanti; con il fronte di salita bisogna usare Q per contare in avanti (con Q conterebbe all'indietro).

Il suo difetto è il ritardo accumulato: lo stadio n non cambia finché non sono cambiati tutti i precedenti, come un'onda che percorre la catena. In quell'intervallo l'uscita passa per valori falsi.

Esempio: contatore asincrono a 4 bit con tCQ = 12 ns per flip-flop. Passa da 0111 a 1000.

  1. Q0 passa da 1 a 0 dopo 12 ns: l'uscita si legge 0110.
  2. Q1 cambia dopo 24 ns: 0100.
  3. Q2 cambia dopo 36 ns: 0000.
  4. Q3 cambia dopo 48 ns: 1000, il valore corretto.

Per 48 ns l'uscita ha mostrato 0110, 0100 e 0000. Se un circuito decodifica questi valori, vedrà impulsi falsi. Per leggere sempre un valore stabile il periodo del clock deve superare 48 ns, cioè f < 20.8 MHz.

Contatore sincrono

Nel contatore sincrono tutti i flip-flop ricevono lo stesso clock, ed è la logica a decidere chi commuta. In un contatore binario in avanti un bit commuta quando tutti i bit meno significativi valgono 1:

T0 = 1, T1 = Q0, T2 = Q0·Q1, T3 = Q0·Q1·Q2

Tutte le uscite cambiano insieme, tCQ dopo il fronte. Il periodo minimo non dipende più dal numero di bit attraverso la catena di flip-flop, ma da tCQ + ritardo della AND + tsu.

Contatore modulo N

Un contatore modulo N percorre N stati e ricomincia da capo. Richiede almeno ⌈log2 N⌉ flip-flop. Ci sono due modi di realizzarlo.

Con reset asincrono: si prende un contatore binario e si rileva il primo stato che non deve comparire. Per il modulo 10 questo stato è 1010; basta una NAND di Q3 e Q1 collegata al clear attivo basso, perché è la prima volta che Q3 e Q1 valgono 1 contemporaneamente. Funziona, ma lo stato 1010 compare per alcuni nanosecondi e genera un impulso breve sulle uscite.

Progetto sincrono: si scrive la tabella degli stati e si calcolano gli ingressi con la tabella di eccitazione. Non ci sono stati transitori.

Esempio: contatore sincrono modulo 6 (da 0 a 5) con flip-flop T. Stati Q2 Q1 Q0; gli stati 110 e 111 non si usano e valgono X.

Q2 Q1 Q0SuccessivoT2T1T0
000001001
001010011
010011001
011100111
100101001
101000101

Ogni T vale 1 quando il bit cambia. Semplificando con le X:

  • T0 = 1.
  • T1 = Q2·Q0 (copre 001 e 011; in 101 vale 0 perché Q2 = 1).
  • T2 = Q1·Q0 + Q2·Q0 = Q0·(Q1 + Q2).

Controlla gli stati non usati: da 110, T2 = 0, T1 = 0, T0 = 1, il contatore va in 111; da 111, T2 = 1, T1 = 0, T0 = 1, va in 010. Entrambi rientrano nella sequenza: il contatore si avvia da solo anche se all'accensione si trova in uno stato non valido.

Registri a scorrimento

Un registro a scorrimento è una catena di flip-flop D: l'uscita di ciascuno pilota l'ingresso del successivo e, a ogni fronte, tutti i bit avanzano di una posizione. In base a come entrano ed escono i dati si classificano così:

Esempio: registro SIPO a 4 bit, inizialmente a 0000, con Q0 ← ingresso, Q1 ← Q0, Q2 ← Q1, Q3 ← Q2. Si inviano i bit 1, 0, 1, 1 in quest'ordine.

FronteBit in ingressoQ0 Q1 Q2 Q3
111 0 0 0
200 1 0 0
311 0 1 0
411 1 0 1

Dopo 4 fronti, letto come Q3 Q2 Q1 Q0, il registro contiene 1011: il primo bit inviato è finito in Q3.

Contatore ad anello e contatore Johnson

Se l'uscita dell'ultimo flip-flop di un registro a scorrimento viene collegata all'ingresso del primo, si ottiene un contatore ad anello. Lo si inizializza con un solo 1 (per esempio 1000) e quell'1 circola: 1000, 0100, 0010, 0001, 1000. Con n flip-flop ha n stati e ogni stato è già decodificato, perché una sola uscita è a 1. Bisogna garantire il caricamento iniziale; se parte da 0000 vi resta per sempre.

Se invece di Q si riporta in ingresso la Q dell'ultimo flip-flop, si ottiene il contatore Johnson (o ad anello incrociato), con 2n stati. Per 4 bit (Q0 Q1 Q2 Q3, con Q0 ← Q3):

0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 → 0000

Ogni stato si distingue con una AND a due soli ingressi, guardando dove si trova il confine tra uni e zeri: per esempio 1100 è l'unico con Q1 = 1 e Q2 = 0, e 0000 è l'unico con Q0 = 0 e Q3 = 0.

Con 4 flip-flop: un contatore binario usa tutti i 16 stati, un Johnson ne usa 8 e un anello ne usa 4. Gli stati inutilizzati del Johnson (8) e dell'anello (12) vanno corretti con logica aggiuntiva se il circuito può avviarsi in uno di essi.

Errori comuni

Provalo nel simulatore

Confrontare nel cronogramma un contatore asincrono con uno sincrono è il modo migliore per vedere l'effetto ripple.

  1. Inserisci quattro flip-flop T con T = 1, collega il clock al primo e concatena gli altri come contatore asincrono.
  2. Collega le quattro uscite a degli indicatori e a un display o a una barra di LED.
  3. Costruisci accanto il contatore sincrono con T1 = Q0, T2 = Q0·Q1 e T3 = Q0·Q1·Q2, tutti con lo stesso clock.
  4. Apri il cronogramma, lascia scorrere il clock e osserva la transizione da 0111 a 1000 in entrambi.
  5. Costruisci un registro di quattro flip-flop D in catena, cambia l'ingresso seriale prima di ogni fronte e osserva come avanzano i bit; poi riporta la Q dell'ultimo stadio sul primo e verifica gli 8 stati del Johnson.

Esercizi

  1. Quanti flip-flop ti servono per un contatore modulo 12 binario, ad anello e Johnson?
    Risposta

    Binario: 4 (24 = 16 ≥ 12). Anello: 12. Johnson: 6 (2 × 6 = 12).

  2. Quale porta e quali uscite useresti per realizzare un contatore modulo 12 con reset asincrono attivo basso a partire da un contatore binario a 4 bit?
    Risposta

    12 = 1100. Una NAND di Q3 e Q2 collegata al clear, perché è la prima volta che entrambi valgono 1.

  3. Un contatore asincrono a 8 bit usa flip-flop con tCQ = 10 ns. Qual è il tempo di assestamento nel caso peggiore?
    Risposta

    8 × 10 = 80 ns, per esempio nel passaggio da 01111111 a 10000000.

  4. Quale AND a due ingressi decodifica lo stato 0111 del contatore Johnson a 4 bit?
    Risposta

    Q0·Q1: è l'unico stato con Q0 = 0 e Q1 = 1.