← Volver al blogRegistros de desplazamiento

Domina los registros de desplazamiento: de la conversión serie a paralelo

Los registros de desplazamiento encadenan biestables D para mover datos un bit por pulso de reloj. Construye variantes SIPO, PISO y PIPO y descubre cómo los usan UART y los controladores de matrices LED.

DennyDenny
8 min de lectura
Chalkboard feature illustration for “Domina los registros de desplazamiento: de la conversión serie a paralelo”

En resumen: un registro de desplazamiento es una cadena de biestables D en la que la salida de cada etapa alimenta la entrada de la siguiente. En cada flanco de reloj, cada bit se desplaza una posición. Las configuraciones son SISO, SIPO —serie a paralelo; usada por los controladores LED 74HC595—, PISO —paralelo a serie; usada por los transmisores UART— y PIPO.

Un registro de desplazamiento mueve datos por el hardware a razón de un bit por ciclo de reloj. Es un puente entre la transferencia serie y el almacenamiento paralelo. Existen estructuras relacionadas en UART, controladores LED, serializadores, deserializadores y algunas rutas de desplazamiento de procesadores, aunque los desplazadores de alto rendimiento pueden usar en su lugar redes combinacionales de tipo barrel shifter.

¿Qué es exactamente un registro de desplazamiento?

En esencia, un registro de desplazamiento es un circuito secuencial síncrono. Está formado por una cadena de biestables —normalmente D_FLIP_FLOP— conectados como una «cadena de cubos»: cada etapa entrega su contenido a la siguiente. Cada etapa almacena exactamente un bit de datos. Cuando llega un pulso de reloj, todos los bits avanzan una posición a la derecha —o a la izquierda—, como pasajeros que corren un asiento en un tren.

Diagrama del componente D_FLIP_FLOP

El componente SHIFT_REGISTER de digisim.io abstrae esta complejidad, pero la propagación se aprecia mejor cuando se construye con unidades D_FLIP_FLOP individuales.

Explorar el componente D_FLIP_FLOP

La base matemática

El comportamiento de una etapa individual de un registro de desplazamiento se rige por la ecuación característica del D_FLIP_FLOP:

Qnext=DQ_{next} = D

En un registro de desplazamiento de varias etapas, la entrada DD de la etapa nn-ésima se conecta a la salida QQ de la etapa (n−1)(n-1)-ésima. Por tanto, el estado de todo el registro en el instante t+1t+1 puede describirse como:

Qn(t+1)=Qn−1(t)Q_n(t+1) = Q_{n-1}(t)

Esta sencilla relación permite que los datos «fluyan» por el hardware.

Las cuatro modalidades de movimiento de datos

No todos los registros de desplazamiento son iguales. Según cómo entren los datos y cómo salgan, los clasificamos en cuatro tipos principales. Comprender estas diferencias es esencial para elegir la configuración adecuada para cada aplicación.

1. SISO: Serial-In, Serial-Out

Entrada: un bit por ciclo de reloj. Salida: un bit por ciclo de reloj, con retardo.

SISO es la forma más simple. Los datos entran de uno en uno y salen de uno en uno por el extremo opuesto. Funciona como un retardo digital de ciclos: en un registro SISO de 4 bits, un bit que entra ahora aparece en la salida lejana después de cuatro flancos de reloj activos. Por ello, los registros SISO son útiles para alinear flujos de control o datos que ya son síncronos. Un registro de desplazamiento genérico no constituye por sí mismo una solución completa para cruzar dominios de reloj.

2. SIPO: Serial-In, Parallel-Out

Entrada: un bit por ciclo de reloj. Salida: todos los bits disponibles simultáneamente.

SIPO es la configuración de «expansión». Se le suministra un flujo serie de bits y, cuando el registro se llena, se leen todas las salidas (Q0,Q1,Q2,Q3Q_0, Q_1, Q_2, Q_3) al mismo tiempo. Los dispositivos con entrada serie y salida paralela se usan habitualmente para ampliar salidas digitales, por ejemplo para controlar grupos de indicadores con menos pines del controlador. El CI 74HC595, que veremos más adelante, combina un registro de desplazamiento con un registro de almacenamiento de salida independiente.

