Salta al contenuto
Note per Studenti Esercizio 32 · riconoscitore di sequenza con automa di Mealy

Esercizio 32riconoscitore di sequenza con automa di Mealy

In questa pagina 5

Testo (tipo di esercizio previsto dalla modalità di verifica del corso per le reti sequenziali; nessun tema pubblico di questo tipo è stato trovato, quindi il testo è originale). Una rete sequenziale sincrona riceve un bit XX a ogni ciclo di clock e deve avere uscita Z=1Z = 1 nel ciclo in cui riceve l'ultimo bit della sequenza 101, anche quando le sequenze si sovrappongono (con l'ingresso 10101 l'uscita deve valere 1 due volte).

  1. Disegnare il diagramma degli stati come automa di Mealy e ricavare la tabella degli stati.
  2. Codificare gli stati, ricavare con le mappe di Karnaugh le equazioni di stato prossimo e di uscita, e realizzare la rete con flip-flop D.
  3. Confrontare con l'automa di Moore per la stessa specifica.
  4. Verificare la rete simulandola su ingressi casuali.

Teoria: Reti sequenziali e automi a stati finitiModello di una rete sequenziale sincrona (stato in flip-flop, logica di stato prossimo e di uscita); automi di Moore e di Mealy; procedimento di sintesi con esempio svolto di un riconoscitore della sequenza 11.Reti sequenziali e automi a stati finiti →, Latch e flip-flopReti sequenziali e retroazione; latch SR con porte NOR e stato proibito; latch SR e D abilitati dal clock; flip-flop D master-slave sensibile al fronte; flip-flop JK e T; tempi di setup e hold; clock e periodo minimo.Latch e flip-flop →, Reti combinatorie e mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh →.


1. Automa di Mealy

Gli stati ricordano quanto della sequenza 101 è già stato visto (come suffisso degli ultimi bit):

  • S0S_0: nessun prefisso utile (l'ultimo bit era 0 e non fa parte di un 10 iniziale, oppure siamo all'inizio);
  • S1S_1: l'ultimo bit era 1 (prefisso 1);
  • S2S_2: gli ultimi due bit erano 10 (prefisso 10).

Transizioni, con uscita scritta come X/ZX/Z:

stato X=0X = 0 X=1X = 1
S0S_0 S0S_0 / 0 S1S_1 / 0
S1S_1 S2S_2 / 0 S1S_1 / 0
S2S_2 S0S_0 / 0 S1S_1 / 1

Perché: da S1S_1 (visto 1) con X=0X = 0 si ha 10 → S2S_2; con X=1X = 1 si ha 11: l'ultimo 1 può ancora iniziare una nuova sequenza → resta S1S_1. Da S2S_2 (visto 10) con X=1X = 1 la sequenza 101 è completa: Z=1Z = 1 e, per la sovrapposizione, l'ultimo 1 è già il prefisso 1 di una nuova sequenza → S1S_1 (non S0S_0); con X=0X = 0 si ha 100: nessun prefisso utile → S0S_0.

Servono 3 stati: l'uscita dipende anche dall'ingresso (Mealy).

2. Sintesi con flip-flop D

3 stati → ⌈log⁡23⌉=2\lceil \log_2 3 \rceil = 2 flip-flop. Codifica: S0=00S_0 = 00, S1=01S_1 = 01, S2=10S_2 = 10 (Q1Q0=11Q_1 Q_0 = 11 non usato: condizione di indifferenza).

Q1Q_1 Q0Q_0 XX Q1′Q_1' Q0′Q_0' ZZ
0 0 0 0 0 0
0 0 1 0 1 0
0 1 0 1 0 0
0 1 1 0 1 0
1 0 0 0 0 0
1 0 1 0 1 1
1 1 0 X X X
1 1 1 X X X

Con i flip-flop D l'ingresso DD di ciascun flip-flop è il valore di stato prossimo. Mappe di Karnaugh (righe Q1Q0Q_1 Q_0, colonna XX):

Q1′Q_1': vale 1 solo per Q1Q0X=010Q_1 Q_0 X = 010; la riga 110110 è indifferente e permette un gruppo da 2 (Q1=0Q_1 = 0 o 11, Q0=1Q_0 = 1, X=0X = 0):

D1=Q1′=Q0 X‾D_1 = Q_1' = Q_0\,\overline{X}

Q0′Q_0': vale 1 per 001001, 011011, 101101 (e 111111 indifferente): in tutti i casi con X=1X = 1, gruppo da 4:

D0=Q0′=XD_0 = Q_0' = X

ZZ: vale 1 solo per 101101; con l'indifferenza in 111111 il gruppo è Q1XQ_1 X:

Z=Q1XZ = Q_1 X

Circuito: un AND con ingressi Q0Q_0 e X‾\overline{X} che pilota D1D_1; un filo da XX a D0D_0; un AND con ingressi Q1Q_1 e XX per l'uscita. Due flip-flop D, due porte AND e un inverter.

