Comportamiento inesperado en el cruce de reloj de Altera FIFO

0

Por lo que yo sé, en un FIFO, mientras seguimos leyendo, eventualmente se quedará vacío, es decir, no habrá más datos dentro y su salida se convertirá en 0x0. Si continuamos leyéndolo después de que esté vacío, causaremos un "subdesbordamiento".

Soy nuevo en el uso de los FIFO de Altera (Cruce de reloj) y lo que he notado en la simulación es que el FIFO NO se queda completamente vacío, es decir, la última palabra de datos escrita en él permanece en la salida q, incluso después de que el vacío sea confirmado por FIFO en sí mismo e incluso si se envía más rdreq a este FIFO vacío, la salida simplemente no se convierte en 0, lo que a mi entender significaría que no hay más datos dentro.

Aquí está el resultado de la simulación que hice con el FIFO por sí mismo:

En el megawizard, no encontré ninguna opción que controle este aspecto del comportamiento FIFO. Todavía no he hecho la simulación de hardware utilizando señal tap II en un FPGA real para ver qué sucede en él. ¿Qué me estoy perdiendo / malentendido aquí?

    
pregunta quantum231

1 respuesta

3

He diseñado algunos FIFO y la verdad es que no hay ninguna razón para que el FIFO genere cero cuando esté vacío. Piense en un FIFO como si tuviera dos punteros: una escritura y un puntero de lectura. Cuando se insertan datos, se escriben en la dirección del puntero de escritura, y el puntero de escritura se incrementa. Cuando se abre el FIFO, el puntero de lectura se incrementa. La salida del FIFO es la información apuntada por el puntero de lectura.

Ahora, si no hay datos para abrir, simplemente no incrementa el puntero de lectura. Así que la salida tendrá algunos datos que no son válidos, probablemente los últimos datos válidos. Es por eso que usualmente usas señales vacías y llenas.

Por supuesto que puedes cambiar este comportamiento, pero generalmente no es necesario. Si los datos de salida no son válidos, no le importa.

    
respondido por el user110971

Lea otras preguntas en las etiquetas