Skip to main content
Logo
Macchine a Stati Finiti
Overview

Macchine a Stati Finiti

Valerio Di Tommaso Valerio Di Tommaso
18 February 2026
3 min read

Le Macchine a Stati Finiti (FSM <- Finite State Machine) sono il modello matematico utilizzato per descrivere sistemi dotati di memoria, capaci di eseguire algoritmi e utili alla progettazione ad alto livello di Reti Logiche Sequenziali.

Come abbiamo già detto nella definizione dei concetti chiave delle Reti Logiche Sequenziali ci sono due tipi di FSM: Sincrone e Asincrone.

La definizione formale di una FSM Sincrona:

Per descrivere matematicamente una FSM viene utilizzata una tupla di sei elementi.

M=S,X,Z,δ,λ,s0M = \langle S, X, Z, \delta, \lambda, s_0 \rangle

Analizziamo il contenuto di questa tupla in ordine di intuitività:

  • XX <--- L’Alfabeto di ingresso - è l’elenco di tutte le possibili combinazioni di bit per ogni ingresso. La sua dimensione varia in base al numero di ingressi, se ci sono nn ingressi, allora la dimensione di XX sarà di 2n2^n.
  • ZZ <--- L’Alfabeto di uscita - è l’elenco di tutte le possibili combinazioni di bit che le variabili di uscita possono avere. La sua dimensione varia in base al numero di uscite, se ci sono nn uscite, allora la dimensione di ZZ è 2n2^n.
  • SS <--- L’Insieme degli Stati - è l’elenco di tutte le possibili combinazioni di bit che uno stato può assumere. Uno stato è come se fosse una memoria, ma non una che salva dati, ma più come memoria che ci dice a che punto è il sistema, come un segnalibro.
  • s0s_0 <--- Stato Iniziale - è lo stato di default nonché anche il primo appena avviata la FSM.
  • Le funzioni δ\delta e λ\lambda - che lavorano in parallelo e che fanno calcoli molti simili a seconda della FSM specifica (Moore o Mealy):
    • δ\delta <--- Funzione di Stato Prossimo - è una funzione che contiene le condizioni logiche necessarie a determinare il prossimo stato (Stato Attuale + Input). Infatti se di base c’è un s0s_0 di default al fine di permettere la prima esecuzione della FSM, nelle seguenti esecuzioni si ha la necessità di ottenere gli stati delle future esecuzioni. Essendo nel campo di FSM sincrone, a determinare il passaggio sequenziale alla prossima esecuzione è il clock, che scatterà ogni tot tempo, contato con kk. Ebbene l’output della funzione δ\delta diventa sk+1s_{k+1} , quindi lo stato che descrive il passato della macchina alla prossima esecuzione.
    • λ\lambda <--- Funzione di Uscita - è una funzione che contiene le condizioni logiche necessarie a restituire l’output presente del sistema. Le condizioni sono generalmente legate allo Stato Attuale (+Input se è Mealy).

Grafi di Transizione di Stato:

Una FSM può essere rappresentata graficamente attraverso dei disegni chiamati Grafi di Transizione di Stato. In questi grafi:

  • I Nodi (cerchi) <--- Rappresentano gli stati.
  • Gli Archi (frecce) <--- Rappresentano la transizione da uno stato ad un altro in base all’input in ingresso del circuito in quell’istante di esecuzione della FSM. Queste transizioni rappresentano dunque la funzione δ\delta nel caso della FSM di Moore, e le funzioni δ\delta e λ\lambda nel caso della FSM di Mealy.

Esempio grafico di un Grafo di Transizione di Stato generico: esempio-grafo-transizione.svg


Macchina di Moore:

Esempio di Grafo con FSM di Moore: Schermata del 2025-12-31 19-13-36.png I nomi delle variabili sono imprecisi e discostati dalla parte descritta sotto.

Nella FSM di Moore, nel grafo possiamo osservare:

  • Nei Cerchi —> 2 valori: sk/zks_k/z_k
    • Gli Stati sks_k come variabili (non è necessario saperne il valore).
    • L’Output zkz_k del sistema (riportato come valore numerico).
  • Negli Archi —> Riportato l’Input xkx_k del sistema come condizione per passare allo stato prossimo (riportato come valore numerico).
Nella Macchina di Moore:

L’Output presente zkz_k dipende dallo stato attuale: zk=λ(sk)z_k = \lambda(s_k) Lo Stato Prossimo sk+1s_{k+1} dipende dallo stato attuale + input: sk+1=δ(sk,xk)s_{k+1} = \delta(s_k, x_k)

