Introduzione Il progetto Cassaforte II assegnamento consiste in una diversa codifica delle variabili di stato. Ci si chiede se questo possa influenzare la complessità della rete stessa. Inizialmente si era scelto l’ assegnamento seguente: X1 X1 X2 X2 00 01 11 10 Y1 00 01 11 10 Y2 B A C D A B C D 00 01 11 10 01 00 11 10 1 1 Y1 = !x1x2y2 + x1x2y1 Y2 = !x1!x2!y1 + !x1x2 y2 Z = Y1!Y2 Che da luogo alle seguenti funzioni sintetizzate:
Introduzione Nel progetto Cassaforte II assegnamento si sceglierà per gli stati questa codifica diversa: X1 X2 Y1 00 01 11 10 Y2 A B C D 00 11 10 01 11 00 10 01 1 Di seguito la mappa di Karnaugh con la sintesi delle funzioni che risultano molto più complesse di quelle di prima: Y2= !X1!X2!Y1!Y2 + X1X2!Y1Y2 + !X1!X2Y1Y2 + X1X2Y1!Y2 Y1= !X1!X2!Y1!Y2 + !X1Y1Y2 + !X1X2Y1 Z = Y2!Y1
Schematico Xilinx
Testbench
Testbench
Simulazione Behavioural (1) Si nota che la simulazione Xilinx si ferma al tempo 650 ns, quando l’ uscita Z deve andare a 1, riportando il seguente errore: Il problema rilevato è dovuto al cambiamento contemporaneo delle variabili di stato che provocano una pericolosa corsa critica, facendo oscillare l’uscita. Perciò anche se nella colonna Value sono riportati i valori teoricamente aspettati dalla rete, la simulazione si blocca. In seguito tramite la simulazione Post-Route verrà studiato attentamente il problema.
Simulazione Post-Route (1) La simulazione Post-Route ha successo, tuttavia non ci permette di vedere nel dettaglio l’ oscillazione dell’uscita Z al tempo 650 ns perché al momento che gli ingressi ritornano a X1=X2=0 (caso rosso) le variabili di stato non riescono, a causa della transizione contemporanea fisicamente non possibile, a portarsi nuovamente ad ‘’11’’. Per questo, la rete non risponderà correttamente agli stimoli successivi. Il comportamento delle variabili di stato per la configurazione di ingresso X1=X2=0, nello stato 00 è impredicibile. Infatti al termine del Reset riescono ad arrivare nello stato stabile Y1=Y2=1, mentre nel caso evidenziato sopra, dopo una situazione di instabilità si portano nello stato errato Y1=Y2=0.
Simulazione Post-Route (1) particolare Quando il Reset termina la rete tenta di portarsi in Y1=Y2=1 ma a causa della non contemporaneità del cambiamento delle variabili di stato, si transita per lo stato Y1=0 Y2=1 che prevede uscita Z=1. Questo comporta appunto un impulso spurio sull’ uscita.
Simulazione Post-Route (2) Per analizzare il problema della simulazione Behavioural precedente è stata fatta una semplice modifica del Testbench che permette di osservare l’ oscillazione sull’ uscita. Il codice del Testbench modificato è consultabile nello stesso file, ma commentato. Simulazione Post-Route (2) Di fatto è stato solo cambiato l’ ordine degli stimoli di ingresso, approfittando del fatto che inizialmente dopo il reset la rete sia riuscita a portarsi allo stato Y1=Y2=1. Così facendo, per le combinazioni di ingresso 00-01-11, invece di arrivare allo stato stabile Y1=0 e Y2=1 con uscita Z=1, si ha un’ altra situazione anomala.
Simulazione Post-Route (2) particolare Il comportamento errato della rete è causato da una corsa critica pericolosissima (freccia rossa ): Le frecce nere sulla tabella delle transizioni rispecchiano il comportamento della rete in questo caso. Quando si presenta la combinazione di ingressi X1=X2=1, la variabile di stato Y1 cambia per prima, ma mentre la rete si sta stabilizzando allo stato Y1=Y2=0, dopo un tempo t0 commuta anche Y2. Raggiunto lo stato Y1=0 e Y2=1, il ritardo dovuto alla commutazione di Y2 t0 fa si che la rete si porti allo stato Y1=Y2=0 dopo un tempo t1. Questa situazione anomala legata ai ritardi fa oscillare l’uscita Z e si ripete fino a che non cambieranno gli ingressi.
Considerazioni Come si è notato, la transizione dallo stato Y1=1 e Y2=0 allo stato Y1=0 e Y2=1 con ingressi X1=X2=1 è molto pericolosa. Nel caso appena analizzato comporta l’ oscillazione dell’ uscita Z e per questo la simulazione Behavioural di Xilinx dà l’ errore precedentemente indicato. In ogni caso, le problematiche dovute a questa transizione si potevano presentare in molteplici modi: Dallo stato 10 (stabile per 01), con ingresso 11, la rete si dovrebbe portare nello stato 01 (stabile - freccia rossa tratteggiata). Tuttavia una delle due variabili di stato cambierà per prima. Se cambia prima Y1 (freccia verde) si arriverà erroneamente allo stato 00 stabile per 11. Se invece cambia prima Y2 la rete si porterà allo stato 11 che prevede un ulteriore doppio cambiamento delle variabili di stato. Se in questo caso cambierà prima Y1 si arriva alla destinazione voluta, ossia lo stato 01 stabile per 11, altrimenti si ritorna allo stato 10 con una potenziale oscillazione. Il comportamento dipenderà completamente dai ritardi delle reti combinatorie.
Conclusioni Come abbiamo visto l’ assegnazione diversa delle variabili di stato ha portato ad una rete più complessa ma soprattutto meno funzionale. Sono state indispensabili due simulazioni per comprendere approfonditamente le cause dei malfunzionamenti. In questo caso non è preferibile adottare questa scelta a causa delle molteplici ed impredicibili problematiche appena viste.