• Il segnale d’uscita Z può modificare il suo valore solo quando si verifica o un fronte di salita di X1 o un fronte di salita di X2: nel primo caso si deve avere Z=1, nel secondo Z=0. Alberto Geniola Esame di Reti Logiche - T • Una rete sequenziale asincrona è dotata di due ingressi X1, X2 e di un’uscita Z. I segnali X2 e X1 non cambiano mai di valore contemporaneamente. Obiettivo: eseguire il progetto, senza riduzione degli stati, in schematico Xilinx, corredato da simulazione behavioural e post-route 1 Diagramma degli stati 00,1 10,1 00,1 00,0 C B A E 10,1 00,0 Esame di Reti Logiche - T 10,0 10,1 00,0 11,0 10,0 01,0 01,1 11,1 11,0 01,0 00,1 10,1 01,0 11,0 D Alberto Geniola Si è scelto di svolgere la risoluzione del problema con il modello di macchina a stati di Mealy. G F H 01,1 01,0 11,1 11,1 2 Tabella degli stati 00 01 11 10 A A,0 H,0 -,- B,1 B C,1 -,- D,0 B,1 C C,1 H,0 -,- B,1 D -,- H,0 D,0 E,0 E A,0 -,- D,0 E,0 F -,- G,1 F,1 B,1 G C,1 G,1 F,1 -,- H A,0 H,0 F,1 -,- Sono presenti otto stati. Per codificarli, si necessita di tre variabili di stato, in quanto log 2 8 = 3. Esame di Reti Logiche - T Stato Alberto Geniola Ricaviamo dal precedente diagramma la seguente tabella degli stati. Ogni riga rappresenta le possibili transizioni da uno stato ad un altro al variare degli ingressi. In grassetto sono riportati gli stati stabili per gli ingressi della medesima colonna. 3 Esame di Reti Logiche - T • Sono presenti otto stati, codificabili con tre variabili binarie • Per ipotesi due segnali di ingresso non cambiano mai di valore contemporaneamente. Questo ci permette di avere una indifferenza per ogni riga della tabella. In altre parole da uno stato X stabile la rete può spostarsi solamente in altri 3 stati al variare degli ingressi, in quanto una quarta variazione sarebbe «illegale» • Per ogni colonna della tabella esistono più stati stabili (due per ogni configurazioni di ingresso). Questo fa presumere che bisognerà imporre uno stato iniziale definito dal quale far partire la rete (mediante l’introduzione di un reset). Alberto Geniola Tabella degli stati: considerazioni 4 Codifica Codifica 00 01 11 10 A 000 000,0 100,0 -,- 001,1 B 001 011,1 -,- 010,0 001,1 C 011 011,1 100,0 -,- 001,1 D 010 -,- 100,0 010,0 110,0 E 110 000,0 -,- 010,0 110,0 F 111 -,- 101,1 111,1 001,1 G 101 011,1 101,1 111,1 -,- H 100 000,0 100,0 111,1 -,- Sono presenti otto stati. Per codificarli, si necessita di tre variabili di stato, in quanto log 2 8 = 3. Esame di Reti Logiche - T Stato Alberto Geniola Analizzate le varie opportunità di codifica, si è scelta la seguente (codice gray a 3 bit), la quale ci ha permesso di avere un numero di corse accettabile e aggirabili senza aumentare il numero di variabili di stato. 5 Corse: identificazione B H C G D F Esame di Reti Logiche - T A Alberto Geniola Al fine di identificare le possibili corse dovute al cambiamento di più di un bit di stato che dovrebbe avvenire simultaneamente (cosa altamente improbabile in natura), si è costruito il seguente diagramma delle adiacenze. E Le connessioni di colore rosso indicano i cambi di stati che richiedono il variare di più di un solo bit di stato. Possiamo perciò ora passare all’identificazione e risoluzione delle corse in tabella. 6 Corse: workaround 00 000 011 011 --100 --001 000 01 100 000 001 000 --101 101 100 11 010 000 --010 010 111 111 101 10 001 001 001 110 110 011 ----- Per arrivare allo stadio 010 con uscita 0, si è preferito passare attraverso 000. Questo stato ha come uscita per 11 una INDIFFERENZA. Per evitare glitch sull’uscita della rete quindi, andremo a modificare la tabella degli stati per Z, forzando lo stato 000 con ingresso 11 ad uscita 0. Ingegneristicamente tale decisione si traducerà in una PORTA and in più sul circuito (+ consumo, + spazio occupato) ma eviterà un’uscita falsata seppur per pochissimo tempo. La politica scelta per aggirare le corse prevede l’utilizzo minimo delle caselle di indifferenza, massimizzando invece la condivisione di caselle di passagio (stati non stabili), al fine di garantire maggiore semplicità nel processo di sintesi. Un esempio potrebero essere le due corse arancione e viola: entrambe i cammini con ingresso 01 condividono il passaggio per lo stato 000, che reindirizza allo stato 100. Esame di Reti Logiche - T Stato 000 001 011 010 110 111 101 100 Alberto Geniola La seguente tabella riporta le corse corrette in modo da evitare malfunzionamenti della rete. Si è scelto di usare colori diversi per ogni caso identificato (in totale 7). 7 Codifica 00 01 11 10 A 000 000,0 100,0 010,0 001,1 B 001 011,1 000,- 000,0 001,1 C 011 011,1 001,0 - - -,- 001,1 D 010 - - -,- 000,0 010,0 110,0 E 110 100,0 - - -,- 010,0 110,0 F 111 - - -,- 101,1 111,1 011,1 G 101 001,1 101,1 111,1 -,- H 100 000,0 100,0 101,1 -,- Esame di Reti Logiche - T Stato Alberto Geniola Tabella finale 8 Sintesi dei segnali: Y1 10 X1X2 \ Y2Y3 00 01 11 00 01 11 10 00 0 1 0 0 00 0 1 1 - 01 0 0 0 0 01 0 1 1 - 11 0 0 - 0 11 - 1 1 0 10 - 0 0 1 10 1 - 0 1 Y1=0 Esame di Reti Logiche - T X1X2 \ Y2Y3 Alberto Geniola • Sintetizziamo ora i vari segnali, a partire da quelli che identificano le variabili di stato e saranno usati in retroazione sulla nostra rete Y1=1 𝑌1 = 𝑌1 𝑌2 ! 𝑋1 + 𝑌1 𝑌3 𝑋2 + 𝑌1 ! 𝑌2 𝑋2 + 𝑌2 ! 𝑌3 𝑋1 ! 𝑋2 + ! 𝑌2 ! 𝑌3 ! 𝑋1 𝑋2 9 10 X1X2 \ Y2Y3 00 01 11 00 01 11 10 00 0 0 1 0 00 0 0 0 - 01 1 0 0 0 01 0 0 1 - 11 1 0 - 0 11 - 0 1 1 10 - 0 1 1 10 0 - 1 1 Y1=0 Y1=1 𝑌2 = ! 𝑌1 ! 𝑌3 𝑋1 𝑋2 + ! 𝑌1 𝑌3 ! 𝑋1 ! 𝑋2 + 𝑌2 ! 𝑌3 𝑋1 Esame di Reti Logiche - T X1X2 \ Y2Y3 Alberto Geniola Sintesi dei segnali: Y2 10 10 X1X2 \ Y2Y3 00 01 11 00 01 11 10 00 0 0 0 1 00 0 0 1 - 01 1 0 0 1 01 1 1 1 - 11 1 1 - 1 11 - 1 1 1 10 - 0 0 0 10 0 - 0 0 Y1=0 𝑌3 = ! 𝑌2 𝑋1 ! 𝑋2 + 𝑌1 𝑌3 + 𝑌3 ! 𝑋2 + 𝑌2 𝑌3 Y1=1 Esame di Reti Logiche - T X1X2 \ Y2Y3 Alberto Geniola Sintesi dei segnali: Y3 11 10 X1X2 \ Y2Y3 00 01 11 00 01 11 10 00 0 0 0 1 00 0 0 1 - 01 1 - 0 1 01 1 1 1 - 11 1 0 - 1 11 - 1 1 1 10 - 0 0 0 10 0 - 0 0 Y1=0 𝑍 = 𝑌1 𝑌3 + 𝑌3 ! 𝑋2 + ! 𝑌2 ! 𝑌3 𝑋1 Y1=1 Esame di Reti Logiche - T X1X2 \ Y2Y3 Alberto Geniola Sintesi dei segnali: Z Uscita che avrebbe previsto un glitch su Z passando da 10 a 11 allo stato 000 𝑍 = 𝑌1 𝑌3 + 𝑌3 ! 𝑋2 + ! 𝑌2 ! 𝑋1 ! 𝑋2 + ! 𝑌1 ! 𝑌2 𝑋1 Uscita che non presenta glitch Per garantire la massima qualità della rete, si sceglierà la seconda opzione, più costosa ma più precisa. 12 𝑌1 = 𝑌1 𝑌2 ! 𝑋1 + 𝑌1 𝑌3 𝑋2 + 𝑌1 ! 𝑌2 𝑋2 + 𝑌2 ! 𝑌3 𝑋1 ! 𝑋2 + ! 𝑌2 ! 𝑌3 ! 𝑋1 𝑋2 𝑌2 = ! 𝑌1 ! 𝑌3 𝑋1 𝑋2 + ! 𝑌1 𝑌3 ! 𝑋1 ! 𝑋2 + 𝑌2 ! 𝑌3 𝑋1 + 𝑌1 𝑌3 𝑋1 𝑌3 = ! 𝑌2 𝑋1 ! 𝑋2 + 𝑌1 𝑌3 + 𝑌3 ! 𝑋2 + 𝑌2 𝑌3 Esame di Reti Logiche - T Le funzioni logiche che caratterizzano i segnali di stato e quello d’uscita. Il prossimo step consiste nel generare una rappresentazione schematica di tali risultati e produrre una simulazione di funzionamento. Alberto Geniola Sintesi dei segnali 𝑍 = 𝑌1 𝑌3 + 𝑌3 ! 𝑋2 + ! 𝑌2 ! 𝑋1 ! 𝑋2 + ! 𝑌1 ! 𝑌2 𝑋1 13 Esame di Reti Logiche - T Alberto Geniola Rappresentazione schematico 14 Il banco di prova: test VHDL Si noti che per ipotesi gli ingressi non cambiano mai simultaneamente, perciò anche nel listato VHDL non inseriremo istruzioni parallele per l’impostazione dei valori di ingresso (compresi aventuali valori iniziali) Esame di Reti Logiche - T Ecco i passaggi che si andranno a sviluppare in VHDL 1. Porre la rete in uno stato noto, grazie al segnale di RESET 2. Impostare i due segnali di ingresso al valore 00 3. Alzare ad 1 il segnale X1 (ci si aspetta fronte positivo di Z) 4. Alzare ad 1 il segnale X2 (ci si aspetta fronte negativo di Z) 5. Abbassare a 0 il segnale X2 (ci si aspetta Z invariato) 6. Abbassare a 0 il segnale X1 (ci si aspetta Z invariato) 7. Alzare a 1 X2 (ci si aspetta Z ancora a 0) 8. Alzare a 1 X1 (ci si aspetta un fronte positivo di Z) Alberto Geniola Al fine di testare il corretto funzionamento della rete, si fa uso di un semplice listato VHDL-Test-Bench per simulare il comportamento della rete in risposta a diversi stimoli di ingresso. 15 COMPONENT schematico PORT( Z : X1 : X2 : OUT IN IN END COMPONENT; SIGNAL Z SIGNAL X1 SIGNAL X2 : STD_LOGIC; : STD_LOGIC; : STD_LOGIC; SIGNAL A_RES : STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; A_RES : IN STD_LOGIC); Esame di Reti Logiche - T LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; LIBRARY UNISIM; USE UNISIM.Vcomponents.ALL; ENTITY schematico_schematico_sch_tb IS END schematico_schematico_sch_tb; ARCHITECTURE behavioral OF schematico_schematico_sch_tb IS Alberto Geniola Banco prova: VHDL 1 BEGIN UUT: schematico PORT MAP( Z => Z, X1 => X1, X2 => X2, A_RES => A_RES ); 16 -- I segnali non cambiano mai contemporaneamente per ipotesi X1<='0'; wait for 100 ns; X2<='0'; A_RES<='0'; wait for 100 ns; X1<='1'; -- Fronte positivo di X1 wait for 100 ns; X2<='1'; -- Fronte positivo di X2 wait for 100 ns; Esame di Reti Logiche - T -- *** Test Bench - User Defined Section *** tb : PROCESS BEGIN A_RES<='1'; Alberto Geniola Banco prova: VHDL 2 X2<='0'; -- Fronte negativo di X2 wait for 100 ns; X1<='0'; -- Fronte negativo di X1 wait for 100 ns; 17 Banco prova: VHDL 3 X2<='1'; -- Fronte positivo di X2 WAIT; -- will wait forever END PROCESS; -- *** End Test Bench - User Defined Section *** END; Esame di Reti Logiche - T X1<='1'; -- Fronte positivo di X1 Alberto Geniola wait for 100 ns; 18 Esame di Reti Logiche - T Alberto Geniola Simulazione: behavioural Tutto funziona come previsto: Con reset alto, l’uscita si porta a 0. Una volta configurati i due ingressi a 00, appena X1 diventa alto anche Z si porta ad 1. Dopo 200 ns, al fronte di salita di X2 Z si porta a valore 0. Successivamente vengono abbassati entrami i segnali a 0, e l’uscita rimane stabile. Al fronte positivo di X2 all’istante 600 ns, Z rimane 0, per poi diventare 1 al fronte positivo di X1 (700 ns). Questa simulazione non mostra ritardi nella variazione tra segnale di ingresso e quello di uscita; è perciò un modello ideale. 19 Esame di Reti Logiche - T Alberto Geniola Simulazione: post route Anche in questo caso tutto funziona, ma ovviamente sono presenti dei ritardi. Seppur di lieve entità, notiamo dei ritardi significativi che oscillano tra i 7 ed i 10 ns sul commutare del segnale di uscita. Nonostante tutto si tratta di un ottimo risultato, migliorabile se si prendesse in considerazione una tecnologia più avanzata per i componenti AND, OR e NOT usati di default dal software Xilinx. 20