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.
Scarica

cassaforte asincrona SR - Università degli Studi di Bologna