Vai al contenuto
Elettronica dei Sistemi Digitali

Reti sequenziali: registri, contatori e macchine a stati finiti

Registri e registri a scorrimento, LFSR, contatori sincroni e asincroni, macchine di Moore e di Mealy, progetto completo di un riconoscitore di sequenza, codifiche e reset.

Con i flip-flop si costruiscono le reti sequenziali: circuiti la cui uscita dipende non solo dagli ingressi attuali ma dalla storia passata, riassunta in uno stato. Registri, contatori, controllori di protocolli, l’unità di controllo di un processore sono tutti reti sequenziali sincrone. In questa lezione vediamo registri e contatori e il metodo generale per progettare una macchina a stati finiti, con un esempio completo.

Registri e registri a scorrimento

Un registro di n bit è fatto di n flip-flop D con lo stesso clock: a ogni fronte memorizza una parola. Collegando l’uscita di ogni flip-flop all’ingresso del successivo si ottiene un registro a scorrimento: a ogni fronte i bit avanzano di una posizione. Serve a convertire dati da paralleli a seriali e viceversa (è il cuore di UART, SPI e di tutte le trasmissioni seriali), a ritardare un segnale di un numero preciso di cicli, a generare sequenze pseudo-casuali (con una retroazione tramite porte XOR, il LFSR, usato per i codici del GPS e per il collaudo dei chip).

I contatori

Un contatore binario sincrono a n bit è un registro il cui ingresso è il valore attuale più 1: conta da 0 a 2^n - 1 e ricomincia. Il bit meno significativo cambia a ogni fronte, il successivo ogni due, e così via: ogni bit divide la frequenza per due. Un contatore modulo N si azzera quando raggiunge N - 1: per contare i secondi di un orologio servono 6 bit (2^6 = 64 \ge 60).

I contatori asincroni (a propagazione), in cui ogni flip-flop riceve come clock l’uscita del precedente, usano meno logica ma i bit non cambiano insieme: per un istante il contatore attraversa valori sbagliati. Nei progetti moderni si usano quasi sempre contatori sincroni.

Le macchine a stati finiti

Una macchina a stati finiti (FSM) è descritta da:

  • un insieme finito di stati, memorizzati in un registro;
  • una funzione di stato futuro, che dallo stato attuale e dagli ingressi calcola lo stato successivo (logica combinatoria);
  • una funzione di uscita.

Nella macchina di Moore l’uscita dipende solo dallo stato; in quella di Mealy dipende anche dagli ingressi. Le Moore sono più semplici da verificare e hanno uscite stabili per tutto il ciclo; le Mealy reagiscono un ciclo prima e spesso richiedono meno stati.

Un esempio completo: riconoscere la sequenza 101

Si vuole un circuito con un ingresso seriale x, un bit per ciclo di clock, e un’uscita z che vale 1 quando gli ultimi tre bit ricevuti sono 1, 0, 1 (anche sovrapposti: in 10101 la sequenza compare due volte).

1. Il diagramma degli stati. Ogni stato ricorda quanta parte della sequenza è già arrivata:

  • S_0: niente di utile;
  • S_1: l’ultimo bit era 1;
  • S_2: gli ultimi due erano 1, 0;
  • S_3: gli ultimi tre erano 1, 0, 1, l’uscita vale 1 (macchina di Moore).
Diagramma degli stati di un riconoscitore della sequenza 101
Quattro stati, S0 iniziale e S3 con uscita 1. Dagli stati partono frecce etichettate con il bit d’ingresso che provoca la transizione: da S0 con 1 si va in S1, da S1 con 0 in S2, da S2 con 1 in S3; da S3 con 0 si torna in S2 e con 1 in S1, per riconoscere anche le sequenze sovrapposte; da S2 con 0 si torna in S0.

Le transizioni si ricavano chiedendosi, per ogni stato e ogni ingresso, qual è il prefisso più lungo della sequenza che coincide con la fine di ciò che è stato ricevuto. Per esempio in S_3 (ultimi bit 101) un 0 dà …1010, che termina con 10: si va in S_2, non in S_0.

2. La tabella degli stati.

Statox = 0x = 1z
S_0S_0S_10
S_1S_2S_10
S_2S_0S_30
S_3S_2S_11

3. La codifica. Quattro stati richiedono 2 flip-flop. Con la codifica binaria S_0 = 00, S_1 = 01, S_2 = 10, S_3 = 11 (bit q_1q_0), dalla tabella si ricavano le funzioni dello stato futuro e si semplificano con le mappe di Karnaugh:

    \[ q_0^+ = x,\qquad q_1^+ = \overline{x}\,q_0 + x\,q_1\,\overline{q_0},\qquad z = q_1q_0 \]

Si verifica riga per riga: per esempio da S_2 (q_1q_0 = 10) con x = 1: q_0^+ = 1, q_1^+ = 0 + 1\cdot 1\cdot 1 = 1, cioè 11 = S_3, corretto. (Qui q_0^+ = x ha un significato semplice: q_0 ricorda l’ultimo bit ricevuto.)

4. Il circuito. Due flip-flop D, le porte che realizzano q_1^+ e q_0^+, una porta AND per l’uscita.

Altre codifiche sono possibili: la one-hot usa un flip-flop per stato (4 qui), con logica più semplice e veloce; è la scelta abituale nelle FPGA, dove i flip-flop abbondano. Gli strumenti di sintesi scelgono la codifica da soli, a partire dalla descrizione in un linguaggio di descrizione dell’hardware.

Il reset

Ogni macchina a stati deve partire da uno stato noto: all’accensione il contenuto dei flip-flop è casuale. Un segnale di reset porta il registro di stato nello stato iniziale. Se il reset è asincrono, il suo rilascio va comunque sincronizzato con il clock (con lo stesso sincronizzatore visto per la metastabilità), altrimenti flip-flop diversi potrebbero uscire dal reset in cicli diversi e la macchina partirebbe da uno stato non previsto.

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x