Circuiti sequenziali - I circuiti sequenziali sono caratterizzati dal fatto che, in un dato istante tn+1 le uscite dipendono dai livelli logici di ingresso nell'istante tn+1 ma anche dagli stati assunti dalle uscite nell'istante precedente tn. Ciò significa che il circuito mantiene memoria degli stati assunti precedentemente dagli ingressi e dalle uscite. Le strutture circuitali che realizzano la funzione di memoria sono varie ma si basano tutte su un collegamento di reazione (feedback) fra le uscite e gli ingressi. - Il più semplice circuito sequenziale è il latch, un dispositivo bistabile a porte NOR o NAND, che presenta due uscite complementari (Q e Q) permette di immagazzinare un bit di valore 1 o 0 e di mantenerlo memorizzato. Gli schemi e le relative tavole di verità sono qui riportati. - I latch con abilitazione, o latch dinamici, presentano la stessa funzionalità dei latch suddetti ma sono provvisti di un ingresso di abilitazione (EN) che abilita le funzioni di Set e di Reset; se EN è inattivo, il latch rimane in stato di memoria. - I latch di tipo D derivano sostanzialmente dal latch SR a porte nand, ma presentano, oltre all'ingresso di abilitazione, un solo ingresso dati D = S = R. Viene eliminato lo stato degli ingressi non utilizzato. - I flip-flop sono dispositivi bistabili provvisti di ingressi dati e di un ingresso di temporizzazione a cui viene applicato un segnale di clock. La commutazione delle uscite, benché determinata dallo stato degli ingressi, avviene in coincidenza di una ben determinata transizione del clock, che viene perciò chiamato anche segnale di trigger o di comando. I flip-flop possono essere classificati considerando le modalità con cui interviene il segnale di clock, oppure considerando la funzionalità globale. - I flip-flop edge-triggered sono attivati dal fronte di salita (positive edge-triggered) o dal fronte di discesa (negative edge- triggered) del segnale di clock. La transizione del clock genera infatti all'interno del flip-flop un breve impulso, che abilita lo stadio di ingresso a ricevere i dati e innesca la commutazione delle uscite; subito dopo l'impulso cessa disabilitando gli ingressi, cosicché le uscite, completata la commutazione, rimangono stabili. I flip-flop con comando sul fronte di transizione del clock sono decisamente i più utilizzati. - I flip-flop master-slave sono costituiti da due latch con ingresso di abilitazione posti in cascata, denominati rispettivamente master e slave. Al master è applicato un segnale di clock CK mentre allo slave e applicato il segnale complementato CK. Quando CK = 1, è abilitato il master, che memorizza i dati di ingresso; quando poi CK = 0, si ha CK = 1 e risulta abilitato lo slave, che, isolato dal master, determina la commutazione delle uscite. Poiché la memorizzazione di un dato presuppone che il clock compia una transizione 0 1 e una transizione 1 0 ossia che si completi un impulso, questi flip-flop vengono chiamati pulse triggered. Data la loro sensibilità ai disturbi e alle commutazioni degli ingressi quando il clock è a livello alto, i flip-flop master-slave trovano ormai scarse applicazioni. - I flip-flop presentano solitamente ingressi supplementari, detti ingressi diretti o asincroni, che consentono di azzerare (Reset, R, RD, CLR) o impostare al livello 1 (Set, S, SD, PRE) le uscite, indipendentemente dal controllo del clock e indipendentemente dallo stato degli ingressi dati. Nei dispositivi integrati, questi ingressi sono in genere attivi bassi. - Considerando la funzionalità globale si distinguono principalmente i flip-flop di tipo D e quelli di tipo JK. Si riportano qui il simbolo generico di un flip-flop di tipo D, con clock attivo sul fronte di salita, e quello di un flip-flop JK, attivato dal fronte di discesa del clock, con le relative tavole di verità. - La particolare configurazione con J = K = 1, che porta il flip-flop JK a commutare, invertendo lo stato delle uscite, ad ogni fronte attivo del clock, viene denominata toggle (T). - I registri sono costituiti da flip-flop (solitamente di tipo D) disposti in cascata e consentono di memorizzare temporaneamente un certo numero di bit. Particolarmente importanti sono i registri a scorrimento (shift register), che permettono lo scorrimento dei dati da un flip-flop all'altro in sincronismo con il segnale di clock. È così possibile: - introdurre i dati informa seriale (serial input), usando l'ingresso dati del primo flip-flop e facendoli scorrere lungo la catena di flip-flop; - introdurre i dati in forma parallela (parallel input), usando contemporaneamente gli ingressi dati di tutti i flip-flop; - prelevare i dati in forma seriale (serial output) usando l'uscita di uno dei flip-flop; - prelevare i dati in forma parallela (parallel output) usando le uscite di tutti i flipflop dopo che il registro è stato completamente caricato. In alcuni dispositivi è anche possibile ottenere lo scorrimento verso destra oppure verso sinistra, a seconda dello stato di un ingresso di controllo. Inoltre è possibile ottenere una ricircolazione dei bit che, per effetto dello scorrimento, andrebbero perduti. - I contatori sono costituiti da una serie di flip-flop collegati in modo che, ad ogni ciclo di un segnale di ingresso (clock), le uscite commutino da uno stato all'altro. Lo stato complessivo delle uscite (stato del contatore), rappresenta in codice binario il numero degli impulsi di clock applicati. Se, partendo da uno stato iniziale, il contatore ritorna allo stesso stato dopo k impulsi di clock, si dice che il contatore ha modulo k o base k. - I contatori asincroni o a propagazione del comando (ripple counter) sono costituiti da una serie di N flip flop in configurazione toggle disposti in cascata. Al primo flip-flop viene applicato il segnale di clock mentre gli ingressi CK degli altri vengono pilotati dalle uscite Q delle celle precedenti. Con N flip-flop si ottiene un contatore binario modulo k=2N. Si noti che sul primo flip-flop si presenta un segnale con frequenza fCK /2, sul secondo un segnale con frequenza fCK /4, ecc.; pertanto un contatore a N stadi funziona come divisore di frequenza per 2N. In molte applicazioni si utilizzano contatori con modulo 10 (contatori decadici o BCD) o modulo 6 o comunque con modulo diverso da una potenza di 2. Si possono in questi casi sfruttare gli ingressi diretti dei flip-flop per troncare la sequenza di conteggio al valore desiderato. Si ottengono contatori con modulo elevato, ad esempio 100, collegando in cascata più contatori, ad esempio 2 contatori a decade. - I contatori sincroni sono caratterizzati dal fatto che il segnale di clock viene applicato simultaneamente (in sincronismo) a tutti i flip-flop della serie. I flip-flop sono in genere di tipo JK o D. Per ottenere una data sequenza di conteggio occorre fare in modo che, in ciascuno stato della sequenza, gli ingressi dati dei flip-flop si trovino nelle condizioni adeguate per consentire il passaggio allo stato successivo. I contatori sincroni sono molto adatti a realizzare sequenze di conteggio particolari e moduli arbitrari; è infatti sufficiente progettare la rete combinatoria opportuna per condizionare gli ingressi dei flip-flop. È inoltre possibile definire sequenze di conteggio che dipendono da uno o più ingressi, ad esempio contatori avanti-indietro (up/down) con prestazioni decisamente superiori a quelle ottenibili con sistemi asincroni. - Il progetto dei contatori sincroni, che costituiscono un caso particolare di macchina a stati finiti (automa di Moore), si sviluppa con una procedura alquanto rigorosa, che può essere così riassunta. - Valutazione del numero N di flip-flop necessari per ottenere il contatore modulo k (k = 2N). - Definizione della sequenza di conteggio (tabella e/o diagramma degli stati). - Definizione della tabella delle transizioni che deve compiere ciascun flip-flop. - Scelta dei flip-flop da usare (JK o D) e quindi della tabella di eccitazione degli ingressi. - Definizione della rete di eccitazione ossia delle funzioni logiche che condizionino opportunamente gli ingressi dei flip-flop (mappe K per ciascun ingresso). - Verifica dell'inesistenza di situazioni di blocco (lockout), nel caso in cui il contatore si venga a trovare in uno stato indesiderato, ed eventuale determinazione di una rete correttrice. - I contatori ad anello costituiscono una categoria particolare di contatori sincroni e sono realizzati mediante registri a scorrimento. Per ottenere un contatore modulo k è necessario un registro con k flip-flop. Caricato inizialmente il registro impostando un solo bit ad 1 (100…0), ad ogni impulso di clock il bit di valore 1 si sposta lungo la catena di k flip-flop, realizzando così k diverse configurazioni o stati. Una struttura alternativa è costituita dal contatore Johnson, che presenta un collegamento fra l'uscita Q dell'ultimo flip-flop e l'ingresso D del primo. Esso richiede l'azzeramento iniziale del registro e consente di ottenere, con soli k flipflop, 2k stati.