Paso 11: Con los filtros de HLS o el compilador de abeto
Ya tenía experiencia previa con la construcción de filtros en C/C++, elegí el programa HLS Vivado a aplicar los filtros.
La función de filtro debe tener un encabezado como sigue:
Primero echemos un vistazo a los argumentos de la función. ¿Qué tipo de datos debe nosotros elegir? Si esto sería parte de un programa de PC, tipos de datos no sería mucha de una preocupación (podríamos elegir doble o flotador), pero queremos sintetizar al hardware, por lo que la anchura de los datos es una preocupación. La hoja de datos de ADS1299 especifica el tipo de datos exacto: firmado datos 24b (2s complemento), por lo que sería un desperdicio utilizar 64 o 32b flotante punto de datos.
Afortunadamente HLS tiene un encabezado para este trabajo: "ap_int.h" contiene entero ancho personalizado y fijo de punto los tipos de datos.
Ahora a la última parte, los coeficientes. Los coeficientes se obtuvieron en Matlab y se utilizará en HLS. Si los coeficientes se especifican solamente una vez, podemos especificarlo como constantes en el comienzo de la función. Si queremos cambiar los coeficientes podemos dejar en las discusiones, pero el almacenamiento debe ser un tipo de ROM/RAM de doble puerto, puesto que la optimización requiere.
El primer filtro digital será un filtro FIR de 65 puntos.
El tipo de fir_t se utilizará para el tipo de datos de punto fijo. Necesitamos un registro de almacenamiento para los datos de entrada, un registro temporal y un registro de almacenamiento de información para la suma de productos.
El registro de la suma debe tener un tamaño que puede manejar 24b 65 * 24b valores sumed.
Necesitamos definir los coeficientes del filtro como (los valores pueden ser copiados de Matlab):
En un bucle infinito almacenar los valores de entrada, convertirlos y proceder a la operación de MAC.
Último pero no menos importante tenemos que convertir el valor de punto fijo en el bucle de entero con signo.
Ahora es el momento para C síntesis. Podemos ver (Figura 1) que fue utilizada sólo una pequeña cantidad de los recursos y el tiempo estimado es de 15.33ns. Podemos optimizar el filtro por canalización el almacenamiento y loops MAC con
Del mismo modo, se puede hacer el filtro IIR.
Esta vez el proceso es el siguiente:
- Cambiar los registros de entrada y almacenar el valor siguiente.
- Escriba las operaciones de MAC (para los registros de entrada y salidas).
- cambiar el registro de salida y almacenar el resultado.
- volver a la salida.
La última imagen muestra la estructura de synthesiyed después de la canalización del filtro.