3. PISO: Parallel-In, Serial-Out

Entrada: todos los bits se cargan simultáneamente. Salida: un bit por ciclo de reloj.

PISO hace lo contrario que SIPO. Toma una «palabra» completa de datos —por ejemplo, 8 bits de un bus de datos— y la serializa en un flujo de bits individuales. Un transmisor UART contiene esta función general, rodeada de lógica de entramado, velocidad en baudios, paridad, estado y almacenamiento en búfer.

4. PIPO: Parallel-In, Parallel-Out

Entrada: todos los bits se cargan simultáneamente. Salida: todos los bits están disponibles simultáneamente.

Un PIPO puede cargar los datos en paralelo y entregarlos en paralelo. Por sí solo, se comporta como un registro estándar, útil para capturar una palabra en un flanco de reloj. Un registro de desplazamiento «universal» combina la carga paralela con modos de desplazamiento a izquierda y derecha seleccionados por señales de control. Para un valor sin signo sin desbordamiento, un desplazamiento lógico a la izquierda por una posición multiplica por dos; un desplazamiento lógico a la derecha realiza una división entera por dos. La aritmética con signo y el desbordamiento requieren cuidado adicional.

Componente de registro de desplazamiento

Especificación técnica: tabla de verdad de un SIPO de 4 bits

Veamos cómo se comporta un SIPO de 4 bits —Serial-In, Parallel-Out— durante cuatro ciclos de reloj. Supongamos que introducimos la secuencia binaria 10111011 —empezando por el bit situado más a la derecha—.

Pulso de relojEntrada serie (DinD_{in})Q3Q_3Q2Q_2Q1Q_1Q0Q_0
Inicial00000
T1T_111000
T2T_211100
T3T_300110
T4T_411011

Observe cómo el «1» que entró en T1T_1 se desplaza de Q3Q_3 a Q2Q_2, luego a Q1Q_1 y por último a Q0Q_0. Ese es el «desplazamiento» en acción.

Error habitual: temporización y retardos de propagación

Todas las etapas muestrean sus entradas en el mismo flanco activo. El valor almacenado anteriormente avanza una posición porque un biestable no cambia su salida hasta después de su retardo de reloj a Q. El funcionamiento correcto exige comprobar tanto el setup con retardo máximo como el hold con retardo mínimo.

Tres parámetros importantes son:

  1. Tiempo de setup (tsetupt_{setup}): el tiempo mínimo durante el cual el dato debe permanecer estable antes del flanco de reloj.
  2. Tiempo de hold (tholdt_{hold}): el tiempo mínimo durante el cual el dato debe permanecer estable después del flanco de reloj.
  3. Retardo de reloj a Q (tcqt_{cq}): el tiempo transcurrido desde el flanco de reloj activo hasta que cambia la salida QQ de la etapa que lanza el dato.

Para una conexión directa entre etapas, una condición simplificada de hold es:

tcq,min+troute,min≥thold+tskew+Uholdt_{cq,min} + t_{route,min} \ge t_{hold} + t_{skew} + U_{hold}

donde un tskewt_{skew} positivo significa que el reloj de captura llega más tarde, según la convención utilizada en la guía de skew de reloj. La comprobación de setup utiliza los retardos máximos de reloj a Q y de enrutamiento. El análisis estático de temporización realiza estas comprobaciones con los retardos caracterizados del dispositivo objetivo; un visor funcional de formas de onda no puede demostrar el cierre temporal físico. Consulte setup, hold y metaestabilidad para conocer las restricciones subyacentes.

Abrir la demostración del registro de desplazamiento

Verificación del comportamiento con OSCILLOSCOPE_8CH

Al construir un SHIFT_REGISTER_8BIT, no basta con mirar los componentes OUTPUT_LIGHT: a velocidades de reloj altas parpadean demasiado rápido para que el ojo humano pueda seguirlos.

