140 likes | 253 Views
Percorso S. 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.
E N D
Percorso S 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. 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: 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 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
Tabella delle Transizioni 2 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=1 X1 X0 Y3=0 Y2=0 X1 X0 Y3=1 Y2=0 X1 X0 Y3=1 Y2=1 X1 X0
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.
Testbench Per verificare il corretto funzionamento del circuito, prima lo resettiamo, poi simuliamo 3 diverse eventualità: • Un reset durante il percorso • Un errore durante il percorso • Un percorso che giunge fino alla fine
Test Reset e Percorso Errato --verifico il funzionamento del reset X1<=‘0’; X0<=‘1’; --Input corretto -> Stato B:0000 wait for CK_period*10; X1<=‘1’; X0<=‘1’; --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) X1<=‘0’; X0<=‘1’; --Input corretto -> Stato B:0000 waitfor CK_period*10; X1<=‘1’; X0<=‘1’; --Input corretto -> Stato C:0001 waitfor CK_period*10; X1<=‘1’; X0<=‘0’; --Input corretto -> Stato D:0011 waitfor CK_period*10; X1<=‘1’; X0<=‘0’; --Input errato --Torno al punto di partenza: Stati I->L->A waitfor CK_period*10;
Test Percorso Corretto --simulo un percorso corretto --A->B->C->D->E->F X1<=‘0’; X0<=‘1’; --Input corretto -> Stato B:0000 waitfor CK_period*10; X1<=‘1’; X0<=‘1’; --Input corretto -> Stato C:0001 waitfor CK_period*10; X1<=‘1’; X0<=‘0’; --Input corretto -> Stato D:0011 waitfor CK_period*10; X1<=‘1’; X0<=‘1’; --Input corretto -> Stato E:0010 waitfor CK_period*10; X1<=‘0’; X0<=‘1’; --Input corretto -> Stato F:0110, Uscita 1 waitfor CK_period*10; --percorso corretto terminato --torno nella posizione iniziale X1<=‘1’; X0<=‘1’; --Stati G->H->I->L->A waitfor CK_period*10;
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