Percorso S
Una rete sequenziale asincrona ha il compito di gestire il
comportamento di un cursore che si muove in un percorso ad S.
Tramite due segnali di ingresso X0 e X1 l’utente indica in quale
direzione vuole muovere il cursore:
X1 X0
Il sistema da uscita positiva quando il cursore giunge alla fine del suo percorso.
Il cursore non può mai muoversi di più di una casella nella stessa direzione, né
muoversi in direzione opposta a quella da cui proviene.
Se l’utente sceglie la direzione sbagliata il cursore viene riportato nella posizione
iniziale.
Una volta che il cursore è giunto a fine percorso, qualsiasi direzione consentita
viene scelta, il cursore viene riportato nella posizione iniziale.
Il sistema è dotato anche di un segnale di reset, che quando è a ‘1’ riporta il
cursore nella posizione iniziale.
Reti Logiche – Galassi Andrea – Prof. Neri Giovanni
Diagramma degli stati (Moore)
Lo stato A è lo stato iniziale, corrisponde alla
posizione 1 nel percorso
Gli stati B, C, D ed E sono gli stati intermedi del
percorso, corrispondono rispettivamente alle
posizioni 2, 3, 4 e 5 del percorso.
Lo stato F è lo stato finale del percorso, l’unico che
da uscita positiva. Corrisponde alla posizione 6.
Gli stati G, H, I e L sono gli stati intermedi che
riportano il cursore nella posizione iniziale se il
percorso è finito o se è stata scelta la direzione
sbagliata. Corrispondono alle posizioni 5, 4, 3, e 2.
Tabella delle transizioni
X1 X0
A, 0
B, 0
C, 0
D, 0
E, 0
F, 1
G, 0
H, 0
I, 0
L, 0
00
01
11
10
A
B
A
A
A
B
C
-
-
L
C
D
I
-
E
D
-
F
E
H
G
F
G
-
H
H
H
H
I
I
I
I
L
L
L
L
A
A
A
A
In verde gli stati stabili. In grigio le indifferenze.
Gli stati transitori G, H, I e L non sono stabili per nessuna configurazione degli ingressi
Tabella Triangolare
Non vi sono stati
compatibili
Variabili di stato
Poiché abbiamo 10 stati dovremo
usare 4 variabili di stato.
Dopo un’analisi del comportamento
del circuito attribuiamo un valore
binario ad ogni stato in modo che
non vi siano corse critiche: ogni stato
differisce dal precedente solo per il
valore di una variabile di stato
A
B
C
D
E
F
G
H
I
L
1000
0000
0001
0011
0010
0110
1110
1010
1011
1001
Tabella delle Transizioni 2
X1 X0
00
01
11
10
A 1000, 0
1000 0000 1000 1000
B 0000, 0
1000 0000 0001
C 0001, 0
-
D 0011, 0
1011
E 0010, 0
-
-
1001 0001 0011
-
0010 0011
0110 0010 1010
F 0110, 1
1110 0110 1110
G 1110, 0
1010 1010 1010 1010
H 1010, 0
1011 1011 1011 1011
I 1011, 0
1001 1001 1001 1001
L 1001, 0
1000 1000 1000 1000
-
In verde gli stati stabili
In grigio le indifferenze
Gli stati G, H, I e L non sono
stabili per nessun ingresso, essi
infatti sono stati transitori che
servono esclusivamente per
riportare il cursore allo stato A
Per essi e per A non sono
previste indifferenze poiché
sono raggiungibili con tutti e 4
le configurazioni di ingresso
Mappe di Karnaugh
Y3=0
Y2=0
Y3=0 Y2=1
X1 X0
y1
y0
00
B
0
0
C
0
1
-
D
1
1
1011
E
1
0
-
01
11
1000 0000 0001
Y3=1 Y2=0
10
y1
y0
00
01
11
10
-
0
0
-
-
-
-
0
1
-
-
-
-
1
1
-
-
-
-
1
0
1001 0001 0011
-
X1 X0
0010 0011
0110 0010 1010
F
X1 X0
Y3=1 Y2=1
1110 0110 1110
-
X1 X0
y1
y0
00
01
11
10
1000 0000 1000 1000
0
0
-
-
-
-
1
1000 1000 1000 1000
0
1
-
-
-
-
1
1
1001 1001 1001 1001
1
1
-
-
-
-
1
0
1011 1011 1011 1011
1
0
y1
y0
A
0
0
L
0
I
H
00
01
11
10
G
1010 1010 1010 1010
Formule
Y0= !R*(!Y3*!Y1*X1 + !Y3*Y0*!X0 + !Y3*Y0*!X1 + Y3*!Y2*Y1)
Y1= !R*(Y1*!Y0 + !Y3*X1*!X0 + !Y3*Y1)
Y2= !R*(!Y3*Y1*!Y0*!X1 + !Y3*Y2) = !R*!Y3*(Y1*!Y0*!X1 + Y2)
Y3= R+(Y0*!X1 + !Y0*!X0 + Y2*X1 + Y3*Y1 + Y3*X1)
Z= !R*!Y3*Y2
R è il segnale di RESET. Se positivo il sistema deve tornare nello stato
A (1000) con uscita 0.
VHDL
Testbench
Per verificare il corretto funzionamento del
circuito, prima lo resettiamo, poi simuliamo 3
diverse eventualità:
1. Un reset durante il percorso
2. Un errore durante il percorso
3. Un percorso che giunge fino alla fine
Test Reset e Percorso Errato
--verifico il funzionamento del reset
X<="01";
--Input corretto -> Stato B:0000
wait for CK_period*10;
X<="11";
--Input corretto -> Stato C:0001
wait for CK_period*10;
Reset <='1';
--Resetto -> Stato A:1000
wait for CK_period*10;
Reset <='0';
wait for CK_period*10;
--Simulo un percorso errato (A->B->C->A)
X<="01";
--Input corretto -> Stato B:0000
wait for CK_period*10;
X<="11";
--Input corretto -> Stato C:0001
wait for CK_period*10;
X<="10";
--Input corretto -> Stato D:0011
wait for CK_period*10;
X<="00";
--Input errato
--Torno al punto di partenza: Stati I->L->A
wait for CK_period*10;
Test Percorso Corretto
--simulo un percorso corretto
--A->B->C->D->E->F
X<="01";
--Input corretto -> Stato B:0000
wait for CK_period*10;
X<="11";
--Input corretto -> Stato C:0001
wait for CK_period*10;
X<="10";
--Input corretto -> Stato D:0011
wait for CK_period*10;
X<="11";
--Input corretto -> Stato E:0010
wait for CK_period*10;
X<="01";
--Input corretto -> Stato F:0110, Uscita 1
wait for CK_period*10;
--percorso corretto terminato
--torno nella posizione iniziale
X<="11";
--Stati G->H->I->L->A
wait for CK_period*10;
Simulazione Behavioral
Simulazione Post Route
Il comportamento è lo stesso della simulazione behavioral, fatta eccezione per i ritardi e le corse
che si verificano quando il circuito deve tornare nello stato A
Scarica

Presentazione