Debería ser posible desenrollar esto, pero requerirá 64 * 16 = 1024 operaciones MAC por ciclo de reloj. Piénsalo así:
y[n] = a0 * x[n] + a1 * x[n-1] + ... + a63 * x[n-63]
Esa es la operación de filtro que necesitas hacer. Simplifiquemos eso un poco y solo consideremos los primeros 3 términos:
y[n] = a0 * x[n] + a1 * x[n-1] + a2 * x[n-2]
Cada -1 es un ciclo de retraso del reloj. Si obtiene un término por ciclo de reloj, puede implementarlo directamente con 3 multiplicadores y tres registros para almacenar los valores de x. Sin embargo, si obtiene dos valores x por ciclo de reloj, también debe producir dos valores y por ciclo de reloj. En ese caso, debe hacer algo como esto, suponiendo que sus valores de entrada son x [2n] yx [2n + 1]:
y[2n] = a0 * x[2n] + a1 * x[2n+1-2] + a2 * x[2n-2]
y[2n+1] = a0 * x[2n+1] + a1 * x[2n] + a2 * x[2n+1-2]
Y puedes continuar esto para más entradas:
y[3n] = a0 * x[3n] + a1 * x[3n+2-3] + a2 * x[3n+1-3]
y[3n+1] = a0 * x[3n+1] + a1 * x[3n] + a2 * x[3n+2-3]
y[3n+2] = a0 * x[3n+2] + a1 * x[3n+1] + a2 * x[3n]
Tenga en cuenta que, en este caso, cada ciclo de retardo del reloj NO es un retardo de 1, por lo que he reescrito los términos como una suma del término original y el retardo. Entonces, por ejemplo, 2n se mueve a 2n-2 en el siguiente ciclo, y 2n + 1 va a 2n + 1-2 en el siguiente ciclo. Puede escalar este patrón a lo que necesite, sin embargo, le recomendaría que utilice un script de Python o similar para generar su HDL, ya que esto sería una pesadilla para implementar manualmente.
En general, necesitará operaciones de MAC de longitud de filtro de conteo paralelo * de muestras. Tenga en cuenta que, en algunos casos, es posible realizar dos operaciones MAC en un segmento DSP si tiene un prefiltro y su lista de coeficientes de filtro tiene una simetría que puede explotar. Por lo tanto, si está utilizando un chip Xilinx moderno, puede ser posible implementarlo en 512 segmentos DSP.
Editar: Aquí hay otra opción que es un poco loca, pero podría valer la pena verla. Es posible crear un filtro FIR sin utilizar ningún segmento DSP que sea razonablemente rápido, se denomina filtro aritmético distribuido. La compensación es que para un ancho de coeficiente de M bits, se requieren M ciclos de reloj para calcular la siguiente muestra. Ya estás haciendo 16 muestras en paralelo, podría valer la pena probar una implementación aritmética distribuida que sea 16 * M en paralelo. Muestras de 16 bits * 16 muestras solo serían 256 implementaciones de filtro DA paralelas. No he hecho mucho con la aritmética distribuida, así que no estoy seguro exactamente de qué tan bien se escala, pero es otra forma posible de implementar su filtro. No estoy seguro de qué FPGA está utilizando, pero es posible que no tenga suficientes multiplicadores para crear un diseño más estándar con cortes DSP y DA puede ser la única opción.