# Registro tubo

En electrónica digital un registro tubo o FIFO es una memoria de acceso serie utilizada para el registro de datos. FIFO es el acrónimo inglés de First In, First Out (primero en entrar, primero en salir). Un sinónimo de FIFO es FCFS, acrónimo inglés de First Come First Served (primero en llegar, primero en ser servido), ello quiere decir que la información que entra en primer lugar va a ser la primera en salir (observe la figura 1). Guarda analogía con las personas que esperan en una cola y van siendo atendidas en el orden en que llegaron, es decir, que la primera persona que entra es la primera persona que sale.

## Aplicaciones

Los registros tubo se usan comúnmente en circuitos de electrónica para almacenaje y control del flujo de datos. Si nos referimos al hardware, un FIFO consiste básicamente en una conjunto de punteros de lectura/escritura, almacenamiento y lógica de control. El almacenamiento puede ser SRAM, básculas o cualquier otra forma de almacenamiento digital. Para estructuras de gran tamaño se usa usualmente una SRAM de doble puerto, donde uno de los puertos se usa para la escritura y el otro para la lectura.
Una aplicación muy importante de los registro tubo es el caso en que se dispone de dos sistemas de desplazamiento de velocidades diferentes que tienen que comunicarse entre sí. Los datos pueden entrar al registro tubo con una velocidad y salir con otra. Esto puede ser debido a que entre información a una velocidad irregular, a baja velocidad o a ráfagas y se quiera que salga a velocidad constante, a alta velocidad, ráfagas, etc. Para un buen funcionamiento existen entradas de control que avisan a la entrada cuando el registro está preparado para recibir datos,y a la salida cuando hay datos disponibles para la lectura.
Un ejemplo claro sería el de una impresora que tiene que imprimir un documento enviado por una CPU, la CPU manda la información mucho más rápido de lo que la impresora es capaz de leerlo por eso la información se guarda rápidamente a través de la CPU mientras la impresora lo va leyendo más progresivamente.
En el ámbito de la informática la estructura FIFO se usa para el control de información, por ejemplo: cuando se visita una página web o se abre un archivo, se crea un historial, esto es, asociar a cada página o archivo el momento en que éstos fueron traídos a memoria. Cuando un elemento debe ser reemplazada se selecciona el más antiguo.
No es estrictamente necesario registrar el momento de entrada a memoria, sino que se puede crear una cola en la que se van agregando los elementos según van llegando a la ella. Para eliminar se selecciona la que está al frente de la lista (esto es, la más "antigua" de la lista). Para insertar se añade en la parte trasera de la cola.

## Tipos

La estructura de registro tubo se usa en los sistemas informáticos para propósitos de sincronización. Comportándose como una cola circular. Tiene dos punteros:
1. Puntero de lectura/Registro de dirección de lectura.
2. Puntero de escritura/Registro de dirección de escritura.
Como ejemplo de banderas de estado FIFO, se pueden enumerar: full (lleno), empty (vacío), almost full (casi lleno) o almost empty (casi vacío).

### Llenado/vaciado

Las direcciones de lectura y escritura están ambas inicialmente en la primera ubicación de la memoria y la cola FIFO está vacía.
-FIFO vacía: cuando el registro de dirección de lectura alcanza al registro de dirección de escritura, la cola FIFO dispara la señal de vacío.
-FIFO llena: Cuando el registro de dirección de escritura alcanza al registro de dirección de lectura, la cola FIFO dispara la señal lleno.
En la figura 2 se puede ver que en primer lugar la memoria está vacía, se le introduce el primer dato y se sitúa en la última posición o primera de salida, el siguiente dato que se introduce se sitúa en el segundo lugar de salida y de este modo continua con todos los datos introducidos (no tiene por qué quedar totalmente llena la memoria. En la primera operación de lectura, el dato que está en el primer lugar de salida será el primero en salir y el resto de datos se desplazarán demodo que el segundo dato que entró se coloca en el primero de salida, el tercero se coloca en el segundo de salida, etc.

### Sincronismo y asincronismo

-Un registro tubo se dice que es síncrono cuando es controlado por un mismo reloj o señal de sincronismo, tanto para las lecturas como para las escrituras.
-En el caso de ser controlado por diferentes relojes, uno para la lectura y otro para la escritura, se dirá que es asíncrono. Este último caso está relacionado con el concepto de meta-estabilidad.
Una implementación común de un registro tubo asíncrono usa un código Gray (o cualquier código de unidad de distancia) para los punteros de lectura y escritura con el fin de asegurarse una generación de señales seguras y estables.