Flip-Flop

Sono gli elementi base per la costruzione di circuiti sequenziali complessi. Una caratteristica comune di tutti i circuiti sequenziali é quella di basarsi sull'uso di un circuito combinatorio di base, nel quale alcune uscite sono collegate ad alcuni ingressi dello stesso circuito combinatorio. Questo tipo di connessione ciclica tra uscite ed ingressi fa si che i flip-flop possano assumere valori di uscita diversi a parità di valori di ingresso esterno. Tale caratteristica viene usata per ottenere una funzione di "memorizzazione" di valori binari.

Tipo Set/Reset

É il tipo più semplice di circuito sequenziale. Una realizzazione in logica NOR é rappresentata in figura:

Non sapendo di aver a che fare con un circuito sequenziale, potremmo provare a studiare il comportamento del circuito illustrato in figura ricavandone la tavola di verità. Questo approccio é applicabile solo per tre delle quattro possibili configurazioni di valori in ingresso:

        S  R | Q
       ------+--
        0  0 | ?
        0  1 | 0
        1  0 | 1
        1  1 | 0
In particolare il valore di uscita corrispondente alla configurazione di ingresso S=R=0 non é determinabile a causa della presenza del ciclo chiuso tra ingressi e uscite delle funzioni.

L'analisi può procedere solo se supponiamo di conoscere già il valore dell'uscita Q quando entrambi gli ingressi assumono il valore 0. Se ipotizziamo Q=0, allora possiamo vedere che questo implica valore 1 in uscita alla funzione NOR in alto, e di conseguenza Q=0, confermando la nostra ipotesi. Ma anche se ipotizziamo Q=1 possiamo concludere che questo implica valore 0 in uscita alla funzione NOR in alto, e di conseguenza Q=1, confermando nuovamente la nostra ipotesi di partenza. Troviamo quindi un caso in cui la soluzione al problema di trovare il valore di uscita non é unica: entrambe le soluzioni Q=0 e Q=1 sono ammissibili con la configurazione di ingresso S=R=0.

Come possiamo arrivare a determinare il valore in uscita nel caso in cui entrambi i valori booleani sono soluzioni ammissibili? La risposta consiste nel considerare sequenze di configurazioni diverse, facendo variare nel tempo il valore delle variabili di ingresso.

Supponiamo di partire dalla configurazione S=1 ed R=0, e di cambiare poi il valore di S portandolo a 0. Siccome le nostre funzioni NOR saranno realizzate mediante dispositivi fisici, possiamo pensare che qualsiasi realizzazione del nostro flip-flop sarà sempre soggetta ad una certa "inerzia" dei valori di uscita rispetto a cambiamenti dei valori di ingresso. Osservando il comportamento del flip-flop con una scala dei tempi sufficientemente fine potremo sempre individuare un intervallo di tempo non nullo durante il quale i valori di uscita non cambiano nonostante una variazione dei valori di ingresso sia già avvenuta. Nel nostro caso specifico, riusciremo sempre ad individuare un intervallo di tempo finito durante il quale il valore dell'uscita Q continua ad essere 1 anche dopo che il valore della variabile di ingresso S é diventato 0; durante tale intervallo di tempo la funzione OR in alto continua a produrre il valore di uscita 0, che conferma il valore Q=1 in uscita alla funzione NOR in basso. Quindi, per una forma di continuità dei valori in uscita alle funzioni a seguito di variazioni dei valori in ingresso, possiamo affermare con certezza che Q deve continuare ad assumere sempre il valore 1 anche dopo che l'ingresso S ha assunto il valore 0.

In modo del tutto analogo possiamo arrivare alla conclusione che se la configurazione di ingresso S=R=0 é preceduta nel tempo dalla configurazione S=0 ed R=1 (che forza in uscita il valore Q=0 senza ambiguità), allora in uscita troveremo sicuramente il valore Q=0.

Possiamo quindi toccare con mano una proprietà che distingue nettamente i circuiti sequenziali dai circuiti combinatori: in un circuito combinatorio il valore delle uscite é univocamente determinato dai valori attuali delle variabili di ingresso (a meno di un piccolo ritardo dovuto all'inerzia di assestamento dei dispositivi fisici che realizzano le funzioni); in un circuito sequenziale, il valore delle uscite può dipendere, oltre che dai valori attuali, anche dalla sequenza dei valori precedenti delle variabili di ingresso.

Notiamo infine che la configurazione di ingresso S=R=1 é anomala dal punto di vista di uso del circuito sequenziale: la sequenza S=R=1 seguito da S=R=0 non determina univocamente il valore dell'uscita Q (in alcuni casi potrebbe generare delle oscillazioni periodiche tra i valori Q=0 e Q=1, con un periodo determinato dal tempo di assestamento dei dispositivi che realizzano le funzioni NOR). Per questo la configurazione di ingresso S=R=1 non viene normalmente utilizzata.

Tipo D (Latch)

Un flip-flop di tipo SR può essere usato, come abbiamo visto, per memorizzare un bit di informazione mediante l'uso di opportune sequenze di valori di ingresso. Tuttavia queste operazioni di memorizzazione risultano macchinose da gestire in termini di variazioni di variabili di ingresso. Vediamo quindi come sia possibile semplificare l'operazione di memorizzazione mediante l'interposizione di un semplice circuito combinatorio all'ingresso:

Questa variazione viene denominata flip-flop tipo D, oppure "latch".

L'introduzione delle due funzioni AND e della funzione NOT impedisce il manifestarsi della configurazione proibita S=R=1 per il flip-flop. L'ingresso Strobe determina l'operazione di memorizzazione: quando Strobe=0 gli ingressi S e R del flip-flop assumono il valore 0, determinando il mantenimento del valore di uscita Q precedentemente memorizzato; quando Strobe=1, gli ingressi del flip-flop assumo i valori S=D e R=¬D, comportando quindi la memorizzazione del valore in ingresso D sull'uscita Q. Notare quindi che l'uscita Q può cambiare di valore solo quando l'ingresso Strobe assume il valore 1; l'uscita invece rimane costante quando Strobe=0, indipendentemente da ogni possibile variazione del valore di ingresso D.

Notare che la memorizzazione di un valore nel dispositivo richiede che quel valore venga mantenuto fisso sull'ingresso D per tutto il tempo necessario a passare da Strobe=0 (condizione di riposo) a Strobe=1 (memorizzazione attivata), e poi di nuovo a Strobe=0 (mantenimento del valore memorizzato). Questo modo di funzionamento può essere posto in analogia con lo scatto di una fotografia di tipo "ritratto", dove il soggetto deve rimanere fermo in posa per tutta la durata dell'operazione. Lo scatto di una fotografia "istantanea" di un soggetto in movimento richiede invece l'uso di un otturatore con tempo di scatto molto piccolo rispetto alla velocità di movimento del soggetto.