💾 Elettronica digitale · Guida 07

Contatori e registri a scorrimento

Contatori e registri a scorrimento sono circuiti sequenziali costruiti con flip-flop. I contatori attraversano una sequenza di stati a ogni impulso di clock, mentre i registri memorizzano e spostano bit da una posizione all’altra. Questi circuiti sono usati in timer, divisori di frequenza, interfacce seriali, espansione di I/O, memorie temporanee e sistemi di controllo digitale.

Livello: intermedio Contatori Shift register Clock e stato

Cos’è un contatore digitale?

Un contatore è un circuito sequenziale che modifica il proprio stato a ogni evento di clock. La sequenza degli stati può rappresentare un conteggio crescente, decrescente oppure una sequenza progettata appositamente.

Stato successivo = funzione dello stato corrente
Il contatore deve ricordare il valore precedente. Per questo è un circuito sequenziale e non combinatorio.

Contatore binario

Un contatore binario a N bit può rappresentare fino a 2N stati differenti. Un contatore a 4 bit, per esempio, attraversa 16 stati.

Sequenza a 4 bit 0000 → 0001 → 0010 → 0011 → 0100 → … → 1111 → 0000
Numero massimo di stati = 2N

Contatore asincrono o ripple counter

Nel contatore asincrono soltanto il primo flip-flop riceve direttamente il clock esterno. Ogni stadio successivo viene comandato dall’uscita dello stadio precedente.

Il cambiamento “propaga” da uno stadio all’altro. Da qui il nome ripple counter.
Il limite principale è il ritardo cumulativo. Le uscite non cambiano tutte nello stesso istante e per brevi intervalli possono comparire stati intermedi indesiderati.

Contatore sincrono

Nel contatore sincrono tutti i flip-flop ricevono lo stesso segnale di clock. La logica combinatoria determina quali flip-flop devono cambiare stato al fronte successivo.

Tutti gli stadi sono sincronizzati dallo stesso clock. Questo riduce il problema della propagazione a cascata tipica del ripple counter.
Per frequenze elevate i contatori sincroni sono generalmente preferibili. Il progetto è però un po’ più complesso perché serve logica aggiuntiva.

Contatori UP, DOWN e UP/DOWN

UP

Incrementa il valore a ogni impulso di clock.

DOWN

Decrementa il valore a ogni impulso.

UP/DOWN

Un ingresso di controllo decide la direzione del conteggio.

Esempio DOWN a 3 bit 111 → 110 → 101 → 100 → 011 → 010 → 001 → 000 → 111

Contatore modulo N

Non tutti i contatori devono utilizzare tutti gli stati disponibili. Un contatore modulo N attraversa N stati prima di ripartire.

MOD-N → N stati distinti
Contatore decade / MOD-10 0 → 1 → 2 → … → 9 → 0

Per scegliere il numero minimo di flip-flop:

2Nbit ≥ MOD
MOD-10 3 bit forniscono solo 8 stati, quindi non bastano.
4 bit forniscono 16 stati, quindi sono sufficienti.

Contatore come divisore di frequenza

Un flip-flop che commuta a ogni fronte divide la frequenza per 2. Collegando più stadi si ottengono divisioni per potenze di due.

UscitaFrequenza
Q0fCLK / 2
Q1fCLK / 4
Q2fCLK / 8
Q3fCLK / 16
Un contatore binario può quindi funzionare anche come divisore di frequenza multistadio.

Contatore binario a 4 bit

Contatore binario a 4 bit con flip-flop, sequenza MOD-16 e diagrammi temporali
Contatore binario a 4 bit: sequenza da 0000 a 1111, uscite Q0-Q3, divisione di frequenza e temporizzazione con clock.

Cos’è un registro a scorrimento?

Un registro a scorrimento, o shift register, è un insieme di flip-flop collegati in modo da memorizzare una parola binaria e spostarne i bit a ogni impulso di clock.

Ogni fronte di clock → i bit si spostano di una posizione
Esempio a 4 bit Stato iniziale: 1011
Shift a destra con ingresso seriale 0:

1011 → 0101 → 0010 → 0001 → 0000

SISO – Serial In, Serial Out

