Nell’articolo di oggi analizzeremo nel dettaglio il funzionamento del registro a scalamento (Shift Register)
Negli articoli precedenti abbiamo visto:
- Come funziona una CPU: progetto di circuiti logici #0
- Come funziona una CPU: Flip-Flop SR asincrono #0.1
- Come funziona una CPU: Flip-Flop sincrono #0.1.1
- Come funziona una CPU: Flip-Flop D #0.1.2
- Come funziona una CPU: Flip-Flop Master-Slave #0.1.3
- Come funziona una CPU: Modello di Huffman #0.2
- Come funziona una CPU: progetto di circuiti sequenziali sincroni #0.2.1
- Come funziona una CPU: progetto dei circuiti logici #0.3
- Come funziona una CPU: porte logiche operanti su parole #0.3.1
- Come funziona una CPU: multiplexer #0.3.2
- Come funziona una CPU: decodificatore #0.3.3
- Come funziona una CPU: codificatore (encoder) #0.3.4
- Come funziona una CPU: codificatore prioritario (priority encoder) #0.3.4.1
- Come funziona una CPU: sommatore full-adder #0.3.5
- Come funziona una CPU: sommatore Ripple Carry Adder #0.3.5.1
- Come funziona una CPU: sommatore seriale #0.3.5.2
- Come funziona una CPU: Sommatore con carry-lookahead #0.3.5.3
- Come funziona una CPU: ALU spiegata in modo semplice #0.3.5.4
- Come funziona una CPU: comparatore #0.3.5.5
- Come funziona una CPU: registro a m-bit #0.3.6
Lo shift register è un Registro che di base riceve 1-bit in ingresso e produce 1-bit in uscita, con un parallelismo di n-bit (contiene n Flip-Flop, ciascuno per un bit). Esso è dotato di un segnale di Clear e di un segnale di Shift Enable. Il primo svolge una funzione analoga a quella nel Registro classico. Il secondo, invece, fa acquisire al primo Flip-Flop D il bit d’ingresso X e sposta di una posizione a destra (o a sinistra, dipende dal tipo di Registro) tutti i bit memorizzati nei Flip-Flop successivi (ovvero li sposta da un Flip-Flop all’altro) producendo sull’uscita Z il bit che era memorizzato nell’ultimo Flip-Flop
Shift Register a 4-bit
Consideriamo uno Shift Register a 4-bit:
Lo schema è simile a quello di un Registro a 4-bit classico ma ci sono delle evidenti differenze:
- Il segnale di Load è rimpiazzato dal segnale di Shift Enable;
- L’uscita di ciascun Flip-Flop (tranne l’ultima) è connessa all’ingresso del Flip-Flop successivo;
Quando lo Shift Enable è attivo, ogni Flip-Flop risulta sensibile all’ingresso D e memorizza il valore contenuto nel Flip-Flop precedente. Per far avvenire lo SHIFT in una direzione specifica (destra o sinistra) si può aggiungere un Multiplexer all’ingresso di ogni Flip-Flop, pilotato da due segnali: un Left Shift Enable ed un Right Shift Enable (chiaramente, solo uno dei due segnali viene attivato). Il Multiplexer riceve in ingresso l’ingresso di ciascun Flip-Flop e l’uscita del Flip-Flop successivo. Se viene attivato il Right Shift Enable, i Multiplexer fanno arrivare agli ingressi dei Flip-Flop i rispettivi segnali D, come nell’esempio discusso poc’anzi. Se invece è attivo il Left Shift Enable, all’ingresso di ogni Flip-Flop giunge il valore memorizzato nel Flip-Flop adiacente di destra (che viene emesso in uscita da tale Flip-Flop) che viene successivamente acquisito e memorizzato internamente. Pertanto, tutti i bit vengono spostati di una posizione verso sinistra.
Usi dei Registri a scalamento
Supponiamo che un dato numero X sia memorizzato all’interno di uno Shift Register. Se i bit di X vengono scalati diuna posizione a destra, aggiungendo uno 0 come bit più significativo, si sta effettuando una divisione per 2. Pertanto:
Xfin = Xin /2^nposizioni
Il LSB costituisce l’eventuale resto della divisione che, tuttavia, viene troncato. Stiamo infatti eseguendo una divisione tra numeri interi senza segno e pertanto il risultato sarà ancora un numero intero senza segno (indipendentemente dall’eventuale resto della divisione).
Se invece i bit di X vengono scalati di una posizione a sinistra, aggiungendo uno 0 come bit meno significativo, si sta effettuando una moltiplicazione per 2. Pertanto:
Xfin = Xin ∗ 2^nposizioni
Registro a scalamento universale (Universal Shift Register)
Può effettuare lo SHIFT in ambo le direzioni, presenta un’uscita per ogni Flip-Flop intermedio e dei corrispondenti ingressi (nel caso in cui si volessero caricare in parallelo più bit d’ingresso, come in un normale Registro) nonché un segnale di Load per gestire tali ingressi. Questo modulo può quindi comportarsi come un Registro classico o come uno Shift Register.
Iscriviti ai nostri gruppi Telegram
Link utili