Skip to content
Snippets Groups Projects
Commit d2cfbdeb authored by Justine BRISSART's avatar Justine BRISSART
Browse files

TP_filtre_EL_BARI_BRISSART

parent bdcb4c91
No related branches found
No related tags found
No related merge requests found
......@@ -8,8 +8,8 @@
## Questions
### Question filtre 1 : Combien de processus sont utilisés et de quelles natures sont-ils ? Comment les différenciez-vous ?
On utilise deux processus explicites: process (I_clock,I_reset) et process (SR_currentState, I_inputSampleValid, I_processingDone). Le premier processus est séquentiel synchrone car il utilise l'horloge CLK et sert à mémoriser l'état courant SR_currentState et change d'état à chaque rising edge de l'horloge. De plus il peut aussi retourner à l'état initial si reste vaut 1.
Le second est sans horloge et est donc combinatoire, il sert à calculer la valeur du prochain état en fonction de l'état courant et des entrées.
On utilise deux processus explicites: process (I_clock,I_reset) et process (SR_currentState, I_inputSampleValid, I_processingDone). Le premier processus est séquentiel synchrone car il utilise l'horloge CLK et sert à mémoriser l'état courant SR_currentState et change d'état (le mets à jour) à chaque rising edge de l'horloge. De plus il peut aussi retourner à l'état initial si reste vaut 1.
Le second est sans horloge et est donc combinatoire, il sert à calculer la valeur du prochain état (SR_nextState) en fonction de l'état courant et des entrées. (ex : I_inputSamplevalid, I_processingDone)
Ensuite, on utilise 7 autres processus implicites qui sont combinatoires. Ces processus sont:
O_loadShift, O_initAddress, O_incrAddress, O_initSum, O_loadSum, O_loadOutput et O_FilteredSampleValid.
......@@ -17,15 +17,34 @@ Ensuite, on utilise 7 autres processus implicites qui sont combinatoires. Ces pr
### Question filtre 2 : La simulation vous permet-elle de valider votre description VHDL ? Justifiez.
ca valide
Oui la simulation valide notre description VHDL car on retrouve la séquence d'entiers signés attendu en sortie.
### Question filtre 3 : Validez-vous la conception de l’unité de contrôle ?
Oui, on valide la conception de l'unité contrôle. On a effectivement fait des tests avec des tone generator à 150 Hz (grave) et 3kHz (aigu) sachant que la fréquence de coupure du filtre est de 300Hz. On remarque que pour 150Hz le son est peu modifié et atténué par le filtre passe-bas tandis que pour 3kHz, on a une réelle modification et atténuation du son. En jouant avec les bits (suppression des bits), le son est atténué et grésille. On précise que conserver seulement les bits de poids fort implique une perte de résolution mais une conservation de l'information fréquentielle, c'est-à dire de l'enveloppe. C'est l'inverse quand on conserve seulement les bits de poids faibles.
On entends bien à l'oreille, lorsqu'on joue sur la supression des bits. On retrouve donc le comportement attendu du filtre
### Question filtre 4 : Combien de processus sont utilisés et de quelles natures sont-ils ?
Il y a 4 processus explicites séquentiels et 5 processus implicites combinatoires.
Les processus explicites sont:
shift : process (I_clock, I_reset): gère le registre à décalage.
incr_address : process (I_clock, I_reset): implémente l'adresse de lecture des coefficients.
sum_acc : process (I_clock, I_reset): cumule les produits successifs.
store_result : process (I_clock, I_reset): stocke le résultat final.
Les processus implicites sont :
O_processingDone <= '1' when SR_readAddress = 15 else '0';
SC_multOperand1 <= SR_shiftRegister(SR_readAddress); -- 16 bits
SC_multOperand2 <= SR_coefRegister(SR_readAddress); -- 16 bits
SC_MultResult <= SC_multOperand1* SC_multOperand2; -- 32 bits
SC_addResult <= resize(SC_MultResult, SC_addResult'length) + SR_sum;
### 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
On remarque un bit de décalage dans la sortie du filtre. Cela est dû à un problème d'arrondi lors du tronquage des résultats sur le bit 14 notamment. Pour résoudre ce problème, observe le bit 14 qui correspond au prochaiin bit après les bits conservés: Si ce bit vaut 1, on ajoute 1 à la partie conservée ( arrondi supérieur); sinon on garde la valeur telle quelle pour faire l'arrondi inférieur. Ainsi, on prconserve un résultat de sortie cohérent pour ce filtre.
if SR_sum(14) = '1' then
SR_filteredSample <= SR_sum(30 downto 15) + 1;
else
SR_filteredSample <= SR_sum(30 downto 15);
### Question filtre 6 : Validez-vous la conception de l’unité opérative ? Sinon, quel élément pose problème ? Comment pouvez-vous le corriger ?
Oui, nous validons la conception de l'unité opérative. Suite à la génération du bitstream, on obtient bien un son filtré. Comme précédemment, on repère plus facilement les effets des manipulations sur la carte sur un signal à 3kHz qu'à 150 Hz (on rappelle que la fréquence de coupure est de 300 Hz).
......@@ -147,7 +147,11 @@ begin
SR_filteredSample <= (others => '0');
elsif rising_edge(I_clock) then
if I_loadOutput = '1' then
SR_filteredSample <= SR_sum(30 downto 15)+ to_signed(SR_sum(14),16);
if SR_sum(14) = '1' then
SR_filteredSample <= SR_sum(30 downto 15) + 1;
else
SR_filteredSample <= SR_sum(30 downto 15);
end if;
end if;
end if;
end process store_result;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment