No he usado Altera, o el FIFO que estás usando, y las señales que tienes en tu imagen no tienen sentido para mí. Pero he diseñado muchos FIFO y quizás aún pueda darte una idea de lo que estás viendo ...
Muchos FIFO tienen una extraña noción de "lleno". Específicamente, "lleno" es cuando hay una palabra menos de lo que crees que debería haber. Un FIFO profundo de 16 palabras solo puede contener 15 palabras. O un FIFO de 64 palabras realmente solo puede contener 63 palabras. En estos FIFO, la memoria RAM utilizada es de 16 o 64 palabras, pero la lógica utilizada para calcular la plenitud indicará FULL en uno menos. Intentar poner 16 o 64 palabras en ese FIFO resultará en cosas malas. No todos los FIFO son así, pero la mayoría lo son.
Algunos FIFO, en particular los que tienen un reloj de lectura y escritura separado, tomarán tiempo para que los datos escritos en él aparezcan en el puerto de lectura. A veces una sorprendente cantidad de tiempo. Para decirlo de otra manera ... Digamos que el FIFO está completamente vacío, y usted comienza a escribir en el FIFO lo más rápido posible. Es posible que pueda escribir varias palabras en FIFO antes y la señal "FIFO No Vacío" se activa. Esto significa que no puede comenzar a vaciar el FIFO hasta más tarde de lo que podría esperar. Lo que significa que puede tener más palabras en la FIFO de las que anticipó. Lo que podría hacer que se llene.
El tiempo que debe transcurrir para que una palabra escrita aparezca en el puerto de lectura varía según la arquitectura interna de FIFO. A veces se encuentra dentro de un ciclo de reloj. Otros FIFO's podrían requerir varios relojes de escritura más varios relojes de lectura.
Requerir varios relojes de escritura y / o varios relojes de lectura plantea un problema interesante. Hay muchos FIFO que no se comportan bien con los relojes discontinuos. Es decir, un reloj que simplemente no funciona continuamente. Si se necesitan 3 relojes de lectura para llevar los datos de escritura al puerto de lectura, y solo le da 2 relojes, los datos no llegarán allí. Los datos se acumularán en el FIFO y nunca se leerán. ¡De hecho, puede ingresar a un estado en el que FIFO dice estar vacío y lleno al mismo tiempo! Vacío, porque los datos aún no han llegado al puerto de lectura. Y lleno, porque no hay más espacio en la memoria RAM para escribir nuevos datos.
Por lo tanto, esas son algunas de las razones por las que la marca completa podría estar activa cuando no esperas que lo haga. Pero también debes considerar que estás haciendo algo incorrecto. Hay un error en su código, o tiene un reloj ruidoso, o tiene restricciones de tiempo incorrectas. Esas son posibilidades reales que no puedo diagnosticar de forma remota.