Circuiti combinatori e circuiti sequenziali
I circuiti digitali possono essere divisi in due grandi famiglie. Nei circuiti combinatori l’uscita dipende esclusivamente dagli ingressi presenti in quell’istante. Nei circuiti sequenziali, invece, il risultato dipende anche dallo stato precedente: entra quindi in gioco la memoria. Questa distinzione è alla base di sommatori, multiplexer, flip-flop, registri, contatori e processori.
La differenza fondamentale
Combinatorio
L’uscita dipende soltanto dagli ingressi attuali.
Sequenziale
L’uscita dipende dagli ingressi e dallo stato memorizzato.
Memoria
È ciò che permette al circuito di “ricordare” ciò che è accaduto prima.
Circuiti combinatori
Un circuito combinatorio calcola una funzione logica degli ingressi senza memorizzare informazioni sul passato. Se cambiano gli ingressi, dopo il ritardo di propagazione cambia anche l’uscita.
Una tabella della verità è sufficiente per descrivere completamente il comportamento di un circuito combinatorio.
Esempi di circuiti combinatori
| Circuito | Funzione |
|---|---|
| Half-adder | Somma due bit e produce somma e riporto. |
| Full-adder | Somma due bit più un riporto in ingresso. |
| Multiplexer | Seleziona uno tra più ingressi. |
| Demultiplexer | Instrada un ingresso verso una delle uscite. |
| Encoder | Codifica una linea attiva in un valore binario. |
| Decoder | Converte un codice binario nell’attivazione di una o più uscite. |
| Comparatore | Confronta due numeri binari. |
Esempio combinatorio: half-adder
L’half-adder somma due bit A e B. Produce due uscite: S per la somma e C per il riporto.
C = A · B
| A | B | S | C |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Multiplexer: scegliere un ingresso
Un multiplexer, abbreviato MUX, possiede più ingressi dati, uno o più ingressi di selezione e una sola uscita. Il valore degli ingressi di selezione decide quale ingresso dati viene collegato logicamente all’uscita.
Selezione: S
S = 0 → Y = D0
S = 1 → Y = D1
Decoder: dal codice alle uscite
Un decoder interpreta un valore binario e attiva l’uscita corrispondente. Per esempio, un decoder 2→4 utilizza due ingressi e può selezionare una tra quattro uscite.
| A1 | A0 | Uscita attiva |
|---|---|---|
| 0 | 0 | Y0 |
| 0 | 1 | Y1 |
| 1 | 0 | Y2 |
| 1 | 1 | Y3 |
Circuiti sequenziali
Un circuito sequenziale introduce una caratteristica che manca ai combinatori: lo stato. Il comportamento presente può quindi dipendere da ciò che è accaduto in precedenza.
Che cos’è lo stato?
Lo stato è l’informazione memorizzata dal circuito in un determinato istante. Può essere costituito da un solo bit oppure da molti bit.
0000, 0001, 0010 … 1111.
Lo stato successivo dipende normalmente dallo stato corrente e dagli ingressi.
Il clock nei circuiti sequenziali
Molti circuiti sequenziali utilizzano un segnale periodico chiamato clock. Il clock stabilisce gli istanti nei quali il circuito può aggiornare il proprio stato.
Latch: la memoria più semplice
Un latch è un elemento bistabile capace di memorizzare un bit. Può essere sensibile a un livello di controllo e mantenere lo stato quando l’ingresso di abilitazione non permette aggiornamenti.
Flip-flop: memoria sincronizzata al fronte
Il flip-flop aggiorna normalmente il proprio stato in corrispondenza di un fronte del clock, per esempio il fronte di salita.
Qnext = D
Registri
Un registro è un insieme di flip-flop utilizzato per memorizzare più bit contemporaneamente. Un registro a 8 bit può conservare un byte.
I registri possono essere paralleli, a scorrimento o dotati di funzioni di caricamento, reset e enable.
Contatori
Un contatore è un circuito sequenziale che attraversa una sequenza ordinata di stati. Può incrementare, decrementare oppure seguire sequenze personalizzate.
Circuito combinatorio e sequenziale a confronto
Clock, stato e memoria in un circuito sequenziale
Circuiti sequenziali sincroni e asincroni
| Sincroni | Asincroni |
|---|---|
| Lo stato viene aggiornato in relazione a un clock. | Lo stato può cambiare direttamente in risposta agli ingressi. |
| Più semplici da coordinare nei sistemi complessi. | Possono reagire senza attendere un fronte di clock. |
| Molto diffusi in CPU, FPGA e microcontrollori. | Richiedono maggiore attenzione a ritardi e hazard. |
Combinatori e sequenziali: tabella comparativa
| Caratteristica | Combinatorio | Sequenziale |
|---|---|---|
| Dipende dagli ingressi attuali | Sì | Sì |
| Dipende dallo stato precedente | No | Sì |
| Memoria | No | Sì |
| Clock necessario | No | Spesso sì |
| Descrizione tipica | Tabella della verità | Tabella/stato e diagramma degli stati |
| Esempi | MUX, decoder, sommatore | Flip-flop, registro, contatore |
Esempio pratico: serratura digitale
Immaginiamo una serratura che debba riconoscere una sequenza di pulsanti. Un semplice circuito combinatorio può verificare i pulsanti premuti in questo istante, ma non può sapere quale pulsante è stato premuto prima.
Un sistema del genere può essere modellato come una macchina a stati, argomento che incontreremo più avanti.
Errori comuni
- pensare che un circuito sequenziale sia semplicemente un combinatorio più grande;
- confondere stato e uscita;
- pensare che tutti i circuiti sequenziali richiedano necessariamente un clock;
- confondere latch e flip-flop;
- ignorare il ritardo di propagazione nei circuiti combinatori;
- pensare che un registro elabori necessariamente i dati: può limitarsi a memorizzarli;
- confondere multiplexer e registro;
- credere che un contatore possa funzionare senza conservare lo stato corrente;
- non distinguere ingressi di dati da segnali di controllo;
- ignorare setup time, hold time e sincronizzazione nei sistemi reali.