3. Automa di Moore

Se l'uscita deve dipendere solo dallo stato, serve uno stato in più che significhi "appena ricevuta 101" (S3S_3, con Z=1Z = 1): 4 stati, 2 flip-flop lo stesso ma una rete di stato prossimo più complicata, e l'uscita è valida nel ciclo successivo a quello dell'ultimo bit.

stato ZZ X=0X = 0 X=1X = 1
S0S_0 0 S0S_0 S1S_1
S1S_1 0 S2S_2 S1S_1
S2S_2 0 S0S_0 S3S_3
S3S_3 1 S2S_2 S1S_1

Da S3S_3 (visto 101): con X=0X = 0 gli ultimi bit sono 10 → S2S_2; con X=1X = 1 l'ultimo 1 ricomincia → S1S_1.

4. Simulazione

python
import random

def rete(sequenza):
    """Mealy `101` con sovrapposizione: Q1' = Q0 X', Q0' = X, Z = Q1 X."""
    q1 = q0 = 0
    uscite = []
    for x in sequenza:
        z = q1 & x                         # uscita dello stato attuale e dell'ingresso
        q1, q0 = q0 & (1 - x), x           # fronte di clock: i D diventano il nuovo stato
        uscite.append(z)
    return uscite

def riferimento(sequenza):
    s = "".join(map(str, sequenza))
    return [1 if s[max(0, i - 2): i + 1] == "101" else 0 for i in range(len(s))]

for _ in range(2000):
    seq = [random.randint(0, 1) for _ in range(random.randint(0, 30))]
    assert rete(seq) == riferimento(seq)
print("2000 sequenze casuali concordano")

seq = [1, 0, 1, 0, 1, 1, 0, 1]
print(seq, rete(seq))                      # [1, 0, 1, 0, 1, 1, 0, 1] [0, 0, 1, 0, 1, 0, 0, 1]

Traccia su X=1 0 1 0 1 1 0 1X = 1\,0\,1\,0\,1\,1\,0\,1 (stato Q1Q0Q_1Q_0 prima del fronte → ZZ → nuovo stato):

XX 1 0 1 0 1 1 0 1
stato prima 00 01 10 01 10 01 01 10
ZZ 0 0 1 0 1 0 0 1
stato dopo 01 10 01 10 01 01 10 01

L'uscita vale 1 al terzo bit (101), al quinto (101 sovrapposta a quella precedente: l'ultimo 1 del primo 101 è il primo del secondo) e all'ottavo.

Errori comuni

  • Tornare in S0S_0 (invece che in S1S_1) dopo aver riconosciuto 101: si perderebbe la sovrapposizione.
  • Mettere l'uscita sugli stati in un automa di Mealy, o sugli archi in un automa di Moore.
  • Dimenticare una transizione: per ogni stato e per ogni valore di XX ne serve una.
  • Non sfruttare le condizioni di indifferenza dello stato 1111 nella semplificazione.
  • Confondere stato prossimo Q′Q' (ciò che i flip-flop D memorizzano al prossimo fronte) con lo stato attuale QQ.

Versione ripasso

Riconoscitore della sequenza 101 con sovrapposizione, automa di Mealy, flip-flop D. Teoria: Reti sequenziali e automi a stati finitiModello di una rete sequenziale sincrona (stato in flip-flop, logica di stato prossimo e di uscita); automi di Moore e di Mealy; procedimento di sintesi con esempio svolto di un riconoscitore della sequenza 11.Reti sequenziali e automi a stati finiti →.

Stati: S0S_0 nessun prefisso; S1S_1 visto 1; S2S_2 visto 10.

stato X=0X = 0 X=1X = 1
S0S_0 S0S_0 / 0 S1S_1 / 0
S1S_1 S2S_2 / 0 S1S_1 / 0
S2S_2 S0S_0 / 0 S1S_1 / 1

Da S2S_2 con X=1X = 1: Z=1Z = 1 e si va in S1S_1 (sovrapposizione).

Codifica S0=00S_0 = 00, S1=01S_1 = 01, S2=10S_2 = 10 (11 indifferente); equazioni (K-map con le indifferenze):

D1=Q0 X‾,D0=X,Z=Q1XD_1 = Q_0\,\overline{X}, \qquad D_0 = X, \qquad Z = Q_1 X

Moore: servono 4 stati (S3S_3 = visto 101, Z=1Z = 1), uscita valida nel ciclo dopo. Simulata contro un riconoscitore diretto su 2000 sequenze casuali; con X=10101101X = 10101101: Z=00101001Z = 00101001.

Errori comuni: tornare in S0S_0 dopo 101; uscita sugli archi di Moore o negli stati di Mealy; transizione mancante; indifferenze non usate; QQ confuso con Q′Q'.

Teoria collegata