Etape 11 : En utilisant les filtres de HLS ou le compilateur de sapin
Depuis j’ai eu une expérience antérieure avec la construction du filtre en C/C++, j’ai choisi le programme Vivado HLS d’appliquer les filtres.
La fonction de filtre doit avoir un en-tête comme suit :
Première nous allons avoir un regard sur les arguments de la fonction. Quel type de données nous choisir ? Si ce serait partie d’un programme de PC, puis les types de données ne serait pas une bonne partie d’un souci (nous pourrions choisir double ou float), mais nous voulons synthétiser au matériel, donc la largeur des données est un sujet de préoccupation. La feuille de données ADS1299 spécifie le type de données exact : 24 b données signées (complément à 2 s), donc ce serait un gaspillage d’utiliser 64 ou 32 b floating point de données.
Heureusement, HLS possède un en-tête juste pour ce travail - « ap_int.h » contient une largeur personnalisée entier et fixe des types de données de point.
Maintenant à la dernière partie, les coefficients. Les coefficients ont été générés dans Matlab et serviront à HLS. Si les coefficients sont spécifiés qu’une seule fois, on peut les spécifier en tant que constantes au début de la fonction. Si nous voulons changer les coefficients nous pouvons laisser dans les arguments, mais le stockage doit être un port double type de RAM/ROM puisque l’optimisation l’exige.
Le premier filtre numérique sera un filtre de sapin de 65 points.
Le type fir_t sera utilisé pour le type de données de point fixe. Nous avons besoin d’un registre de stockage pour les données d’entrée, un registre temporel et un registre de stockage pour la somme de produits.
Le registre de la somme doit avoir une taille qui peut gérer 24 b 65 * 24 b valeurs sumed.
Nous devons définir les coefficients du filtre comme (les valeurs peuvent être copiés à partir de Matlab) :
Dans une boucle infinie nous stocker les valeurs d’entrée, les convertir et procéder à l’opération de MAC.
Enfin et surtout, il faut convertir la valeur de point fixe entier signé dans la boucle.
Il est maintenant temps pour la synthèse de C. Nous pouvons voir (Figure 1) que seulement une petite quantité a été utilisée sur les ressources et le calendrier estimatif est 15.33ns. Nous pouvons optimiser le filtre en canalisant le stockage et les boucles de MAC avec
De même, le filtre IIR peut être fait.
Cette fois-ci le processus est comme suit :
- Décaler les registres d’entrée et de stocker la valeur suivante.
- Écrire les opérations MAC (pour les registres d’entrée et de sortie).
- la sortie Registre à décalage et stocker le résultat.
- retourne la sortie.
La dernière photo montre la structure de synthesiyed après traitement en pipeline le filtre.