# Registro a scorrimento

I registri a scorrimento (in inglese shift register) sono componenti utilizzati nell'elettronica digitale costituiti da una catena di celle di memoria ad 1 bit (comunemente dei flip-flop, solitamente di tipo DT data-trigger) interconnesse tra loro: ad ogni impulso di clock essi consentono lo scorrimento dei bit da una cella a quella immediatamente adiacente. Lo scorrimento può avvenire in un'unica direzione predeterminata, o in direzione variabile comandata da una linea di controllo (registri bidirezionali). L'uso dei registri a scorrimento rende più agevoli le operazioni di lettura e scrittura dei dati in un sistema.

## Tipi di registri a scorrimento
### Registri SISO

Nei registri SISO (serial input-serial output), è presente un solo terminale di ingresso, quindi i bit vengono caricati uno alla volta (forma seriale): alla prima transizione attiva del segnale di clock, il dato presente sull'ingresso viene trasferito all'uscita della prima cella, al successivo impulso il dato passa alla seconda cella e così via fino all'uscita dell'ultima cella di memoria, dove i dati vengono letti anche in questo caso uno alla volta.

### Registri SIPO

Nei registri SIPO (serial input-parallel output), i dati vengono caricati sempre in forma seriale, però sono prelevati contemporaneamente, in qualsiasi istante sulle uscite delle varie celle di memoria, quindi l'uscita è di tipo parallelo.

### Registri PISO

I registri PISO (parallel input-serial output) consentono il caricamento dei dati in forma parallela. Gli N bit della parola da memorizzare vengono applicati agli N terminali di ingresso dati del registro, in questo tipo di registri è presente un ingresso di controllo che dà l'abilitazione al caricamento dei dati, se il terminale di abilitazione è a 0 (write) alla prima transizione del segnale di clock i flip-flop memorizzano i dati impostati, naturalmente lo stato dei terminali di ingresso deve rimanere stabile finché l'ingresso di controllo è basso per evitare la scrittura di dati errati, terminata l'operazione l'ingresso di controllo viene portato a 1 (shift). A questo punto i dati vengono prelevati in forma seriale sull'uscita dell'ultima cella di memoria durante gli N cicli di clock successivi.
L'animazione qui sotto mostra la sequenza scrittura/scorrimento con il relativo stato interno del registro

### Registri PIPO

Nei registri PIPO (parallel input-parallel output) il caricamento e la trasmissione dei dati avvengono in forma parallela.

## Applicazioni

Le applicazioni in cui sono indispensabili i registri a scorrimento sono molteplici.
Per esempio quando sia necessario trasferire i dati da un elaboratore ad una periferica bisogna spesso operare una conversione di formato da parallelo a seriale e viceversa: in un sistema digitale, infatti, i bit vengono solitamente trasferiti in forma parallela ma se i due sistemi sono separati da distanze significative può non risultare conveniente utilizzare tante linee di trasmissione quanti sono i bit da inviare, ma si preferisce trasferire i bit serialmente uno alla volta. In questi casi i registri possono realizzare una conversione da parallelo a seriale dei dati e viceversa ovviamente sincronizzando opportunamente i segnali di controllo in modo da non avere errori di scrittura e di lettura nei registri.
Inoltre possono essere utilizzati per variare la velocità di trasferimento dei dati seriali su una linea nel caso in cui un dispositivo lento debba trasferire dei dati ad un dispositivo più veloce, i bit che arrivano dal dispositivo lento vengono memorizzati nel registro per poi essere inviati con una frequenza superiore a quello più veloce.
Un'altra applicazione può essere quella di utilizzare un registro a scorrimento come linea di ritardo per far pervenire ad un elemento di un sistema un segnale con un certo ritardo rispetto al momento in cui viene generato, la durata del ritardo può essere variata cambiando la frequenza del clock oppure prelevando il segnale su una diversa uscita del registro.