# Registro de desplazamiento

Un registro de desplazamiento es un circuito digital secuencial (es decir, que los valores de sus salidas dependen de sus entradas y de los valores anteriores) consistente en una serie de biestables, generalmente de tipo D, conectados en cascada (Fig. 1), que basculan de forma sincrónica con la misma señal de reloj. Según las conexiones entre los biestables, se tiene un desplazamiento a la izquierda o a la derecha de la información almacenada. Es de señalar que un desplazamiento a la izquierda de un conjunto de bits, multiplica por 2, mientras que uno a la derecha, divide entre 2. Existen registros de desplazamiento bidireccionales, que pueden funcionar en ambos sentidos. Los registros universales, además de bidireccionales permiten la carga en paralelo.

## Tipos de registros de desplazamiento

Dependiendo del tipo de entradas y salidas, los registros de desplazamiento se clasifican como:
* Serie-Serie: sólo la entrada del primer flip-flop y la salida del último son accesibles externamente. Se emplean como líneas de retardo digitales y en tareas de sincronización.
* Paralelo-Serie: son accesibles las entradas de todos los flip-flops, pero solo la salida del último. Normalmente también existe una entrada serie, que sólo altera el contenido del primer flip-flop, pudiendo funcionar como los del grupo anterior. Este tipo y el siguiente se emplean para convertir datos serie en paralelo y viceversa.
* Serie-Paralelo: son accesibles las salidas de todos los flip-flops, pero solo la entrada del primero. Este tipo y el anterior se emplean para convertir datos serie en paralelo y viceversa, por ejemplo para conexiones serie como el RS232.
* Paralelo-Paralelo: tanto las entradas como las salidas son accesibles. Se usan para cálculos aritméticos.
Un registro de desplazamiento muy utilizado, que es universal (se llama así porque puede utilizarse en cualquiera de las cuatro configuraciones anteriormente descritas) y bidireccional (porque puede desplazar los bits en un sentido u otro) es el 74HC194, de cuatro bits de datos.
Otros registros de desplazamiento conocidos, fabricados también con la tecnología CMOS, son el 74HC165 (entrada paralelo, salida serie) y 74HC164 (entrada serie, salida paralelo).

## Aplicaciones

Además de la conversión serie-paralelo y paralelo-serie, los registros de desplazamiento tienen otras aplicaciones típicas:
* Generador pseudoaleatorio. Se construye con un registro de desplazamiento, realimentando a la entrada una combinación de varias salidas, normalmente un or exclusivo entre ellas.
* Multiplicador serie. Se realiza la multiplicación mediante sumas y desplazamientos. Un ejemplo es el 74LS384.
* Registro de aproximaciones sucesivas. Se usa en conversores A/D. Se van calculando los bits sucesivamente, empezando por el más significativo. Mediante un conversor DAC se compara la entrada analógica con los resultados parciales, generando el siguiente bit.
* Retardo. Se pueden utilizar para retardar un bit un número entero de ciclos de reloj (consiste simplemente en un conjunto de biestables en cascada, tantos como ciclos de reloj deseemos retardar los bits).

## Formas de construir registros de desplazamiento

Se pueden construir registros de desplazamiento a partir de otros circuitos digitales (combinacionales y secuenciales). Por ejemplo:
* Registro de entrada paralelo y salida serie. Puede construirse con un multiplexor digital combinacional y un contador. Las entradas de datos del multiplexor se conectan a los datos a transmitir, y las entradas de control, a las salidas del contador (el bMs del MUX conectado al bMs del contador), dicho contador deberá estar en modo de carrera libre.
* Registro de entrada serie y salida paralelo. Similar al caso anterior, se sustituye el muliplexor por un demultiplexor, ahora las salidas de éste serán las salidas paralelos.
* Biestables en cascada. Con esto y la lógica combinacional adecuada, se pueden construir incluso registros de desplazamiento bidireccionales y universales, aunque en este caso es más aconsejable disponer del 74HC194, dado que ocupa mucho menos espacio (y el precio del integrado es muy asequible) y en un solo integrado incluye las cuatro posibles configuraciones y la funcionalidad de desplazar los bits en ambos sentidos.