Qual’è la logica per leggere i Grafi nelle FSM di Moore:

  1. Osservare il Cerchio sk/zks_k/z_k.
  2. Calcolare l’Output zk=λ(sk)z_k = \lambda(s_k).
  3. Individuare l’Input xkx_k sopra l’Arco.
  4. Usare l’Arco come freccia per spostarsi sullo Stato Successivo e calcolare sk+1=δ(sk,xk)s_{k+1} = \delta(s_k, x_k).

Macchina di Mealy:

Esempio di Grafo con FSM di Mealy: Pasted image 20251231191419.png I nomi delle variabili sono imprecisi e discostati dalla parte descritta sotto.

Nelle FSM di Mealy, nel grafo possiamo vedere gli:

  • Nei Cerchi —> Gli Stati sks_k come variabili (non è necessario saperne il valore).
  • Negli Archi —> 2 valori: xk/zkx_k/z_k
    • Riportato l’Input xkx_k del sistema come condizione per passare allo stato prossimo. (riportato come valore numerico).
    • L’Output zkz_k del sistema (riportato come valore numerico).
Nella Macchina di Mealy:

L’Output presente zkz_k dipende dallo stato attuale+ input: zk=λ(sk,xk)z_k = \lambda(s_k, x_k) Lo Stato Prossimo sk+1s_{k+1} dipende dallo stato attuale + input: sk+1=δ(sk,xk)s_{k+1} = \delta(s_k, x_k) In questa FSM Output e Stato Prossimo chiedono gli stessi valori per essere calcolati.

Qual’è la logica per leggere i Grafi nelle FSM di Mealy:

  1. Osservare lo stato attuale nel Cerchio sks_k.
  2. Osservare l’Arco.
  3. Osservare la notazione dell’Output zkz_k successivo a quella dell’Input xkx_k, che ci dice di calcolare l’Output
  4. Calcolare l’Output zk=λ(sk,xk)z_k = \lambda(s_k, x_k).
  5. Poi usare l’Arco come freccia (ignorando la notazione dell’Output) per spostarsi sullo Stato Successivo e calcolare sk+1=δ(sk,xk)s_{k+1} = \delta(s_k, x_k).

Rappresentare le FSM con delle Tabelle:

Tra FSM di Moore e Mealy cambia di poco il modo con il quale vengono strutturate le tabelle.

Tabelle per FSM di Moore:

Ipotizziamo una FSM di Moore: Pasted image 20260101221109.png

Adesso creiamo la tabella composta da:

  • Le Colonne che indicano nelle prime 2 gli ingressi (00 o 11) e nell’ultima l’Output.
  • Le Righe che indicano lo stato in cui si trova il sistema.

Dunque nelle celle in cui si incrociano queste Righe e Colonne andiamo a inserire prima quali sono gli ingressi e l’output in un determinato stato.

La Tabella corrispondente alla FSM sopra:

0011OutputOutput
s0s_0s0s_0s1s_111
s1s_1s2s_2s1s_100
s2s_2s0s_0s0s_000

Tabelle per FSM di Mealy:

Ipotizziamo una FSM di Mealy: Pasted image 20260101224151.png

Adesso creiamo una tabella composta da:

  • Le Colonne che indicano gli ingressi (00 e 11).
  • Le Righe che indicano lo stato in cui si trova il sistema.

È possibile notare che la differenza con le FSM di Moore è l’assenza di una colonna per gli Output, ma questo è del tutto naturale essendo che anche nei Grafi le FSM di Mealy hanno l’Output rappresentato affianco all’input, quindi anche nelle tabelle, input e output vengono rappresentati insieme.

La Tabella corrispondente alla FSM sopra:

0011
s0s_0s0/1s_0/1s1/1s_1/1
s1s_1s2/0s_2/0s1/0s_1/0
s2s_2s0/0s_0/0s0/0s_0/0

Ricapitolando - Moore e Mealy a confronto:

MooreMealy
Come viene generato l’output?Dipende esclusivamente dallo statoDipende dallo stato e dagli input
Dove si scrive l’output?Nello statoSulla transizione
Quando reagisce?Dopo la transizioneQuando viene dato l’input
Numero di statiSpesso richiede più statiGeneralmente ne usa di meno rispetto alla macchina di Moore

Convertire da FSM di Moore a Mealy: