Rete Asincrona Una rete sequenziale asincrona è dotata di due ingressi E, X e di una uscita Z. L'uscita Z deve diventare 1 solamente quando durante l'ultima attivazione di X, E ha avuto, come ultimo fronte, un fronte positivo, in caso di fronte negativo invece l'uscita passa a 0. Il cambiamento eventuale dell'uscita avverrà solamente al fronte positivo di X. Si progetti la rete utilizzando la sintesi di Mealy, si semplifichino gli stati, si eliminano eventuali corse critiche e si riassuma il tutto X E Z
Diagramma degli Stati A B D M N P C O E F I G H L 01,0 00,0 01,0 11,0 10,1 00,1 A B D 01,1 M N P 00,0 01,0 10,1 00,1 00,1 00,0 01,1 11,1 10,0 01,0 10,0 10,1 11,0 10,1 C O E 11,1 F I 10,0 10,0 11,1 11,1 10,0 11,0 00,1 10,1 10,0 00,0 11,1 00,1 01,1 G H L 01,1 00,0 01,1 00,1 11,0
Spiegazione diagramma stati Partiamo dallo stato A stabile per 00. Se l'uscita E varia, devo cambiare stato, ma non sono ancora sulla strada giusta, mi porto infatti negli stati A e C. Avendo un fronte di X posso continuare: se E è a 1 (Stato O) prima dovrà tornare a 0 (Stato B) e se avrò un ulteriore fronte arrivo nello stato D. Qui ho un punto chiave: se E ritorna a zero ritorno in B, ma se cambia X continuo con lo stato E. Sono nella condizione voluta, ho appena registrato un fronte positivo di E mentre X era 1, quindi appena si riattiverà X l'uscita andrà ad 1. Intanto che aspetto tale fronte, degli sbalzi di E non cambiano niente, semplicemente vado in degli stati “logicamente simili” (Stato E e G). X ha un fronte positivo e l'uscita va quindi a 1. In questo periodo se cambia semplicemente la X senza che la E cambi, non succede niente, ma se ho un fronte di discesa di E seguito anche da X l'uscita dovrà tornare a 0. ritornando quindi negli stati iniziali (Stato B o O) Si noti che mentre il segnale X è 1 se ho un numero di cambi pari di E l'uscita non varia, saltello semplicemente fra due stati. Ad esempio se sono in F e la E va a zero, potrei tornare a zero, ma se subito ritorna a 1 non ho nessun problema, la stessa cosa vale anche in B e D. Devo infatti aspettare che la X decresca per vedere come comportarmi.
Tabella degli stati 00 01 11 10 A A,0 B,0 -,- C,0 B D,0 C O,0 D E,0 E 00 01 11 10 A A,0 B,0 -,- C,0 B D,0 C O,0 D E,0 E G,0 F,1 F M,1 I,1 G H,1 H L,1 I L M N,1 N P,1 O P
Tabella Triangolare X X X X X X X X X X X X X X X X X X X X X X X X X C DO D CE E AG DF F G H MH I L M LN N PI O P A X Classi Di Compatibilità X X [AB] [AC] [AO] [BD] [CO] [EG] [FI] [FM] [HI] [HL] [IL] [NP] X X X X Classi Massime Di Compatibilità X X X X X [ACO] [BD] [EG] [FM] [HIL] [NP] X X X X X X X X X X X X Queste classi di compatibilità soddisfano le condizioni di copertura e di chiusura X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
Codifica degli Stati + Corse 00 01 11 10 α 000 000,0 001,0 β 001 101,0 011 -,- 010 ε 100 100,1 111,1 γ 101 δ 111 110,1 ζ 110 00 01 11 10 [ACO] α α,0 β,0 [BD] β γ,0 [EG] γ ε,1 δ,1 [FM] δ ζ,1 [HIL] ε [NP] ζ Corsa Ho deciso di utilizzare queste codifiche per gli stati perchè sembrano ridurre il numero di corse da risolvere. In verde sono evidenziate le corse che si presentano
Risoluzione corse α β ε γ δ Per risolvere le corse ho dovuto ζ 00 01 11 10 α 0000 0000,0 0001,0 β 0001 0101,0 0011 -,- 0010 0011,0 ε 0100 0100,1 0101,1 γ 0101 0111,1 δ 0111 0110,1 1111,1 ζ 0110 0010,0 1000 1001 1011 1010 1100 1101 1111 1110,1 1110 1100,1 Per risolvere le corse ho dovuto aggiungere una quarta variabile di stato
Y1 = Y3Y1 + !X2X1Y3Y4 00 01 11 10 - 1 Y1Y2 = 00 = 01 = 10 = 11 X1X2 X1X2 Y3Y4 Y3Y4 X1X2 X1X2 Y3Y4 Y3Y4
Y2 = Y4X1!X2 + !X2Y2 + Y2!Y3+Y4Y2 00 01 11 10 1 - Y1Y2 = 00 = 01 = 10 1 - Y1Y2 = 00 = 01 = 10 = 11 X1X2 X1X2 Y3Y4 Y3Y4 X1X2 X1X2 Y3Y4 Y3Y4
Y3 = X1X2Y2Y4 + Y2Y3Y4 + !Y1Y3!Y4 00 01 11 10 1 - Y1Y2 = 00 = 01 = 10 1 - Y1Y2 = 00 = 01 = 10 = 11 X1X2 X1X2 Y3Y4 Y3Y4 X1X2 X1X2 Y3Y4 Y3Y4
Y4 = !X1X2!Y2 + X1Y4!Y1 + X2Y3Y4 + X1X2Y2!Y3 + !X2Y2Y3Y4 00 01 11 10 1 - Y1Y2 = 00 = 01 = 10 = 11 X1X2 X1X2 Y3Y4 Y3Y4 X1X2 X1X2 Y3Y4 Y3Y4
Schematico