Cassaforte asincrona SR La cassaforte (dotata di una doppia tastiera - due ingressi) si apre solo se gli ingressi hanno assunto nel tempo le configurazioni 00-01-11. L’apertura della cassaforte si ha quando l’uscita è 1. Ogni violazione della sequenza riporta il sistema nello stato iniziale. Diagramma degli stati e relativa tabella 00 01 11 10 A A,0 B,0 -,- D,0 B A,0 B,0 C,- -,- C -,- E,- C,1 D,- D A,0 -,- F,0 D,0 E A,0 E,0 F,0 -,- F -,- E,0 F,0 D,0 Studio delle compatibilità B -- C BE BE D -- CF X E BE CF X BE BE CF X -- -- A B C D E F Classi di compatibilità: [AB], [AD], C, [DE], [DF], [EF] Scegliamo le classi massime che soddisfano copertura e chiusura: -- [A,B] => [C] => [D,E,F] => 00 01 11 Risolviamo le corse 00 01 11 10 00 00,0 00,0 01,- 11,0 01 -,- 11,- 01,1 11 00,0 11,0 11,0 00 01 11 10 00 00,0 00,0 01,- 10,0 11,- 01 -,- 11,- 01,1 11,- 11,0 11 10,0 11,0 11,0 11,0 10 00,0 -,- -,- 11,0 Calcoliamo le funzioni per i FF SR Dovendo retroazionare con dei FF SR è necessario sintetizzare le funzioni S ed R dei FF. Essendoci 2 variabili di stato, inserisco 2 FF. In presenza di un fronte di salita della variabile di stato si ha un “1” per S, al contrario nei fronti di discesa si ha un “1” per R. Y2 Y1 00 01 11 10 00 0 0 1 0 1 01 - 1 1 1 1 1 11 0 1 1 1 - 1 10 0 - - 1 00 01 11 10 00 0 0 0 1 01 - 1 0 11 1 1 10 0 - S = !X1Y2 + X2Y1 + X1!X2 R = !X1!Y2 + X1X2!Y1 S = X1X2 + !Y1Y2 + X2Y2 + X1Y1 R = !X1!X2 + !X1!Y2 + !X2!Y1!Y2 Z = !Y1Y2 Codice VHDL entity cassaforte_asincrona_SR is Port ( RN : in STD_LOGIC; C : in STD_LOGIC_VECTOR (1 downto 0); Z : out STD_LOGIC); end cassaforte_asincrona_SR; architecture Behavioral of cassaforte_asincrona_SR is -- creo i segnali per il FF SR 1 signal FF_SR_out_1 : std_logic := '0'; -- questo segnale corrisponde alla prima variabile di stato della cassaforte signal FF_SR_S_1 : std_logic := '0'; -- input S del FF signal FF_SR_R_1 : std_logic := '0'; -- input R del FF -- creo i segnali per il FF SR 2 signal FF_SR_out_2 : std_logic := '0'; -- questo segnale corrisponde alla prima variabile di stato della cassaforte signal FF_SR_S_2 : std_logic := '0'; -- input S del FF signal FF_SR_R_2 : std_logic := '0'; -- input R del FF begin -- i segnali di stato della cassaforte -- sono i segnali di uscita dei due FF Z <= (not FF_SR_out_1) and FF_SR_out_2; -- setto gli ingressi del primo FF FF_SR_S_1 <= ((not C(1)) and FF_SR_out_2) or (C(0) and FF_SR_out_1) or (C(1) and (not C(0))); FF_SR_R_1 <= ((not C(1)) and (not FF_SR_out_2)) or (C(1) and C(0) and (not FF_SR_out_1)); -- setto l'uscita del primo FF -- il reset forza l'uscita a 0 FF_SR_out_1 <= (FF_SR_S_1 or ((not FF_SR_R_1) and FF_SR_out_1)) and RN; -- setto gli ingressi del secondo FF FF_SR_S_2 <= (C(1) and C(0)) or ((not FF_SR_out_1) and FF_SR_out_2) or (C(0) and FF_SR_out_2) or (C(1) and FF_SR_out_1); FF_SR_R_2 <= ((not C(1)) and (not C(0))) or ((not c(1)) and (not FF_SR_out_2)) or ((not C(0)) and (not FF_SR_out_1) and (not FF_SR_out_2)); -- setto l'uscita del secondo FF -- il reset forza l'uscita a 0 FF_SR_out_2 <= (FF_SR_S_2 or ((not FF_SR_R_2) and FF_SR_out_2)) and RN; end Behavioral; Simulazione con testbench behavioural post-route Nella simulazione “post-route” si può apprezzare il ritardo della rete: il tempo di reset iniziale; il ritardo dell'uscita appena si presenta l'ultima occorrenza della combinazione corretta e quando la combinazione viene interrotta.