Nel registro SISO i dati entrano un bit alla volta e vengono letti un bit alla volta. Ogni impulso di clock sposta il dato di uno stadio.

È una linea di ritardo digitale. Un bit impiega un certo numero di clock per attraversare tutto il registro.

SIPO – Serial In, Parallel Out

Nel SIPO i bit arrivano serialmente, ma tutte le uscite dei flip-flop sono accessibili in parallelo. Dopo aver ricevuto l’intera parola, possiamo leggerla contemporaneamente.

Applicazione tipica Espansione delle uscite di un microcontrollore: pochi pin seriali controllano molti segnali paralleli.

PISO – Parallel In, Serial Out

Il PISO svolge l’operazione opposta: carica più bit contemporaneamente e poi li trasmette uno alla volta su una linea seriale.

Applicazione tipica Leggere molti ingressi digitali utilizzando pochi pin del microcontrollore.

PIPO – Parallel In, Parallel Out

Nel PIPO i dati vengono caricati e letti in parallelo. In questo caso il circuito si comporta soprattutto come un registro di memorizzazione sincrono.

N flip-flop D → registro parallelo da N bit

Shift left e shift right

Un registro può spostare i dati verso il bit più significativo oppure verso quello meno significativo.

OperazioneMovimento
Shift leftI bit si spostano verso posizioni più significative.
Shift rightI bit si spostano verso posizioni meno significative.
Nei numeri unsigned, uno shift di una posizione può ricordare una moltiplicazione o divisione per 2. Ma il comportamento esatto dipende dai bit che entrano, da quelli persi e dal tipo di dato.

Tipi di registri a scorrimento

Tipi di registri a scorrimento SISO SIPO PISO e PIPO
Confronto tra registri SISO, SIPO, PISO e PIPO con direzione dei dati, ingressi e uscite seriali o parallele.

Ring counter

Un ring counter è un registro a scorrimento nel quale l’uscita dell’ultimo stadio viene riportata all’ingresso del primo. Un singolo bit a 1 può quindi circolare continuamente.

Ring counter a 4 bit 1000 → 0100 → 0010 → 0001 → 1000
Con un singolo bit attivo, un ring counter a N flip-flop possiede N stati utili.

Johnson counter

Nel Johnson counter viene riportata all’ingresso la versione invertita dell’uscita dell’ultimo stadio. È chiamato anche twisted ring counter.

Esempio a 4 bit 0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 → 0000
N flip-flop → fino a 2N stati nel Johnson counter

Applicazioni pratiche

ApplicazioneCircuito tipico
Conteggio eventiContatore
Timer e prescalerContatore / divisore di frequenza
Orologi digitaliContatori modulo 10 e modulo 6
Espansione usciteSIPO
Espansione ingressiPISO
Conversione seriale-paralleloSIPO
Conversione parallelo-serialePISO
Sequenze ciclicheRing / Johnson counter
Un esempio famosissimo è il 74HC595. È un registro serial-in/parallel-out molto usato per aumentare il numero di uscite controllabili da un microcontrollore.

Contatori e registri a confronto

CaratteristicaContatoreRegistro a scorrimento
Memorizza stato
Funzione principaleAvanzare in una sequenza di stati.Memorizzare e spostare dati.
ClockFa avanzare il conteggio.Fa scorrere/caricare i bit.
Ingressi datiNon sempre necessari.Seriali e/o paralleli.
Usi tipiciConteggio, temporizzazione, divisione.Conversione seriale/parallelo, espansione I/O.

Errori comuni

  • confondere un contatore con un registro a scorrimento;
  • pensare che un ripple counter aggiorni tutte le uscite esattamente nello stesso istante;
  • dimenticare che un contatore MOD-N può non usare tutti gli stati binari disponibili;
  • confondere SIPO con PISO;
  • pensare che PIPO sia necessariamente uno shift register in senso stretto;
  • ignorare il verso dello shift;
  • confondere ring counter e Johnson counter;
  • dimenticare che gli shift possono perdere bit alle estremità;
  • usare le uscite intermedie di un contatore asincrono senza considerare i ritardi;
  • ignorare reset, enable, load e altri segnali di controllo presenti nei circuiti reali.