💾 Elettronica digitale · Guida 05

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.

Livello: base/intermedio Combinatori Sequenziali Memoria e clock

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.

Combinatorio: Y = f(Ingressi)
Sequenziale: Y = f(Ingressi, Stato)

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.

Nessuna memoria interna. La stessa combinazione degli ingressi produce sempre la stessa uscita.

Una tabella della verità è sufficiente per descrivere completamente il comportamento di un circuito combinatorio.

Esempi di circuiti combinatori

CircuitoFunzione
Half-adderSomma due bit e produce somma e riporto.
Full-adderSomma due bit più un riporto in ingresso.
MultiplexerSeleziona uno tra più ingressi.
DemultiplexerInstrada un ingresso verso una delle uscite.
EncoderCodifica una linea attiva in un valore binario.
DecoderConverte un codice binario nell’attivazione di una o più uscite.
ComparatoreConfronta 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.

S = A ⊕ B
C = A · B
ABSC
0000
0110
1010
1101
XOR produce la somma, AND produce il riporto. È uno degli esempi più semplici di come più porte logiche costruiscano una funzione utile.

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.

MUX 2:1 Ingressi dati: D0 e D1
Selezione: S

S = 0 → Y = D0
S = 1 → Y = D1
Y = ¬S·D0 + S·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.

A1A0Uscita attiva
00Y0
01Y1
10Y2
11Y3

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.

Il circuito possiede memoria. La stessa combinazione degli ingressi può produrre risultati diversi se lo stato interno è differente.

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.

Esempio Un contatore a 4 bit possiede 16 stati possibili:

0000, 0001, 0010 … 1111.

Lo stato successivo dipende normalmente dallo stato corrente e dagli ingressi.

Statosuccessivo = f(Statoattuale, 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.

Il clock sincronizza le operazioni. In un sistema digitale complesso permette a molti blocchi di avanzare in modo coordinato.
Il clock non è semplicemente “un segnale che va veloce”. Contano fronte attivo, periodo, frequenza, duty cycle e requisiti temporali del circuito.

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.

Il latch è level-sensitive. Durante il livello attivo del segnale di controllo può risultare “trasparente” agli ingressi.

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.

Flip-flop D Al fronte attivo del clock:

Qnext = D
Il flip-flop D è uno dei mattoni principali dei sistemi sincroni. Più flip-flop affiancati possono memorizzare parole binarie complete.

Registri

Un registro è un insieme di flip-flop utilizzato per memorizzare più bit contemporaneamente. Un registro a 8 bit può conservare un byte.

8 flip-flop → registro da 8 bit → 1 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.

Contatore binario a 3 bit 000 → 001 → 010 → 011 → 100 → 101 → 110 → 111 → 000
Un contatore non può essere descritto soltanto dagli ingressi presenti. Per sapere quale sarà l’uscita successiva bisogna conoscere anche lo stato attuale.

Circuito combinatorio e sequenziale a confronto

Circuito combinatorio e circuito sequenziale a confronto
Confronto tra circuito combinatorio, privo di memoria, e circuito sequenziale, nel quale uscita e comportamento dipendono anche dallo stato precedente.

Clock, stato e memoria in un circuito sequenziale

Clock stato e memoria in un circuito sequenziale
Struttura concettuale di un circuito sequenziale: logica combinatoria, memoria dello stato, retroazione e aggiornamento sincronizzato dal clock.

Circuiti sequenziali sincroni e asincroni

SincroniAsincroni
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.
La maggior parte dei sistemi digitali complessi è prevalentemente sincrona. Tuttavia possono essere presenti segnali asincroni che richiedono tecniche specifiche di sincronizzazione.

Combinatori e sequenziali: tabella comparativa

CaratteristicaCombinatorioSequenziale
Dipende dagli ingressi attuali
Dipende dallo stato precedenteNo
MemoriaNo
Clock necessarioNoSpesso sì
Descrizione tipicaTabella della veritàTabella/stato e diagramma degli stati
EsempiMUX, decoder, sommatoreFlip-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.

Per riconoscere una sequenza serve memoria. Il circuito deve ricordare a quale punto della sequenza si trova: diventa quindi un circuito sequenziale.

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.