Registri

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).

Figura u130.1. Flip-flop D secondo la realizzazione classica.

flip-flop D classico

Figura u130.2. flip-flop T e JK, partendo dal flip-flop D.

flip-flop T e JK

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.

Registri semplici

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.

Figura u130.3. Registro a 4 bit: quando l'ingresso Load è attivo e si presenta una variazione positiva del clock, il registro accumula il valore proveniente dagli ingressi (da I0 a I3), altrimenti mantiene il valore accumulato precedentemente.

registro normale

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:

registro normale in fase di caricamento

Quando invece si tratta di mantenere il valore memorizzato, è come se il circuito si riducesse allo schema della figura successiva:

registro normale in fase di mantenimento

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.

multiplatore

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:

registro normale autoalimentato

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.

Registri a scorrimento

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.

Figura u130.8. Registro a scorrimento a 4 bit: quando si verifica una variazione positiva del clock, il valore in ingresso viene accumulato dal primo flip-flop a destra, mentre il secondo recepisce il valore precedente del primo, continuando fino all'ultimo. Video: ogv http://www.youtube.com/watch?v=I_ncbpQnCZ4.

registro a scorrimento

:-)

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.

Figura u130.9. Registro a scorrimento a 4 bit con caricamento: quando l'ingresso Load è attivo, il registro recepisce il valore dagli ingressi da I0 a I3, mentre diversamente fa scorrere il valore contenuto nei flip-flop, acquisendo quanto contenuto nell'ingresso In nel primo flip-flop. L'acquisizione o lo scorrimento avvengono in corrispondenza di un margine positivo del clock.

registro a scorrimento

:-)

Contatori asincroni con flip-flop T

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.

Figura u130.10. Contatore asincrono crescente a 4 bit: il flip-flop successivo è pilotato dall'uscita Q' del flip-flop precedente. Video: ogv http://www.youtube.com/watch?v=-mfL6B0w9UI.

contatore asincrono crescente

:-(

Figura u130.11. Contatore asincrono decrescente a 4 bit: il flip-flop successivo è pilotato dall'uscita Q del flip-flop precedente. Video: ogv http://www.youtube.com/watch?v=fvhina5QEnI.

contatore asincrono decrescente

:-(

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.

Contatori sincroni con flip-flop T

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.

Figura u130.12. Contatore sincrono crescente a 4 bit: le uscite sono sincrone tra loro, ma inevitabilmente sono leggermente in ritardo rispetto all'impulso di clock. Video: http://www.youtube.com/watch?v=Nh5CzRopNdY.

contatore sincrono crescente

:-|

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.

Figura u130.13. Contatore sincrono crescente a 4 bit con controllo di abilitazione (ingresso En).

contatore sincrono crescente

:-)

La realizzazione di un contatore sincrono decrescente procede in maniera analoga, invertendo le uscite nella sequenza di flip-flop T.

Figura u130.14. Contatore sincrono decrescente a 4 bit con controllo di abilitazione.

contatore sincrono decrescente

:-)

Contatori sincroni con flip-flop D

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.

Figura u130.15. Contatore sincrono crescente a 4 bit con controllo di abilitazione, basato su flip-flop D.

contatore sincrono crescente flip-flop D

:-)

Figura u130.16. Contatore sincrono decrescente a 4 bit con controllo di abilitazione, basato su flip-flop D.

contatore sincrono decrescente flip-flop D

:-)

Contatori sincroni con caricamento parallelo

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.

Figura u130.17. Contatore sincrono crescente a 4 bit con caricamento parallelo: l'ingresso Load fa sì che il valore contenuto negli ingressi da I0 a I3 venga caricato nei flip-flop; poi, se l'ingresso En non è attivo, il valore viene mantenuto tale e quali, altrimenti viene incrementato a ogni impulso di clock.

contatore sincrono crescente a caricamento parallelo

:-)

Figura u130.18. Contatore sincrono decrescente a 4 bit con caricamento parallelo: l'ingresso Load fa sì che il valore contenuto negli ingressi da I0 a I3 venga caricato nei flip-flop; poi, se l'ingresso En non è attivo, il valore viene mantenuto tale e quali, altrimenti viene decrementato a ogni impulso di clock.

contatore sincrono decrescente a caricamento parallelo

:-)

Figura u130.19. Contatore sincrono crescente o decrescente a 4 bit con caricamento parallelo: l'ingresso f consente di selezionare il funzionamento in qualità di contatore crescente o decrescente.

contatore sincrono crescente o decrescente a caricamento parallelo

:-)

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net