Come funziona una CPU: registro a scalamento (Shift Register) #0.3.6.1

Nell’articolo di oggi analizzeremo nel dettaglio il funzionamento del registro a scalamento (Shift Register)

Negli articoli precedenti abbiamo visto:

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

Shift Register a 4-bit

Consideriamo uno Shift Register a 4-bit:

shift register

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)

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

Seguici per non perdere le prossime novità!

Simone Candido è un ragazzo appassionato del mondo tech nella sua totalità. Simone ama immedesimarsi in nuove esperienze, la sua filosofia si basa sulla irrefrenabile voglia di ampliare a 360° le sue conoscenze abbracciando tutti i campi del sapere, in quanto ritiene che il sapere umano sia il connubio perfetto tra cultura umanistica e scientifica.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.