Estoy trabajando con el FFT v9.0 core de Xilinx.
La FFT está configurada para usar la arquitectura de E / S de ráfaga Radix-4.
Cuando llego al último elemento de mi señal, configuré s_axis_data_tlast
a 1 (mientras transmitía el último punto de datos) y lo puse de nuevo a cero. No obtengo un event_tlast_unexpected
ni un event_tlast_missing
.
¡Mi problema es que la señal s_axis_data_tready
de la FFT permanece alta!
Para satisfacer el FFT tuve que darle 15 puntos de datos adicionales después de que ya haya aceptado el último punto de datos:
Con incredulidad, reduje la longitud de mi flujo de datos de 4096 puntos a 64 puntos para poder contar manualmente los puntos de datos que se transmitieron. Esto provocó el mismo comportamiento: de nuevo, la FFT requiere 15 puntos de datos adicionales para poder continuar.
¿Cómo puedo resolver este problema?
EDIT 1
Tal vez debería proporcionar más información:
El núcleo de FFT tiene una velocidad de 200 Mhz mientras que mis puntos de datos llegan a una velocidad de 50 Mhz, por lo que estoy desacelerando activamente la FFT con s_axis_data_tvalid
. Cada muestra tiene una duración de 81,92 microsegundos y comienzo a transmitir una nueva muestra cada 300 microsegundos.
Mi plan era alimentar mi primera muestra durante 81,92 microsegundos, recibir la salida en 218,08 microsegundos y luego alimentar la siguiente muestra.
Si no lleno el búfer (vea la respuesta de Dave Tweed), la FFT simplemente espera 218,08 microsegundos y llena su búfer con 15 puntos de la siguiente muestra. Luego, s_axis_data_tready
baja y la FFT devuelve su salida, mientras que debería estar recibiendo datos de la nueva muestra.