P9 - REGISTRI, CONTATORI, MEMORIE A SEMICONDUTTORE P9
Transcript
P9 - REGISTRI, CONTATORI, MEMORIE A SEMICONDUTTORE P9
P9 - REGISTRI, CONTATORI, MEMORIE A SEMICONDUTTORE P9.1 – Nei registri a scorrimento l’operazione di lettura provoca la perdita dei dati memorizzati. Proporre una soluzione circuitale che consenta di evitare questo inconveniente. Soluzione Per non perdere i dati memorizzati, si può dotare lo shift register di un collegamento di retroazione, che permette di reinserire i dati in ingresso man mano che vengono letti. Ciò può essere ottenuto mediante un multiplexer a due ingressi (DIN , DOUT ), comandato da un selettore di lettura/scrittura R / W (Read/ Write ), secondo la seguente logica: se R / W = 1 è attivo l’ingresso DOUT e i dati letti sull’uscita (un bit ad ogni colpo di clock) vengono reinseriti all’ingresso del registro (operazione di lettura “non distruttiva”); se invece R / W = 0 vengono introdotti nuovi dati dall’ingresso attivo DIN e quelli letti in uscita si perdono (operazione di scrittura). Lo schema a blocchi del registro risulta pertanto del tipo seguente, con riferimento ad un registro SISO (Serial Input – Serial Output) per parole di lunghezza n=4 bit (ovvero di un nibble). MUX I0 D Q D Q D Q D Q Dout U Din I1 S CK CK CK CK R/W CK Lo schema logico del blocco relativo al MUX è il seguente (cfr. problema P7.5). Dout U Din R/W A seconda del livello logico di R / W viene attivata una o l’altra porta AND, consentendo il passaggio sull’uscita Y di DOUT o di DIN. Il registro SISO considerato viene detto anche registro FIFO (First In – First Out), in quanto il primo dato caricato è anche il primo dato che viene reso disponibile all’uscita, dopo n colpi di clock. E’ possibile realizzare anche registri di tipo LIFO (Last In – First Out), inserendo all’ingresso dei flip-flop un multiplexer a due ingressi, controllato da un segnale LEFT / RIGHT che consente di invertire il verso di scorrimento dei dati (registri bidirezionali). ____________________________________________________________ P9.2 – Realizzare un sommatore seriale capace di addizionare, mediante un full-adder a 1 bit, due numeri binari di 4 bit ciascuno, memorizzati su due registri PISO, uno dei quali con possibilità di caricamento anche seriale. Soluzione Il circuito richiesto può essere realizzato secondo lo schema a blocchi seguente. A3 A 2 A1 A0 Registro R1 In Out CK Ai Bi B3 B2 B1 B0 Registro R2 In CK Out Ai Bi Ci ∑ Si Co Si D Q CK CK L’operazione di addizione dei due numeri binari si svolge sommando a due a due, in successivi impulsi di clock, i bit degli addendi di uguale peso, aggiungendo l’eventuale riporto proveniente dalla somma precedente. A ciò provvede il full-adder, che riceve i bit da sommare dalle uscite dei due registri R1 e R2 (sui quali sono stati caricati in parallelo i due addendi) e del flip-flop D (sul quale è memorizzato il riporto della somma precedente). Al primo colpo di clock il full-adder riceve la coppia di bit A0, B0 di minor peso, e presenta il risultato della somma all’ingresso seriale del registro R1, mentre il flip-flop (preventivamente resettato) memorizza lo stato del riporto. L’operazione prosegue interessando coppie di bit di peso crescente, e si completa al quarto colpo di clock con la coppia di bit A3, B3 di maggior peso. Alla fine, il risultato della somma dei due numeri binari si trova memorizzato sul registro R1 (4 bit, a partire dal meno significativo) e sul flip-flop D (1 bit, il più significativo). ___________________________________________________________ P9.3 – Si vuole realizzare un contatore asincrono modulo 4 utilizzando l’integrato Dual JK Flip-flop 7473, avente il pin out appresso indicato. Tracciare lo schema del contatore e indicare poi come si può far sì che il contatore funzioni all’indietro (contatore decrescente, o down counter). PIN No SIMBOLO FUNZIONE 14; 7 3; 10 12; 9 13; 8 1; 5 2; 6 4 11 J0; J1 K0; K1 Q0; Q1 Ingressi J,K Uscite Q, Q Q 0 Q1 CK0; CK1 CLR0; CLR1 GND Vcc Ingressi clock Ingressi clear Massa (0 V) Tensione di alimentazione Soluzione a) Contatore crescente Avendosi m=22=4, i due flip-flop contenuti nell’integrato assegnato sono in numero sufficiente per realizzare un contatore modulo 4. Lo schema dei collegamenti, con la numerazione dei pin, è il seguente. 1 5V 11 14 CK 1 3 J0 Q0 K0 7 5 CK Q0 CLR0 4 CLR 12 GND 13 10 J1 Q1 9 CK K1 Q1 CLR1 8 6 2 Q0 (LSB) Q1 (MSB) Gli ingressi J, K dei due FF-JK-NET sono collegati insieme e tenuti a livello “1” per mantenere i flip-flop in modalità TOGGLE. Il primo flip-flop ha come ingresso di clock il treno di impulsi da conteggiare. Essendo in modalità toggle, la sua uscita commuta ad ogni periodo di clock, Tck , in corrispondenza del fronte di salita dei singoli impulsi. Il segnale di uscita Q0 ha periodo 2Tck e costituisce il segnale di clock per il secondo flip-flop, il quale pertanto commuta ad ogni periodo di Q0. Il segnale di uscita Q1 del secondo flip-flop ha quindi periodo 4Tck . Il diagramma temporale ideale risulta pertanto del tipo seguente. CK 1 0 t Q0 1 0 t Q1 1 0 t Dal diagramma temporale si desume la seguente tabella di funzionamento del contatore in esame. CK ↓ (Q1 Q0 ) n 0 0 (Q1 Q0) n+1 0 1 ↓ 0 1 1 0 ↓ 1 0 1 1 ↓ 1 1 0 0 Si vede chiaramente che il contatore fornisce in uscita il numero degli impulsi di clock ricevuti, espresso in binario : (01)2 = 1 al primo colpo di clock; (10)2 = 2 al secondo colpo; (11)2 = 3 al terzo colpo. Il quarto colpo di clock azzera le uscite, predisponendo il contatore per un nuovo conteggio. b) Contatore decrescente Per ottenere il conteggio all’indietro è sufficiente comandare l’ingresso CK del secondo flip-flop con l’uscita complementata Q 0 (anziché con l’uscita diretta Q 0 ) del primo flip-flop. Lo schema del circuito, il diagramma temporale e la tabella di funzionamento si modificano nel modo appresso indicato. 1 5V 11 14 1 CK 3 J0 Q0 7 5 CK K0 Q0 CLR0 4 GND CLR 12 13 10 J1 9 Q1 CK K1 8 Q1 CLR1 6 2 Q0 (LSB) Q1 (MSB) CK 1 0 t Q0 1 0 t Q0 1 0 t Q1 1 0 t CK (Q1 Q0 ) n (Q1 Q0) n+1 1 1 ↓ 0 0 ↓ 1 1 1 0 ↓ 1 0 0 1 ↓ 0 1 0 0 La sequenza del conteggio risulta: (11)2 = 3; (10)2 = 2; (01)2 = 1; (00)2 = 0. ________________________________________________________ P9.4 – Tracciare lo schema di un contatore asincrono modulo 4, dotato di ingresso di controllo U / D per il funzionamento crescente/decrescente. Soluzione Per ottenere il contatore up/down richiesto, è sufficiente inserire, tra i due flip-flop in cascata di un normale contatore asincrono, un multiplexer a due ingressi che consente di inviare all’ingresso CK1 del secondo flip-flop l’uscita 0 del primo flip-flop (up-counter) o l’uscita negata Q 0 (downcounter). Il simbolo funzionale, la tabella di funzionamento e lo schema logico di tale multiplexer sono i seguenti. MUX Q0 U/D CK1 I0 U Q0 I1 CK1 0 Q0 1 Q0 S U/D Q0 U/D CK1 Q0 Utilizzando due flip-flop di tipo T (derivati da due FF-JK-NET collegando insieme gli ingressi JK), lo schema del contatore richiesto risulta del tipo seguente. 1 CK T0 Q0 T1 Q1 CK Q0 CK Q1 CLR0 CLR1 U/D MR Q0 (LSB) Q1 (MSB) Dopo aver azzerato il contatore agendo sul comando MR (master reset), si può predisporre il contatore per il conteggio crescente o decrescente, ponendo rispettivamente U / D = 0 o U / D = 1 . _______________________________________________________ P9.5 – Tracciare il diagramma temporale ideale di un contatore asincrono modulo 8, realizzato impiegando flip-flop di tipo JK-PET. Soluzione Il contatore proposto comprende 3 flip-flop (m=23 = 8), collegati in cascata secondo lo schema seguente. 1 J CK J Q J Q Q CK CK CK K K K CLR CLR CLR MR Q0 Q1 Q2 Gli ingressi J, K dei flip-flop sono collegati insieme e posti a livello alto, per realizzare la funzione toggle (commutazione ad ogni colpo di clock). Essendo di tipo PET, i flip.flop hanno gli ingressi di clock sensibili ai fonti di salita del segnale applicato. Il diagramma temporale delle uscite del contatore risulta pertanto del tipo seguente. CK 1 0 t Q0 1 0 t Q1 1 0 t Q2 1 0 t Dal diagramma temporale, valutando le uscite dopo ogni colpo di clock, si desume la seguante tabella di funzionamento del contatore. CK ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (Q2 Q1 Q0)n 0 0 0 1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 (Q2 Q1 Q0)n+1 1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 Come si vede, si tratta di un contatore decrescente (down counter), con le uscite che assumono il valore (111)2 = 7 dopo il primo fronte positivo di clock e conservano tale valore fino al secondo fronte, in corrispondenza del quale il valore delle uscite scende a (110)2 = 6, e così via, fino a giungere all’ottavo colpo di clock che provoca l’azzeramento del contatore. __________________________________________________________ P9.6 – Disegnare lo schema di un contatore asincrono modulo 10. Soluzione Il contatore richiesto, denominato contatore decadico (decade counter), avendo un modulo non esprimibile come potenza di 2, viene ricavato da un contatore a 4 flip-flop modulo 16 (m = 24 = 16), eliminando dal conteggio le 6 combinazioni eccedenti. Precisamente, alle cifre decimali da 0 a 9 vengono fatti corrispondere i valori binari formati dalle uscite dei 4 flip-flop (codifica BCD, Binary Coded Decimal), mentre le 6 combinazioni rimanenti vengono soppresse con un comando automatico di azzeramento al decimo impulso di clock. Ciò può essere ottenuto collegando alle uscite del contatore un circuito comprendente una porta NAND in modo tale che, quando agli ingressi del circuito si presenta la combinazione (1010)2 = 10, la sua uscita aziona il comando MR di azzeramento del contatore, attivo a livello basso. Più semplicemente, nel caso in esame, si può impiegare una porta a due soli ingressi, sfruttando il fatto che, nel conteggio crescente a 4 bit, il 2° e il 4° bit (a partire dal bit meno significativo) assumono per la prima volta contemporaneamente il valore 1 proprio in corrispondenza della combinazione 1010 suddetta. Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 Decim. 0 1 2 3 4 5 6 7 8 9 10 Utilizzando 4 flip-flop di tipo T (toggle flip-flop), lo schema del circuito risulta del tipo seguente. 1 T CK T Q CK T Q CK CLR T Q CK CK CLR CLR Q CLR MR Q0 Q1 Q2 Q3 I contatori decadici sono usati spesso come divisori di frequenza per 10. Collegando due o più contatori decadici in cascata, si possono ottenere divisori per 100, per 1000 e così via. ________________________________________________________ P9.7 – Si vuole realizzare un contatore asincrono modulo 5 ed utilizzarlo in un contatore decadico. Soluzione Si parte da un contatore modulo 8, realizzato con 3 flip-flop in cascata. Supponendo un controllo di clear MR attivo a livello alto, si aggiunge una porta AND con gli ingressi sulle uscite del primo e del terzo flip-flop e con uscita sul segnale di azzeramento, in modo da chiudere il conteggio in corrispondenza del valore (101)2 = 5 . Se al contatore modulo 5 così ottenuto si antepone in cascata un contatore modulo 2, realizzato con un semplice flip-flop, si ottiene il contatore decadico richiesto (modulo 2 × 5 = 10 ). Lo schema del circuito risulta del tipo seguente. 1 T CK T Q CK T Q CK CLR T Q CK CK CLR CLR Q CLR MR Q0 (LSB) Q1 Q2 Q3 (MSB) Le uscite Q0 e Q3 forniscono rispettivamente la cifra meno significativa del conteggio (LSB. Least Significant Bit) e la più significativa (MSB, Most Significant Bit). La tabella di funzionamento del contatore richiesto risulta la seguente. CK ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ (Q3 Q2 Q1 Q0)n 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 (Q3 Q2 Q1 Q0)n+1 Decim. 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 0 0 0 0 0 __________________________________________________________ P9.8 – Tracciare lo schema di un contatore sincrono modulo 8. Soluzione I contatori sincroni possono essere realizzati utilizzando dei flip-flop di tipo T, come per i contatori asincroni, tenendo presente, però, che l’ingresso di clock di ciascun FF è impegnato dal segnale di sincronismo che viene applicato contemporaneamente a tutti i flip-flop. Nel nostro caso sono necessari 3 flip-flop, essendo m=23=8. Per individuare un possibile schema dei collegamenti, va tenuta presente la tabella di funzionamento del contatore considerato. CK (Q0 Q1 Q2)n 0 0 0 ↓ 1 0 0 ↓ 0 1 0 ↓ 1 1 0 ↓ 0 0 1 ↓ 1 0 1 ↓ 0 1 1 ↓ 1 1 1 ↓ (Q0 Q1 Q2)n+1 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 1 1 0 0 0 Si nota che l’uscita Q0 deve commutare ad ogni colpo di clock e pertanto il suo ingresso T deve essere tenuto a livello 1 (modalità toggle), come avviene per i contatori asincroni. Si nota altresì che l’uscita Q1 commuta ogni volta che sull’uscita Q0 è presente il valore 1. Possiamo allora collegare l’ingresso T del secondo flip-flop all’uscita Q0, in modo che il secondo flip-flop sia attivo solo quando l’uscita Q0 è a livello logico alto. Il terzo flip-flop, infine, commuta soltanto quando nello stato precedente entrambe le uscite Q0 e Q1 hanno valore 1; per soddisfare questa condizione si possono quindi collegare le uscite Q0 e Q1 all’ingresso T del terzo flip-flop attraverso una porta AND, come indicato nello schema seguente. 1 T T Q CK T Q CK CLR Q CK CLR CLR CK MR Q0 (LSB) Q1 Q2 (MSB) Possiamo generalizzare il risultato ottenuto, affermando che nei contatori sincroni l’ingresso di clock è comune a tutti i flip-flop presenti nel circuito, e che l’ingresso T del primo flip-flop è fissato a livello 1, come nei contatori asincroni, mentre l’ingresso T dell’ennesimo flip-flop è ottenuto dall’AND delle uscite degli n-1 flip-flop precedenti, come sintetizzato nella seguente tabella. FF 1 2 3 4 … Ingresso T 1 Q0 Q0٠Q1 Q0٠Q1٠Q2 ……………... ___________________________________________________________- P9.9 – Tracciare lo schema di un contatore sincrono modulo 16, realizzato utilizzando dei FF-JK-NET. Indicare poi come si modifica lo schema se, per il pilotaggio dei flip-flop in cascata, si vogliono impiegare soltanto porte AND a 2 ingressi. Calcolare in entrambi i casi la massima frequenza di clock ammissibile, assumendo per i flip-flop e per le porte AND un tempo di propagazione rispettivamente pari a: tFF = 14 ns; tAND = 6 ns Soluzione Il contatore può essere realizzato con 4 flip-flop JK ( m= 24 = 16 ), il primo dei quali con gli ingressi J, K mantenuti a livello alto, come nei contatori asincroni. I successivi stadi sono pilotati rispettivamente: dall’uscita Q0, dall’AND delle uscite Q0 e Q1, e dall’AND delle uscite Q0, Q1e Q2, come indicato nel seguente schema. 1 J J Q J Q J Q Q CK CK CK CK K K K K CLR CLR CLR CLR CK MR Q0 (LSB) Q1 Q2 Q3 (MSB) I contatori sincroni di questo tipo sono detti a comando di propagazione parallelo, perché hanno un tempo di propagazione complessivo dato semplicemente dalla somma dei tempi di propagazione di un FF e di una porta AND. La massima frequenza di clock risulta pertanto (ritenendo trascurabile il tempo di predisposizione, o setup time, dei FF, cioè l’intervallo di tempo in cui i livelli in ingresso devono rimanere stabili prima che intervenga il fronte attivo di clock): f CK (max) = t FF 1 1 = = 50 MHz + t AND (14 + 6) ⋅ 10 −9 Questo valore è indipendente dal numero di stadi del contatore, tuttavia, per valori elevati del modulo m del contatore, risulta elevato anche il numero degli ingressi delle porte logiche di pilotaggio, specie di quella relativa all’ultimo stadio. Si può evitare questo inconveniente adottando il comando di propagazione serie, il quale prevede l’impiego di porte logiche con due soli ingressi, come indicato nello schema seguente. 1 J J Q J Q J Q Q CK CK CK CK K K K K CLR CLR CLR CLR CK MR Q0 (LSB) Q1 Q2 Q3 (MSB) La logica di funzionamento è la stessa dello schema precedente, ma è diverso il tempo di propagazione. Precisamente, per un contatore a n stadi, il tempo di propagazione complessivo risulta: ovvero, nel nostro caso: t CK = (n − 2)t FF + t AND t CK [ns ] = (4 − 2) × 14 + 6 = 34 ns e quindi la massima frequenza di clock ammissibile risulta (trascurando il setup time dei flip-flop): f CK (max) = 1 = 29,4 MHz 34 ⋅ 10 −9 sensibilmente minore di quella relativa al contatore con comando di propagazione parallelo. ________________________________________________________ P9.10 – Disegnare lo schema di un contatore ad anello Johnson (o twisted ring counter) modulo 8 e tracciare il relativo diagramma degli stati di uscita, a partire dallo stato di RESET del contatore. Descrivere poi la situazione che si crea se il contatore assume il seguente stato delle uscite: Q0 Q1 Q2 Q3 = 0 0 1 0 Soluzione Lo schema corrisponde a quello di un registro a scorrimento modulo 16 (4 flip-flop D collegati in cascata, tutti sincronizzati dal medesimo segnale di clock), con l’uscita negata dell’ultimo stadio collegata all’ingresso del primo. D D Q CK D Q CK D Q CK Q CK Q CK Q0 Q1 Q Q3 Il diagramma degli stati di uscita, a partire dallo stato di RESET, è il seguente: 0000 → 1000 → 1100 → 1110 ↑ ↓ 0001 ← 0011 ← 0111 ← 1111 Se si verifica lo stato di uscita Q0 Q1 Q2 Q3 = 0 0 1 0, estraneo al ciclo del RESET, il contatore entra in un nuovo ciclo, formato dagli 8 stati non compresi nel ciclo del RESET: 0010 → 1001 → 0100 → 1010 ↑ ↓ 0101 ← 1011 ← 0110 ← 1101 Con una operazione di reset, si può riportare il contatore al ciclo originario. ________________________________________________________ P9.11 – In figura è riportato il simbolo sintetico di un modulo di memoria da 16 × 4 bit, cioè di una memoria avente capacità C=64 bit organizzata in L=16 locazioni con parole di n=4 bit. 4 A0÷A3 R/W DQ0÷DQ3 4 CS OE Utilizzando integrati di tale tipo, si realizzi un circuito che permetta di ottenere una memoria 16 × 8 , cioè una memoria di capacità doppia avente lo stesso numero di locazioni, ma con parole di 1 byte (8 bit) anziché di un nibble (4 bit). Soluzione La memoria assegnata ha il bus d’ingresso di tipo bidirezionale, cioè utilizzato per i dati sia di ingresso (scrittura) che di uscita (lettura). Oltre alle linee di indirizzo A0 ÷ A3 e all’ingresso di controllo lettura/scrittura R / W (Read/Write), sono presenti gli ingressi di controllo CS (Chip Select) e OE (Out Enable): il primo è di abilitazione generale del dispositivo; il secondo permette di disabilitare le uscite anche quando R / W = 1 (dispositivo predisposto per un’operazione di lettura). Il raddoppio della capacità di memoria attraverso una espansione della parola da 4 a 8 bit può essere ottenuto mediante due integrati del tipo considerato, semplicemente collegando in parallelo le linee di indirizzo e quelle di controllo, e affiancando le linee dati in modo da costituire un bus della dimensione richiesta. La figura seguente mostra lo schema dei collegamenti della memoria 16 × 8 così ottenuta. 4 A0÷A3 R/W DQ0÷DQ3 4 DQ0÷DQ3 CS OE 8 A0÷A3 4 4 DQ0÷DQ7 A0÷A3 R/W R/W CS CS OE OE DQ0÷DQ3 4 DQ4÷DQ7 ___________________________________________________________ P9.12 – Una memoria EPROM deve essere programmata per eseguire la moltiplicazione tra due numeri binari a 2 bit. Determinare le caratteristiche di base (capacità e organizzazione) della EPROM e indicare le modalità di impiego. Soluzione I 4 bit relativi ai due numeri binari da moltiplicare vengono impiegati come bit di indirizzo della EPROM, la quale deve avere pertanto almeno 4 linee di indirizzo e quindi L = 24 = 16 locazioni di memoria. La lunghezza di parola deve essere almeno n = 4 bit, perché tale è la massima lunghezza del numero binario risultante dalla moltiplicazione di due numeri a 2 bit (si ha infatti: (11) 2 × (11) 2 = (1001) 2 ). Occorre quindi una EPROM con organizzazione 16 × 4 , avente pertanto una capacità complessiva C = 64 bit. I dati da memorizzare nelle 16 celle sono quelli indicati nella seguente tabella, compilata in base alle regole della moltiplicazione binaria. Uscite Ingressi N1 N2 A3 A2 A1 A0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Q3 Q2 Q1 Q0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 1 Una volta programmata la EPROM, è sufficiente mantenerla sempre nella condizione di lettura, attivando il controllo di Chip Select ( CS = 0 ) e ponendo l’ingresso Read/Write a livello alto ( R / W = 1 ), per realizzare il circuito moltiplicatore richiesto, come indicato sinteticamente nello schema seguente. Numeri da moltiplicare 4 A0÷A3 Vcc R/W DQ0÷DQ3 4 Prodotto CS OE GND _______________________________________________________ P9.13 – Tracciare lo schema di una memoria FIFO da 32 bit, con organizzazione 8× 24 , dotata di comando di ricircolazione per la lettura non distruttiva dei dati memorizzati. Soluzione In generale, per realizzare una memoria FIFO (First IN – First Out) del tipo L × n (cioè con L locazioni di memoria e con lunghezza di parola di n bit), si collegano in parallelo n memorie FIFO ad L celle di memoria da 1 bit. Nel nostro caso, quindi, dobbiamo collegare in parallelo 4 memorie FIFO aventi ciascuna 8 celle da 1 bit. Ciascuna memoria FIFO 8 × 1 si ottiene utilizzando un registro a scorrimento del tipo SISO a 8 bit (costituito da 8 flip-flop D o JK collegati in cascata), associando ad esso un multiplexer a due ingressi per la ricircolazione dei dati, secondo il seguente schema. MUX FF1 I0 D U Din I1 S FF2 Q CK CLR D FF7 Q ... CK CLR D Q Dout CK CLR R/W CK MR ... ... Se R / W = 1 , i dati in uscita vengono reinseriti serialmente all’ingresso dello shift register; se invece R / W = 0 , vengono introdotti serialmente nuovi dati dall’ingresso DIN e quelli in uscita si perdono. Utilizzando 4 di questi moduli di memoria FIFO 8 × 1 , si ottiene il seguente schema della memoria FIFO 8× 4 richiesta. Din 0 Din Dout Dout R/W CK MR Din 1 Din Dout Dout R/W CK MR Din 2 Din Dout Dout R/W CK MR Din 3 Din R/W R/W CK CK Dout Dout MR MR ___________________________________________________________