Altifigence Academy

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.

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 anteriorCondicionespushpopcount nuevo
0Entrada y receptor listo101
1Entrada y receptor listo111
4Entrada y receptor detenido004
4Entrada y receptor listo114

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.

Observa la ocupación, la inserción y la extracción

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.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.