FIFO wrfull afirmado cuando FIFO no está lleno

2

Tengo un problema con los FIFO de Altera. Parece que la señal completa wrfull se afirma incluso cuando el FIFO no está lleno. Mis FIFO son de tamaño 8. Las huellas de SignalTap a continuación muestran los niveles de lectura de mis FIFO ( rdlevel ), así como las señales wrfull :

¿Qué podría explicar que las señales wrfull no se están comportando correctamente?

    
pregunta Randomblue

2 respuestas

3

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.

    
respondido por el user3624
3

A menos que la puesta en cola y el encolamiento estén controlados por un solo reloj (tal vez con señales de habilitación separadas, de modo que no todos los ciclos de reloj encolarán y encolarán datos), será necesario que el FIFO lleve información a través de los dominios del reloj. Esto permitirá compensaciones entre la latencia de la cola y la resistencia a la metastabilidad. En muchos sentidos, la forma más limpia de tener una cola de dominios de reloj cruzado es hacer que la cola acepte los relojes de ambos dominios, junto con las señales de habilitación. Un contador de código gris "bytes en cola" se mantiene en el dominio de entrada, y un contador de "bytes en cola" se mantiene en el dominio de salida; ambos contadores deben tener un bit "extra" [por lo que para una cola de 16 niveles, los contadores deben ser de 5 bits]. Cada dominio tiene una copia doble sincronizada del contador del otro dominio.

Los bytes se pueden encolar, excepto cuando el contador de "bytes en cola" es el complemento a los de la copia sincronizada del contador de "bytes encolados" [lo que significa que la cola está exactamente llena]. Los bytes se pueden quitar de la cola cuando el contador de "bytes de la cola" no es igual a la copia sincronizada del contador de "bytes en cola". En algunos casos, puede ser útil que la cola también muestre indicadores asíncronos no vacíos o no llenos; aunque no deben considerarse "confiables", pueden ser útiles como señales de "activación".

Si una cola utiliza este método, los datos se pueden poner en cola o en cola a cualquier velocidad, independientemente de las velocidades relativas de los relojes, sujeto solo a las restricciones de que los datos no estarán disponibles hasta dos relojes de recepción después de agregarlos. y una ranura de cola no estará disponible para el reciclaje hasta dos relojes de transmisión después de que se lea. Sin embargo, a diferencia de otros enfoques, este enfoque permitirá que los datos se ingresen o generen en cada reloj siempre que la cola no esté demasiado llena o demasiado vacía.

Tenga en cuenta que si bien es posible tener un chip FIFO que funcione de manera totalmente asíncrona, y es posible que dichos chips se usen de una manera que garantice que no habrá riesgo de metastabilidad, los diseños sincrónicos como los descritos anteriormente permitirán para un mayor rendimiento. El problema con los chips asíncronos es que un dispositivo solo debe intentar enviar datos solo cuando se sabe que el chip no está lleno, y recuperar los datos solo cuando se sabe que no está vacío. Esto significa que cualquier dispositivo que vaya a enviar datos debe, antes de cada byte, determinar si hay espacio o no; por lo tanto, la presentación de cada byte se convierte en un proceso de dos pasos. En un sistema síncrono, el dispositivo de envío puede intentar enviar un byte en cada ciclo sin tener en cuenta si la cola está llena y luego verificar si la solicitud se realizó correctamente o no.

    
respondido por el supercat

Lea otras preguntas en las etiquetas