I registri sono delle batterie di flip-flop (di norma si tratta di flip-flop D) con le quali è possibile memorizzare valori binari o costruire dei contatori di vario tipo. Di norma i registri si realizzano con flip-flop sincroni che recepiscono il valore in ingresso al momento della variazione dell'impulso di clock (edge triggered).
Negli esempi delle sezioni successive si utilizzano flip-flop D, secondo la realizzazione classica, oppure flip-flop derivati da questo tipo. Pertanto, si tratta di flip-flop a margine positivo (pilotati dalla variazione positiva dell'impulso di clock).
Nelle figure che appaiono nelle sezioni successive, i flip-flop possono avere l'ingresso di clock indicato con la sigla Clk (senza il triangolo che fa riferimento al margine), tuttavia si tratta sempre di flip-flop pilotati dalla variazione positiva dell'ingresso di clock.
Il registro più semplice è quello che è in grado di raccogliere un valore composto da più bit e di conservarlo fino a quando non vengono abilitati nuovamente gli ingressi. Nella figura successiva, il valore contenuto nel registro può essere letto dalle uscite da Q0 a Q3 e può essere immesso attraverso gli ingressi da I0 a I3. Il valore proveniente dagli ingressi da I0 a I3, viene raccolto solo quando è attivo l'ingresso Load, altrimenti i flip-flop, a ogni impulso di clock, ricopiano nel proprio ingresso lo stesso valore che mostrano in uscita.
Se si analizza lo schema della figura appena apparsa, si vede che, quando il registro deve accettare il valore in ingresso, è come se il circuito si riducesse all'immagine successiva:
Quando invece si tratta di mantenere il valore memorizzato, è come se il circuito si riducesse allo schema della figura successiva:
Deve essere chiaro che gli ingressi D di questo tipo di registro sono controllati da un multiplatore, il quale, a ogni impulso di clock, sceglie se recepire un valore nuovo o se rinnovare quello già memorizzato in precedenza.
|
Una caratteristica importante di un registro comune è quella di potersi aggiornare a partire dal dato che esso stesso contiene, nell'istante in cui viene recepita la variazione dell'ingresso di clock che consente tale aggiornamento. Si osservi l'esempio della figura successiva:
All'uscita del registro, si trova un circuito combinatorio non meglio precisato, il quale trasforma quanto proviene dal registro, fornendo poi il valore trasformato in ingresso al registro stesso: quando l'ingresso Load è attivo e si manifesta la variazione positiva del segnale di clock, il registro recepisce il nuovo valore trasformato. In pratica, si ottiene quello che in programmazione si rappresenta solitamente come x=f(x), ovvero l'aggiornamento di una variabile con il risultato di un'espressione che la contiene.
La figura successiva mostra un registro che recepisce un solo valore logico, nell'ingresso In, quando si presenta la variazione positiva del segnale di clock. In quel momento, il primo flip-flop a destra aggiorna il proprio valore con il dato ottenuto dall'ingresso In, mentre il secondo flip-flop si aggiorna ottenendo il valore che il primo flip-flop aveva precedentemente, e così di seguito fino all'ultimo.
Un registro a scorrimento, come quello della figura precedente, può essere esteso in modo da consentire il caricamento di un valore. In tal caso si aggiunge un ingresso (Load), con il quale si seleziona la funzione svolta dal registro nel momento della variazione (positiva) del segnale di clock: caricamento o scorrimento.
I contatori sono registri che incrementano o decrementano il proprio valore binario a ogni impulso di clock. Sono asincroni quei contatori i cui flip-flop non sono controllati tutti dallo stesso segnale di clock. Il contatore più semplice è costituito da flip-flop T, in quanto questo tipo di flip-flop, quando l'ingresso T è attivo, inverte il valore delle uscite ogni volta che riceve la variazione del segnale di clock che serve a farlo scattare. Le figure mostrano l'uso dei flip-flop T in cascata, nel senso che l'ingresso di clock del successivo è pilotato dall'uscita del precedente: per questo si tratta di contatori asincroni.
Il difetto dei contatori asincroni sta nel fatto che le oscillazioni delle uscite successive sono leggermente in ritardo rispetto a quelle delle uscite antecedenti. Questo problema si accentua al crescere del rango del registro, perché i ritardi di accumulano a ogni passaggio, da un flip-flop al successivo.
I contatori sincroni possono essere costruiti con flip-flop T, ma in modo differente da quanto descritto nella sezione precedente; tuttavia, quando si modificano questi contatori per consentire l'acquisizione di un valore binario di partenza, è necessaria una costruzione basata su flip-flop D.
Il contatore sincrono richiede che l'ingresso T del primo flip-flop sia sempre attivo. Tuttavia, se si controlla tale ingresso è possibile sospendere il processo di conteggio, senza azzerare il valore raggiunto. Pertanto, si può aggiungere un ingresso di abilitazione, da collegare all'ingresso T del primo flip-flop, proprio per controllare il procedere del conteggio.
La realizzazione di un contatore sincrono decrescente procede in maniera analoga, invertendo le uscite nella sequenza di flip-flop T.
In generale, è più conveniente realizzare dei contatori sincroni attraverso dei flip-flop D, dato che possono poi essere modificati facilmente per consentire il caricamento parallelo di un valore. Nelle figure di questa sezione si mostrano, per ora, solo contatori equivalenti a quelli già apparsi nella sezione precedente.
Il contatore è completo solo quando consente anche il caricamento parallelo. Nelle figure di questa sezione si vedono contatori basati su flip-flop D che consentono il caricamento parallelo.
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net