### Registros con entrada serie y salida serie (SISO)

A continuación se muestra un registro de desplazamiento con entrada y salida en serie de 5 bits formado con biestables maestro esclavo RS:
Observamos que la entrada S del primer biestable está conectado a la entrada y está negada a la entrada R. Con esto se consigue que, cuando en la entrada haya un 1, el primer biestable contendrá un 1 (Q=1, Q’=0) y los demás un 0. Con la siguiente señal de reloj el bit almacenado en el primer biestable se desplazará al siguiente y así uno tras otro hasta la salida en serie. Esto sucede así porque la salida Q está conectada a la S del siguiente biestable. También podemos observar que los biestables nunca pueden estar en estado de mantenimiento o en estado prohibido, ya que la entrada enserie pasa afirmada a la S y negada a la R.
Los registros de desplazamiento se implementan con biestables maestro – esclavo, pues son capaces de almacenar la información un flanco, y transmitirla durante el siguiente.
Cuando el registro se efectúa de izquierda a derecha se denomina desplazamiento hacia la derecha. Si el registro combina ambos tipos se llama bidireccional.

### Registros con entrada serie y salida paralelo (SIPO)

La estructura de un registro serie paralelo es muy similar a la de un registro con entrada y salidas en serie:
Observamos que la única diferencia es que se le añade una salida a cada una de las salidas Q del biestable: de esta manera se pueden obtener todos los datos a la vez. Por otro lado, también se puede obtener una salida en serie de cualquier salida Q o Q’.
Habitualmente se suele añadir una entrada de puesta a cero asíncrona (CLEAR) cuya función es inicializar el registro.
En último lugar destacar que estos registros se suelen utilizar para el cambio de una palabra de serie a paralelo.

### Registros con entrada paralelo y salida serie

A continuación se muestra un esquema de un registro con entrada paralelo y salida serie y carga asíncrona.
El funcionamiento es el siguiente: cuando en la entrada de selección desplazamiento /carga', hay un 0 se realiza la carga. Con el inversor este cero se convierte en un 1 y por lo tanto las puertas NAND que hay arriba y debajo de los biestables se convierten en inversores.
A continuación se introducen los datos: en el bit que haya un 1, se activa el Preset, y en el que haya un cero, se activa el Clear.
Para el desplazamiento se coloca un 1 en D/C’ de esta manera se consigue que nunca se activan las entradas ni PR ni CL, ya que de las puertas NAND siempre saldrá un 1. El desplazamiento se realiza como en un registro serie-serie.
A continuación se muestra un registro con carga paralelo y salida serie pero en este caso la carga es síncrono, ya que se carga por las entradas síncronas
Observamos que esto se consigue con un multiplexor de dos canales gobernado por DESPLAZAMIENTO/ CARGA’. Con esto se consigue que si se quiere cargar los datos, se activan las entradas en paralelo que van cada una a las entradas S R. Para obtener los datos se tiene que realizar la entrada serie.
En conclusión, podemos observar que la función del multiplexor es elegir entre la carga en serie o en paralelo

### Registro de entrada y salida en paralelo (PIPO)

Como se puede ver, se ha creado un registro de entrada y salida paralelo a partir de biestables D con entrada de habilitación. La entrada de datos es cada una de las entradas D del biestable; la entrada de habilitación se une a una entrada de habilitación global, de manera que cuando se activa, permite que se lean los datos. Hay otra entrada (control de salida) que al activarse permite que se lean las salidas. Aquí hemos utilizado puertas AND, aunque también podríamos haber utilizados puertas OR y un inversor, o también buffers con entradas de alta impedancia.