17 / 24 · Concepto
FIFO vacía, llena y transferencias simultáneas
Separa la ocupación de los punteros y especifica el comportamiento de inserción y extracción en los límites.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Una cola conserva el orden de aceptación
Una FIFO entrega primero el elemento aceptado más antiguo. Su puntero de lectura identifica la entrada más antigua y su puntero de escritura la siguiente ubicación de almacenamiento. La igualdad de punteros por sí sola no distingue entre vacía y llena, así que este diseño mantiene un contador de ocupación. Para profundidad cuatro, los punteros necesitan dos bits, pero el contador necesita tres para representar de cero a cuatro. Almacena las etiquetas junto con los datos.
Nuestra FIFO registrada no permite el paso directo cuando la cola está vacía. Output-valid es count>0 y pop es output-valid AND output-ready. Input-ready es count<depth OR pop, lo que permite un reemplazo cuando una cola llena entrega simultáneamente su cabecera. Push es input-valid AND input-ready. El siguiente count es count+push-pop. Dos asignaciones separadas que incrementen y decrementen count pueden gestionar mal las transferencias simultáneas; usa una actualización combinada o casos explícitos.
| count anterior | Condiciones | push | pop | count nuevo |
|---|---|---|---|---|
| 0 | Entrada y receptor listo | 1 | 0 | 1 |
| 1 | Entrada y receptor listo | 1 | 1 | 1 |
| 4 | Entrada y receptor detenido | 0 | 0 | 4 |
| 4 | Entrada y receptor listo | 1 | 1 | 4 |
Una cola vacía no puede extraer simplemente porque el receptor esté listo. Su nueva entrada se transfiere por primera vez en el flanco siguiente. Una cola llena [A,B,C,D] que consume A y acepta E simultáneamente pasa a [B,C,D,E] y sigue llena. Verifica el comportamiento de la memoria subyacente al leer y escribir la misma posición física.
FIFO de cuatro posiciones, inicialmente vacía y con los punteros de lectura y escritura en 0. Acepta pop si no está vacía. Acepta push si hay espacio o si se acepta un pop en el mismo flanco.
Las profundidades de potencias de dos dan la vuelta de forma natural en los bits de puntero. La profundidad tres necesita una transición explícita de la posición dos a cero. Prueba por separado la vuelta del puntero, la retirada del último elemento y el reemplazo con la cola llena.
Una cola vacía de profundidad cuatro absorbe solo cuatro elementos durante una detención del receptor de cinco ciclos. La quinta entrada debe esperar. Un productor que no puede detenerse necesita más capacidad o una política de pérdidas definida. Ninguna FIFO finita resuelve un consumo permanentemente más lento. Comprueba 0≤count≤depth, accepted-delivered=count y el orden de etiquetas; los contadores por sí solos no revelan una reordenación.
Inténtalo tú
Para profundidad dos y cola [tag3,tag4], se ofrece la entrada tag5 con out-ready=1. Calcula push, pop, el siguiente count y la siguiente cola. ¿Se extraería tag5 inmediatamente si la cola estuviera vacía?
Leer la explicación
Pop=1 activa input-ready pese a la ocupación completa, así que push=1. El siguiente count sigue siendo dos y la cola es [tag4,tag5]. Una cola vacía tiene out-valid=0, así que tag5 se almacena y no puede extraerse hasta un flanco posterior.