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.
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.
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.
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.
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.
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.
Contatore modulo N
Non tutti i contatori devono utilizzare tutti gli stati disponibili. Un contatore modulo N attraversa N stati prima di ripartire.
Per scegliere il numero minimo di flip-flop:
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.
| Uscita | Frequenza |
|---|---|
| Q0 | fCLK / 2 |
| Q1 | fCLK / 4 |
| Q2 | fCLK / 8 |
| Q3 | fCLK / 16 |
Contatore binario a 4 bit
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.
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.
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.
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.
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.
Shift left e shift right
Un registro può spostare i dati verso il bit più significativo oppure verso quello meno significativo.
| Operazione | Movimento |
|---|---|
| Shift left | I bit si spostano verso posizioni più significative. |
| Shift right | I bit si spostano verso posizioni meno significative. |
Tipi di registri a scorrimento
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.
Johnson counter
Nel Johnson counter viene riportata all’ingresso la versione invertita dell’uscita dell’ultimo stadio. È chiamato anche twisted ring counter.
Applicazioni pratiche
| Applicazione | Circuito tipico |
|---|---|
| Conteggio eventi | Contatore |
| Timer e prescaler | Contatore / divisore di frequenza |
| Orologi digitali | Contatori modulo 10 e modulo 6 |
| Espansione uscite | SIPO |
| Espansione ingressi | PISO |
| Conversione seriale-parallelo | SIPO |
| Conversione parallelo-seriale | PISO |
| Sequenze cicliche | Ring / Johnson counter |
Contatori e registri a confronto
| Caratteristica | Contatore | Registro a scorrimento |
|---|---|---|
| Memorizza stato | Sì | Sì |
| Funzione principale | Avanzare in una sequenza di stati. | Memorizzare e spostare dati. |
| Clock | Fa avanzare il conteggio. | Fa scorrere/caricare i bit. |
| Ingressi dati | Non sempre necessari. | Seriali e/o paralleli. |
| Usi tipici | Conteggio, 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.

