Descriviamo l'automa a stati finiti che realizza la funzionalita' descritta nell'esercizio.
Insieme degli stati di ingresso: {a,b}
Insieme degli stati di uscita: {0,1}

Dall'analisi del problema si vede che gli stati interni in cui puo' trovarsi l'automa sono i seguenti:
- l'ultimo input e' stato una a (o non ho ancora ricevuto nulla)
- ho appena ricevuto un numero pari di b consecutive
- ho appena ricevuto un numero dispari di b consecutive
Possiamo rappresentare questi stati interni, rispettivamente, con i simboli A, BP, BD. Quindi
Insieme degli stati interni: {A, BP, BD}.

Il diagramma degli stati sara' il seguente:


Possiamo ora costruire la tabella di flusso (che poi non e' altro che una diversa rappresentazione del diagramma):


Ora codifichiamo con stringhe binarie gli stati di ingresso e gli stati interni (la codifica di quelli di uscita e' ovvia). (Da ricordare, anche se non lo facciamo, come in realta' tali codifiche andrebbero fatte scegliendo quelle codifiche che permettano di arrivare a circuiti combinetori i piu' semplici possibili).

a = 0
b = 1

A = 00
BD = 01
BP = 10

A questo punto , indicando con x i segnali che codificano gli stati di ingresso, con y1 e y2 quelli che codificano gli stati interni e con z il segnale che codifica la configurazione di uscita, otteniamo, a partire dalla tabella di flusso, la tabella delle transizioni.


Dalla tabella delle transizioni possiamo facilmente ottenere le mappe di Carnaugh per le 3 funzioni booleane z, y'1 e y'2 (y'1 e y'2 rappresentano lo stato interno "successivo"). Notare come, avendo due bit per la codifica dello stato interno e solo tre stati interni, alcune caselle delle mappe di Carnaugh risultino indeterminate.


Adesso possiamo sintetizzare i circuiti combinatori per z, y'1 e y'2, notando che le funzioni z e y'1 sono identiche. Visto che e' indifferente considerare le X come 0 o come 1, le consideriamo come 1, poiche', visto che vogliamo ottenere forme SP minimali, questo permette di ottenere implicanti primi "piu' grandi".
E' importante notare come la particolare codifica che abbiamo dato degli stati interni ci ha permesso di


A questo punto, le espressioni SP minimali sono le seguenti, tenendo conto che per ottenerle non bisogna prendere in considerazione implicanti primi che coprano solo valori indeterminati o che sono rilevanti solo per valori indeterminati (per esempio, l'implicante y1x ha il suo vero 1 coperto da un implicante essenziale, not(y2)x, e quindi possiamo non considerarlo, visto che l'altro valore che copre e' indeterminato).

z = y'1 = y2x

y'2 = not(y2)x


E' interessante notare come y1 non compaia tra i segnali della rete sequenziale. Questo si spiega con il fatto che il nostro automa a stati finiti che abbiamo sviluppato all'inizio possiede degli stati ridondanti. La presenza di stati ridondanti in un automa a stati finiti si puo' determinare con un semplice algoritmo, che pero' non abbiamo studiato a lezione e la cui applicazione ci avrebbe permesso di partire da un automa piu' semplice e quindi arrivare piu' semplicemente al al nostro risultato che, in questo caso particolare, fortuitamente, e' lo stesso che si sarebbe ottenuto utilizzando l'algoritmo di minimizzazione di automi.
Notare come, utilizzando il nostro automa, ma codificando diversamente gli stati interni, potevamo arrivare ad una soluzione piu' complessa.
Se infatti codificavamo BP con 11, avremmo avuto, per z, la seguente mappa di Carnaugh,


ottenendo cosi' come espressione per z la seguente:

z = not(y1)y2x

Da una analisi piu' attenta, senza dover ricorrere all'algoritmo di minimizzazione degli automi, si puo' vedere come il seguente automa sia piu' piccolo ed equivalente a quello che abbiamo fornito.


Infatti lo stato BP si puo' intendere come:
ho appena ricevuto una a oppure ho appena ricevuto un numero pari di b consecutive.
Lo stato BP e' anche quello iniziale.

L'ideale sarebbe stato quindi partire con tale automa, grazie all'algoritmo di minimizzazione o grazie ad un'analisi piu' acuta.
Il processo di sintesi sarebbe stato, piu' semplicemente, il seguente.

Tabella di flusso:


Codifica:
BP = 0
BD = 1
a = 0
b = 1

Tabella delle transizioni:


Dalla tabella delle transizioni possiamo facilmente ottenere le mappe di Carnaugh per le 2 funzioni booleane z e y' (y rappresenta lo stato interno "successivo").


Per ogni mappa abbiamo un unico implicante primo, che e' anche un mintermine.

y' = xnot(y)

z = xy

Notare come, in questo caso particolare, arriviamo allo stesso circuito a cui eravamo arrivati partendo dall'automa non minimizzato.