I.17. Conclusion
La présentation faite dans ce chapitre nous donne un
large aperçu sur les filtres numérique notamment les filtres
à réponse impulsionnelle fini (RIF), aussi cela nous a permis de
mettre en avant les différents structure de ces filtre, ainsi qu'un
aperçu sur leur implémentation physique.
III.1 Introduction
Parce que L'objectif de notre projet est la conception d'un
filtre FIR, nous avons introduit dans les chapitres précédents
une étude générale sur ces filtres, ainsi que les moyens
mis en oeuvre pour l'aboutissement de notre travaille.
Dans ce chapitre nous allons présenter les solutions
adoptées pour répondre aux objectifs de ce mémoire, nous
exposerons dans les paragraphes suivants la conception détaillée
de chaque étape de développement. Nous présenterons alors,
les différentes techniques de programmation que nous avons
utilisées pour réaliser le filtre que selon plusieurs
configurations. Aussi nous détaillerons les testes et simulations
à chaque étape pour valider notre travaille.
Nous utiliserons dans cette démarche le logiciel ModelSim
SE 6.3f pour la simulation comportementale, et ISE Xilinx 8.1 pour la
synthèse et l'implémentation.
Pour développer toute application à l'aide de
ModelSim, il faut suivre la démarche cidessous :
v' Créer un projet ModelSim ;
v' Créer des fichiers d'édition pour écrire
la description du circuit ; v' Compiler les fichiers et corriger les erreurs
;
v' Créer des testbenchs si nécessaire (les
compilés et les vérifiés) ;
v' Lancer la simulation à partir du fichier principal
sinon du testbench ;
v' Dans la fenêtre du visualiser, il faut ajouter les
signaux pour affichage ;
+ Si aucun testbench n'est réalisé, il faut
donner à chaque entrée du circuit les
stimuli appropriés ;
1' Exécuter la simulation pour le temps nécessaire
à la vérification.
Selon la topologie utilisée du Filtre FIR, nous pouvons
réaliser plusieurs descriptions, dans les paragraphes suivants nous
exposerons certaines d'entre elles.
III.2. Méthode avec structure
parallèle
La structure commune d'un filtre numérique RIF est
constituée généralement des éléments
suivants :
· Un ou plusieurs organes de retard (se sont des
registres à décalage ou des mémoires temporelles
pilotés par une horloge) correspondant à une sortie égale
à l'entrée retardée de k périodes
d'échantillonnage.
· Des registres fournissent les coefficients du
filtre.
· Des opérateurs arithmétiques
(additionneurs et multiplieurs).
Pour accélérer le temps de conception, on peut
utiliser des fonctions spécifiques de la bibliothèque du logiciel
de simulation ModelSim, comme l'addition, la multiplication
qui permettent de faire ces opérations pendant un cycle d'horloge. La
sortie y[n] est la somme de l'échantillon
d'entrée présent x[n] multiplié par le
coefficient a0 et de l'échantillon
précédent
x[n-1] multiplié par le coefficient
a1 et tous les échantillons d'entrée
précedents jusqu'au temps [n-N+1] multipliés par
leur facteur respectif. (Figure III.1).
Entrée x(n)
a0 a1 a2 a3 a4
Reg
Reg
Reg
Reg
aN+1
Reg
La sortie y(n)
Figure III.1 : structure général
d'un filtre RIF
III.2.1. Filtre RIF du 1er ordre :
a) Structure
La structure d'un filtre RIF du 1ére ordre est
illustrée dans la figure III.2 avec k la largeur de bus d'entrée
et de la sortie mais aussi celui des coefficients, ce filtre est composé
de deux coefficients et un élément mémoire (figure
III.2).
Xin(n)[k]
Process
CLK
X_int[k]
[k] [k]
Yout(n) [k]
[2*k]
Reg_0[2*k]
Regy[2*k+1]
DIV
Figure III.2 : bloc digramme d'un filtre RIF 1
ère La sortie de ce type de filtre est donnée par :
Y'n)=a0x(n) +a1x (n-1)
Le 1ére échantillon xin multiplier
par le coefficient a0 donne un bus de largeur [2*k], la propagation de
l'entré sur le registre permet de temporiser l'entrée x(n) se qui
permet de créer la valeur x(n-1) soit xint (figure III.2). Cette valeur
est multipliée par a1 ce qui donne un bus de méme largeur comme
l'opération précédente, la somme des deux résultats
de multiplication intermédiaire s'exprime en sortie avec des
données de largeur [2*k+1], et pour
avoir une sortie avec une largeur [k], il faut diviser la
sortie sur [2*k+1] par 2k ou bien supprimer les k dernier bits
à droite, tel que :
_
Le programme ci-dessous permet décrit le fonctionnement
d'un filtre RIF du premier o
y
ordre.
-- Déclaration de la bibliothèque
library ieee;
Use ieee.std_ logic_1164.all;
Use ieee.numeric_std.all;
-- Déclaration de l'entité
entity FIRFilter is
generic( word_size:integer := 4 );
port ( clk : in std_logic;
a_0, a_1: in unsigned(word_size-1 downto 0);
x_in : in unsigned(word_ size-1 downto 0);
y_out : out unsigned(word_ size-1 downto 0));
end entity;
-- Déclaration de l'architectur
Architecture FIRFilter of FIRFilter is
--Déclaration des registres
intérmédiaires
signal reg_0 : unsigned(2*word_size-1 downto 0):=(others <=
'0');
signal reg_y : unsigned(2*word_size downto 0) :=( others <=
'0');
signal x _int : unsigned(word _size-1 downto 0):= ( others <=
'0');
begin
Process (clk)
begin
if clk'event and clk='1' then
x_int <= x_in ;
reg_0 <= ((x_int * a_1));
End if;
end process;
reg_y <= ((x_in * a_0)) + ('0'& reg_0);
y_out <= reg_y(2*word_size-2 downto word_size-1);
end architecture;
|
|
Au début du code nous trouvons la déclaration
de la bibliothèque, qui contient des définitions des types de
signaux et des fonctions arithmétiques. Juste après, la
déclaration l'entité est faite pour définir les
entrées, les coefficients du filtre et la sortie, L'instruction
GENERIC permet de spécifié les paramètres du
code, dans notre exemple nous déclarons la
largeur des bus d'entrée/sortie comme
générique pour permettre leur modification. L'architecture
contient les instructions qui décrivent le fonctionnement du filtre,
l'instruction « clk' event and clk ='1' » synchronise
l'exécution des instructions sur le front montant, le process permet
entre autre la mémorisation de la donnée x(n-1).
La figure suivante montre la structure du code VHDL sous le
logiciel Active-HDL 8.1, elle montre la décomposition du code dans ces
différentes déclarations.
Figure III.3 : Décomposition
fonctionnelle d'un filtre RIF 1 ère ordre sous Active-HDL
|