Para verificar realmente el circuito:

  1. Conecte CLOCK al canal 1 de OSCILLOSCOPE_8CH.
  2. Conecte la entrada serie al canal 2.
  3. Conecte las salidas paralelas —de Q0Q_0 a Q5Q_5— a los canales restantes.

Al ejecutar la simulación, el trazado debe mostrar un patrón escalonado: el bit serie muestreado aparece en la primera etapa después de un flanco activo y avanza una etapa en cada flanco posterior. Use esta vista para detectar errores lógicos de orden de bits, habilitaciones, resets y número de ciclos. Salvo que el modelo incluya retardos caracterizados, la alineación aparente de las formas de onda no demuestra —ni refuta— la temporización física de setup y hold.

Aplicaciones reales: de 1978 hasta hoy

Los registros de desplazamiento no son solo ejercicios académicos; son caballos de batalla de la industria electrónica.

1. El 74HC595 y el control de LED

El 74HC595 es un registro de desplazamiento de 8 bits con entrada serie, salida paralela y un registro de almacenamiento independiente. Un controlador puede desplazar los datos y después actualizar los ocho bits de salida a la vez mediante una señal de latch. Los dispositivos pueden conectarse en cascada, pero el número y tipo de cargas están limitados por la corriente de salida, la corriente total del encapsulado, la frecuencia de reloj, la integridad de la señal y los requisitos de refresco; los sistemas LED grandes requieren controladores adecuados, no una expansión directa ilimitada.

2. UART/USART junto a un Intel 8086

El Intel 8086 no incorporaba una UART integrada. Un sistema podía usarlo con un periférico como el USART 8251A de Intel. Conceptualmente, el procesador escribe un byte en paralelo en el periférico; la lógica de transmisión encuadra y desplaza los bits por la línea serie. La lógica de recepción muestrea una trama serie y deja disponible el byte recuperado en el bus paralelo. Las implementaciones UART modernas añaden generación de velocidad en baudios, manejo de bits de inicio y parada, indicadores de estado y búferes alrededor de la operación básica de desplazamiento.

3. Multiplicación y división

¿Sabía que desplazar un número binario una posición a la izquierda equivale matemáticamente a multiplicarlo por 2?

10112(1110)≪1=101102(2210)1011_2 (11_{10}) \ll 1 = 10110_2 (22_{10})

Las ALU (unidades aritmético-lógicas) modernas emplean registros de desplazamiento de alta velocidad para realizar estas operaciones en un único ciclo de reloj.

Construya su primer registro de desplazamiento en digisim.io

¿Listo para poner manos a la obra? Siga estos pasos para construir un registro SIPO de 4 bits:

  1. Coloque las etapas: añada cuatro componentes D_FLIP_FLOP al lienzo.
  2. Encadene los datos: conecte la salida QQ del primer biestable a la entrada DD del segundo. Repita el proceso para todas las etapas.
  3. Reloj común: coloque un componente CLOCK y conéctelo a la entrada de reloj de los cuatro biestables. Es fundamental: deben ser síncronos.
  4. Entrada y salida: conecte un INPUT_SWITCH a la entrada DD del primer biestable. Conecte un OUTPUT_LIGHT a cada salida QQ.
  5. La ventaja de SimCast: utilice la función SimCast para registrar el comportamiento del circuito. Cambie el interruptor de entrada, aplique un pulso de reloj y observe cómo el «1» se mueve por los indicadores luminosos.

Probar la plantilla SIPO de 8 bits

Reflexiones finales

El registro de desplazamiento demuestra de forma contundente que un comportamiento complejo puede surgir de componentes simples. Con solo encadenar unos cuantos biestables, obtenemos la capacidad de convertir formatos de datos, retardar señales y realizar operaciones matemáticas.

Pruebe a construir un registro de desplazamiento bidireccional de 4 bits que pueda desplazarse a izquierda y derecha según un interruptor de control, combinando un SHIFT_REGISTER con un multiplexor en la entrada de datos de cada etapa.

Continúe con los modos SISO, SIPO, PISO y PIPO, o abra la referencia del componente de biestable D, el elemento de almacenamiento detrás de este modelo didáctico.

Convierte la idea en un circuito funcional.