La logica combinatoria dipende dai valori in ingresso attuali , mentre la logica sequenziale riesce a “ricordarsi” degli ingressi precedenti . Inoltre la logica sequenziale è costituita da stati che riassumono il passato per determinare lo stato futuro, questi stati sono memorizzati in delle variabili di stato. L’elemento fondamentale della memoria è il circuito bistabile , ovvero un circuito che riesce a memorizzare uno stato ( 0 o 1 ).
Latch-SR
Il latch-SR come mostrato qui :
composto da due porte NOR. Il suo stato può essere controllato dagli input R e S che settano (Set) o resettano (Reset) l’uscita Q. Ora per capire come funziona sta roba , vediamo la sua tabella verità :
dove siccome nel caso S = 0 e R = 0 , non sappiamo cosa può succedere , infatti avremo due sotto-casi nel caso IV , allora si suppone che quando sono S = 0 e R = 0 , e . Quindi prima di arrivare al caso IV , il circuito tiene memoria di un valore precedente di . In questo modo abbiamo creato una memoria a 1 bit , perché il circuito riesce a ricordare a quanto era settato , quando S e R tornano ad essere 0.
Notiamo quindi che quando allora viene settato a , e quando allora viene resettato a . Quando invece , riesce a ricordare il suo valore precedente .
L’unico problema sta quando , ovvero vuol dire che si deve settare e poi resettare , questo è poco utile e è anche un problema perché se in un determinato istante passiamo e poi passiamo , in pratica il circuito di dimentica di quello che abbiamo dato in precedenza e non funziona come dovrebbe , quindi dobbiamo evitare di dare la possibilità che venga passato , una soluzione a questo problema è il LATCH-D .
Latch-D
questo circuito ha un ingresso dati ( D ) che controlla il prossimo stato , e un ingresso di clock ( CLK ) che controlla invece il momento del cambio di stato .
dalla tabella di verità si nota che grazie al CLK ( clock ) è possibile controllare quando i dati devono scorrere attraverso il latch , infatti quando il latch è detto trasparente ( siccome il valore di D passa a Q ) , mentre quando il latch è detto opaco ( siccome i dati di D vengono bloccati e non passano a Q ) e quindi Q mantiene il suo valore precedente.
Il simbolo del latch-D è questo :
Il problema ora è che il latch-D aggiorna continuatamente il suo stato mentre , infatti se rimane per un lasso di tempo , in questo lasso di tempo , ogni variazione di D viene subito passata a Q. È utile pero aggiornare lo stato solo in momento preciso , questo viene risolto grazie al FlipFlop-D .
FlipFlop-D
Un FlipFlop-D può essere costruito mettendo in serie 2 latch-D , controllati da 2 segnali di clock complementari :
Vediamo i casi :
- CLK = 0 ⇒ il latch master è trasparente ( siccome gli arriva 1 ) e quindi fa passare il valore di D a N1 , ma siccome il latch slave è opaco ignora il valore di N1 e non fa passare niente .
- CLK = 1 ⇒ il latch slave fa passare il valore di N1 a Q , ma N1 resta isolato da D , siccome il latch master sta volta è opaco .
Quindi nel fronte di salita ( passaggio da 0 a 1 ) del clock , qualunque sia il valore di D subito prima questo fronte passera a Q nel momento di tale fronte e in tutti gli altri casi Q mantiene il suo valore precedente ( siccome ci sarà sempre un latch opaco che blocca il passaggio da D a Q ) .
Important
Un D-FlipFlop copia D su Q solo nel fronte di salita del clock e ricorda il suo stato negli altri casi . Dove D rappresenta il suo stato futuro ( ossia quello che diventerà il suo stato attuale ( Q ) quando CLK passerà da 0 a 1 ) , mentre Q rappresenta il suo stato attuale .
Il simbolo di un D-FlipFlop è :
Registri
Un registro a bit è un banco di FlipFlop ( di tipo D ) che condividono un unico clock CLK , in modo che tutti i bit vengano aggiornati allo stesso tempo ( clock sincronizzati ) : ( es. di registro a 4 bit )
FlipFlop con enabling e reset
Ad un FlipFlop possono essere aggiungi 2 input aggiuntivi : enabling e reset
Enabling
Si aggiunge quindi un input EN , dove se EN = 1 allora il FlipFlop deve comportarsi normalmente , mentre quando EN = 0 il FlipFlop non deve fare niente ( ovvero deve ignorare il clock e mantiene il proprio stato ) . Ci sono due possibili implementazioni :
-
Con MUX :
-
Senza MUX :
Resetting
I FlipFlop possono essere resettati in due modi :
-
Sincrono : il reset viene fatto solo nel fronte di salita di CLK :
dove infatti quando il RESET è 0 la porta AND passa il valore 0 a D , mentre quando è 1 passa il valore D a D, quindi questo RESET funziona al contrario , ovvero quando RESET è 0 il FlipFlop viene resettato. ( ma con l’aggiunta di un NOT si ottiene qualcosa di non contrario )
-
Asincrono : richiede di fare una modifica all’interno del FlipFlop.