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 a ogni ciclo di clock e deve avere uscita 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).
- Disegnare il diagramma degli stati come automa di Mealy e ricavare la tabella degli stati.
- 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.
- Confrontare con l'automa di Moore per la stessa specifica.
- 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):
- : nessun prefisso utile (l'ultimo bit era 0 e non fa parte di un
10iniziale, oppure siamo all'inizio); - : l'ultimo bit era 1 (prefisso
1); - : gli ultimi due bit erano
10(prefisso10).
Transizioni, con uscita scritta come :
| stato | ||
|---|---|---|
| / 0 | / 0 | |
| / 0 | / 0 | |
| / 0 | / 1 |
Perché: da (visto 1) con si ha 10 → ; con si ha 11: l'ultimo 1 può ancora iniziare una nuova sequenza → resta . Da (visto 10) con la sequenza 101 è completa: e, per la sovrapposizione, l'ultimo 1 è già il prefisso 1 di una nuova sequenza → (non ); con si ha 100: nessun prefisso utile → .
Servono 3 stati: l'uscita dipende anche dall'ingresso (Mealy).
2. Sintesi con flip-flop D
3 stati → flip-flop. Codifica: , , ( non usato: condizione di indifferenza).
| 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 di ciascun flip-flop è il valore di stato prossimo. Mappe di Karnaugh (righe , colonna ):
: vale 1 solo per ; la riga è indifferente e permette un gruppo da 2 ( o , , ):
: vale 1 per , , (e indifferente): in tutti i casi con , gruppo da 4:
: vale 1 solo per ; con l'indifferenza in il gruppo è :
Circuito: un AND con ingressi e che pilota ; un filo da a ; un AND con ingressi e 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" (, con ): 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 | |||
|---|---|---|---|
| 0 | |||
| 0 | |||
| 0 | |||
| 1 |
Da (visto 101): con gli ultimi bit sono 10 → ; con l'ultimo 1 ricomincia → .
4. Simulazione
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 (stato prima del fronte → → nuovo stato):
| 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | |
|---|---|---|---|---|---|---|---|---|
| stato prima | 00 | 01 | 10 | 01 | 10 | 01 | 01 | 10 |
| 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 (invece che in ) 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 ne serve una.
- Non sfruttare le condizioni di indifferenza dello stato nella semplificazione.
- Confondere stato prossimo (ciò che i flip-flop D memorizzano al prossimo fronte) con lo stato attuale .
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: nessun prefisso; visto 1; visto 10.
| stato | ||
|---|---|---|
| / 0 | / 0 | |
| / 0 | / 0 | |
| / 0 | / 1 |
Da con : e si va in (sovrapposizione).
Codifica , , (11 indifferente); equazioni (K-map con le indifferenze):
Moore: servono 4 stati ( = visto 101, ), uscita valida nel ciclo dopo. Simulata contro un riconoscitore diretto su 2000 sequenze casuali; con : .
Errori comuni: tornare in dopo 101; uscita sugli archi di Moore o negli stati di Mealy; transizione mancante; indifferenze non usate; confuso con .