### Question filtre 1 : Combien de processus sont utilisés et de quelles natures sont-ils ? Comment les différenciez-vous ?
Il y a deux processus :
- Le premier est séquentiel :
Il prend en entrée I_reset et I_clock
A chaque front montant de l'horloge il vérifie si I_reset = 1 si c'est le cas SR_currentState prend la valeur WAIT_SAMPLE sinon il prend la valeur SR_nextState.
Il y a deux processus :
- Le premier est séquentiel :
Il prend en entrée `I_reset` et `I_clock`
À chaque front montant de l'horloge, il vérifie si `I_reset = 1` si c'est le cas SR_currentState prend la valeur `WAIT_SAMPLE` sinon il prend la valeur SR_nextState.
- Le deuxième est combinatoire :
Il prend en entrée SR_currentState, I_inputSampleValid, et SR_currentState.
Ce process SR_nextState en fonction des entrées
Il prend en entrée `SR_currentState`, I_inputSampleValid, et `SR_currentState`.
Ce process détermine `SR_nextStat`e en fonction des entrées
### Question filtre 2 : La simulation vous permet-elle de valider votre description VHDL ? Justifiez.
En vérifiant les valeurs prises par SC_filteredSample avec les valeurs spécifiées dans le site,on valide notre description VHDL
On vérifie également la bonne succession des différents états et leurs bons emplacement.
En vérifiant les valeurs prises par `SC_filteredSample` avec les valeurs spécifiées dans le site,on valide notre description VHDL
On vérifie également la bonne succession des différents états et leurs bons emplacements.
### Question filtre 3 : Validez-vous la conception de l’unité de contrôle ?
Ona testé notre filtre avec à l'aide de la carte FPGA et un wave generator , on remarque qu'il y a une atténuation pour les fréquences supérieures à 300 Hz.
On a testé notre filtre à l'aide de la carte FPGA et un wave generator, on remarque qu'il y a une atténuation pour les fréquences supérieures à 300 Hz.
On vérifie bien qu'il s'agit d'un filtre passe bas de fréquence de coupure 300Hz.
### Question filtre 4 : Combien de processus sont utilisés et de quelles natures sont-ils ?
Il y'aseul type de processus dans l'unité opérative qui est séquentiel :
- Le processus qui ...
-Le processus qui ...
### Question filtre 5 : La simulation vous permet-elle de valider votre description VHDL ? Sinon, quel élément pose problème ? Comment pouvez-vous le corriger ? Justifiez
Oui, marche bien. on retrrouve les bonnes valeurs.
- 1er problème :
-Register to store the accumulated value if the loadSum is active t also reduces the width of the sum to fit to the input and output
-- signal widths (be careful with truncating/rounding)
sum_acc : process (I_clock,I_reset) is
Dans **operativeUnit.vhd**, il n’y a qu’un seul type de processus : **séquentiel** (sensibles à `I_clock` et `I_reset`). On distingue notamment :
***shift** : registre à décalage des échantillons (`SR_shiftRegister`), chargé par `I_loadShift`.
***incr\_address** : compteur d’adresse de lecture (`SR_readAddress`), piloté par `I_incrAddress`/`I_initAddress`.
***sum\_acc** : accumulateur partiel (`SR_sum`), initialisé par `I_initSum` et chargé par `I_loadSum`.
***store\_result** : réduction de largeur et arrondi du résultat MAC vers `SR_filteredSample`.
Aucun processus combinatoire n’est présent dans cette unité.
### Question filtre 5 : La simulation vous permet-elle de valider votre description VHDL ? Sinon, quel élément pose problème ? Comment le corriger ?
Oui, globalement :
* Lorsqu'on lance la simulation qui teste le filtre en mettant en entrée une implulsion, on retrouve bien en sortie les coefficients du filtre.
* Les signaux intermédiaires (produit du multiplier, accumulation, arrondi) donnent bien les valeurs attendues.
* Les problèmes qu'on a rencontré : Dans un premier temps, on a oublié la conversion de 36 bits à 16 bits de la sortie du process `store_result`. Dans un deuxième temps, on a réglé ce problème en prenant les 16 bits des poids les plus forts, et effectivement, on retrouve après cette modification les bonnes valeurs en sortie du filte en simulant ce dernier avec une impulsion en entrée. Ensuite pour plus de précision, on regarde le bit numéro 14,s'il est égale à un, `SR_filteredSample <= SC_addResult(30 downto 15) + 1`, sinon : `SR_filteredSample <= SC_addResult(30 downto 15)`. Cela permet à `SR_filteredSample` de prendre la valeur de l'entier le plus proche de `SC_addResult(30 downto 15)`, au lieu de sa partie entière.
### Question filtre 6 : Validez-vous la conception de l’unité opérative ? Sinon, quel élément pose problème ? Comment le corriger ?
Oui.
* La réponse impulsionnelle mesurée en simulation correspond à la réponse théorique d’un filtre FIR ayant 16 coefficients.
* On teste également à l'aide de la carte FPGA notre filtre passe-bas de fréquence de coupure de 300Hz. À l'aide d'Online Tone Generator, on génère des signaux avec des féquences supériur et inférieurs à 300 Hz et on remarque que les fréqeunces supérieures à 300 Hz sont atténuées. Ce qui valide notre conception de l'unité opérative.
### Bonus:
Après avoir réalisé et valider le filtre passe bas, le bonus consiste maintenant à réaliser un filtre passe haut de fréquence de coupure 1000 Hz. Le calcul de la convolution cette fois-ci est fait sur une fenêtre de 33 coefficients.
Pour réaliser ce filtre, on a utilisé l'unité de contrôle du filtre précedent sans y faire de modifications. On a utilisé également le fichier de `OperativeUnit` du filtre précedent, on a du changer la taille du tableau où on stocke les coefficients de 16 à 33, et changer la taille du registre à décalage aussi de 16 à 33. On a également effectué d'autres changements dans le code.
D'autre part les coefficients du filtre passe-haut ont été générés à l'aide de Matlab.
### Question filtre 6 : Validez-vous la conception de l’unité opérative ? Sinon, quel élément pose problème ? Comment pouvez-vous le corriger ?
% Print as to_signed(<integer>, q)
fori=1:n
coeff_int=round(fLPq(i)*2^(q-1));
fprintf('to_signed(%d, %d),\n',coeff_int,q);
end
```
Pour valider la conception et la réalisation de notre filtre, on a effectué la simulation, on retrouve les valeurs des 33 coefficients du filtre, ce qui valide partiellement notre filtre.
On teste également à l'aide de la carte FPGA notre filtre passe-haut de fréquence de coupure de 1000Hz. À l'aide d'Online Tone Generator, on génère des signaux avec des fréquences supérieures et inférieures à 1000 Hz et on remarque que les fréquences inférieures à 1000 Hz sont atténuées. Ce qui valide notre conception de l'unité opérative.