Accélération de la Convolution sur FPGA
Accélération de la Convolution sur FPGA
De nombreuses opérations de traitement d'image telles que le redimensionnement et la rotation nécessitent un rééchantillonnage ou
filtrage par convolution pour chaque pixel de l'image. Les convolutions sur les images numériques sont importantes
puisqu'ils représentent des opérations qui sont plus générales que les opérations qui peuvent être effectuées
sur les images analogiques. La convolution a de nombreuses applications qui ont une grande signification dans le discret
traitement du signal. Il est généralement difficile de traiter des signaux analogiques. Par conséquent, les signaux sont convertis
à l'état numérique. Le filtrage des signaux est très important pour déterminer lequel accepter.
et lequel rejeter, et tout cela se fait par convolution.
Cet article présente une méthode directe de réduction du temps de traitement de la convolution en utilisant
Le circuit est testé en l'intégrant dans un FPGA de niveau supérieur. De plus, le circuit présenté utilise moins
consommation d'énergie et délai de l'entrée à la sortie. Il fournit également la modularité nécessaire,
expansibilité et régularité pour former différentes convolutions pour un nombre quelconque de bits.
CHAPITRE 1
INTRODUCTION
1.1 Introduction
La convolution fournit le cadre mathématique pour le DSP. C'est le plus important.
technique en traitement du signal numérique. La convolution est une méthode mathématique pour combiner deux
signaux pour former un troisième signal. En utilisant la stratégie de décomposition d'impulsions, les systèmes sont
décrit par un signal appelé la réponse impulsionnelle. Dans le traitement du signal, la réponse impulsionnelle, ou
La fonction de réponse impulsionnelle (FRI) d'un système dynamique est sa sortie lorsqu'il est présenté avec une brève
signal d'entrée, appelé une impulsion. Plus généralement, une réponse impulsionnelle fait référence à la réaction de tout
of the product of the two functions after one is reversed and shifted. As such, it is a particular
sorte detransformée intégrale:
Bien que le symbole soit utilisé ci-dessus, il ne doit pas nécessairement représenter le domaine temporel. Mais dans ce contexte, le
La formule de convolution peut être décrite comme une moyenne pondérée de la fonction ƒ(τ) au moment t.
où le poids est donné par g(−τ) simplement décalé par un montant t. À mesure que cela change, le poids
La fonction met l'accent sur différentes parties de la fonction d'entrée.
Plus généralement, iffandgare des fonctions à valeurs complexes sur Rd, alors leur convolution peut être
Convolution linéaire
Convolution circulaire
Les domaines du traitement du signal. La convolution décrite ci-dessus n'est rien d'autre qu'une convolution linéaire.
L'application la plus populaire est la détermination du signal de sortie d'un système linéaire à temps invariant
système en convoluant le signal d'entrée avec la réponse impulsionnelle du système. Convoluer deux
les signaux sont équivalents à multiplier la transformée de Fourier des deux signaux.
MathematicalFormula:
La convolution linéaire de deux signaux en temps continu et est défini par
Pour les signaux à temps discret x(n) et h(n), l'intégration est remplacée par une sommation.
1.3.2 Convolution circulaire
La convolution circulaire de deux fonctions apériodiques se produit lorsque l'une d'elles est convoluée dans le
façon normale avec unsommation périodiquede l'autre fonction. Cela se produit naturellement danssignal numérique
Pour une fonction périodique xT(t), avec la période T, leconvolutionavec une autre fonction, h(t), est également
périodique, et peut être exprimé en termes d'intégration sur un intervalle fini comme suit :
[1]
Où, toest un paramètre arbitraire, ethT(t) est unsomme périodiqueofh, défini par :
Quand?T(t) s'exprime comme lesommation périodiqued'une autre fonction, x, cette convolution est
Cette section décrit les propriétés de la convolution. Les propriétés de la convolution sont :
Commutatif
Associatif
Distributif
1.4.1 Propriété commutative :
La propriété commutative pour la convolution s'exprime sous forme mathématique :
a[n]*b[n]=b[n]*a[n]
En mots, l'ordre dans lequel deux signaux sont convolués ne fait aucune différence, les résultats sont
identique.
La propriété associative est utilisée dans la théorie des systèmes pour décrire comment les systèmes en cascade se comportent. Deux ou plusieurs
on dit que les systèmes sont en cascade si la sortie d'un système est utilisée comme entrée pour le système suivant.
la propriété associative, l'ordre des systèmes peut être réarrangé sans changer la réponse globale de
la cascade. De plus, tout nombre de systèmes en cascade peut être remplacé par un seul système. L'impulsion
La réponse du système de remplacement est trouvée en convoluant les réponses impulsionnelles de tous les originaux.
systèmes.
La propriété distributive décrit l'opération de systèmes parallèles avec des sorties supplémentaires. Deux ou plusieurs
les systèmes peuvent partager la même entrée, x[n], et avoir leurs sorties additionnées pour produire y[n]. La distributivité
la propriété permet à cette combinaison de systèmes d'être remplacée par un seul système, ayant une réponse impulsionnelle
En statistiques, comme mentionné ci-dessus, une moyenne mobile pondérée est une convolution.
Dans la théorie des probabilities, la distribution de probabilité de la somme de deux variables aléatoires indépendantes
la table lorsque vous tenez votre main entre la table et une source de lumière) est la convolution de
la forme de la source de lumière qui projette l'ombre et l'objet dont l'ombre est projetée
Un photographie floue est la convolution de l'image nette avec la forme de la
diaphragme iris. Le terme photographique pour cela est bokeh.
De même, dans le traitement d'images numériques, le filtrage par convolution joue un rôle important dans de nombreux
algorithmes importants dans la détection de contours et les processus associés.
In linear acoustics, an echo is the convolution of the original sound with a function
représentant les divers objets qui le reflètent.
Dans la réverbération artificielle (traitement du signal numérique, audio professionnel), la convolution est utilisée pour mapper
la réponse impulsionnelle d'une vraie pièce sur un signal audio numérique (voir le point précédent et le point suivant pour
additional information).
En ingénierie électrique et dans d'autres disciplines, la sortie (réponse) d'un système (stationnaire ou temporel)
ou système linéaire invariant dans le temps) est la convolution de l'entrée (excitation) avec le système
réponse à un impulsion ou fonction delta de Dirac. Voir la théorie des systèmes LTI et le signal numérique
traitement.
Dans la spectroscopie de fluorescence résolue dans le temps, le signal d'excitation peut être traité comme une chaîne de
pulses delta, et la fluorescence mesurée est une somme des décroissances exponentielles de chaque delta
pouls.
En physique, partout où il y a un système linéaire avec un "principe de superposition", une convolution
l'opération fait une apparition.
Dans le traitement du signal numérique, le filtrage fréquentiel peut être simplifié en convoluant deux
fonctions (données avec un filtre) dans le tempsdomaine, qui est analogue à multiplier les données
avec un filtre dans le domaine de la fréquence
CHAPITRE 2
Revuedelittérature
2.1 Introduction
L'opération la plus importante réalisée sur les signaux est le filtrage linéaire, qui peut être
réalisé par convolution. La raison pour laquelle le filtrage linéaire est si important pour le traitement du signal est
qu'il résout de nombreux problèmes et qu'il est relativement simple à décrire mathématiquement. Dans ce chapitre
nous allons examiner la convolution. La convolution aide à déterminer l'effet qu'un système a sur un
signal d'entrée. Il peut être démontré qu'un système linéaire et invariant dans le temps est complètement caractérisé par
sa réponse impulsionnelle. En utilisant la propriété d'échantillonnage de la fonction delta pour le temps continu
signaux et l'échantillon unitaire pour les signaux en temps discret, nous pouvons décomposer un signal en une infinité
somme / intégrale d'impulsions mises à l'échelle et décalées. En sachant comment un système affecte un seul
impulsion, et en comprenant comment un signal est constitué d'impulsions mises à l'échelle et additionnées, cela
Il semble raisonnable qu'il devrait être possible de mettre à l'échelle et de sommer les réponses impulsionnelles d'un système dans
pour déterminer quel signal de sortie résultera d'une entrée particulière. C'est précisément ce que
la convolution fait - la convolution détermine la sortie du système à partir de la connaissance de l'entrée et
la réponse impulsionnelle du système.
L'idée de la convolution en temps discret est exactement la même que celle de la convolution en temps continu.
Pour cette raison, il peut être utile de regarder les deux versions pour vous aider à comprendre cela.
concept extrêmement important. La convolution est un outil très puissant pour déterminer un système.
sortie d'une connaissance d'une entrée arbitraire et de la réponse impulsionnelle du système.
Nous savons que tout signal en temps discret peut être représenté par une sommation de valeurs mises à l'échelle et
impulsions discrètes décalées. Puisque nous supposons que le système est linéaire et invariant dans le temps,
il semblerait raisonnable qu'un signal d'entrée composé de la somme d'impulsions mises à l'échelle et décalées
donnerait lieu à une sortie composée d'une somme de réponses impulsionnelles mises à l'échelle et décalées. Cela est
exactement ce qui se passe dans la convolution.
Pour les signaux en temps discret et l'équation de convolution est donnée par :
Interprétation Graphique :
Réflexion de en résultant
Changement de aboutissant à
Multiplication élément par élément des séquences et
Somme de la séquence de produits ce qui donne la valeur de convolution pour
linéarité.
Fig 3 : Nous utilisons maintenant la propriété d'invariance temporelle du système pour montrer qu'une entrée retardée
résultats dans une sortie de la même forme, seulement retardée de la même quantité que l'entrée.
Fig 4 : Nous utilisons maintenant la partie additive de la propriété de linéarité du système pour compléter le
image. Puisque tout signal à temps discret n'est qu'une somme d'impulsions à temps discret mises à l'échelle et décalées,
nous pouvons trouver la sortie en connaissant l'entrée et la réponse impulsionnelle.
en cours.
2.3.1 Dérivation de l'intégrale de convolution
Pour commencer cela, il est nécessaire d'énoncer les hypothèses que nous allons faire. Dans ce cas, le
les seules contraintes sur notre système sont qu'il soit linéaire et invariant dans le temps.
2. Une entrée d'impulsion décalée conduit à une sortie de réponse impulsionnelle décalée. Cela est dû au temps-
invariance du système.
3. Nous mettons maintenant à l'échelle l'entrée impulsionnelle pour obtenir une sortie impulsionnelle mise à l'échelle. Cela utilise le scalaire
nombre de réponses impulsionnelles mises à l'échelle. Cela utilise l'attribut additif de la linéarité.
5. Maintenant, nous reconnaissons que cette somme infinie n'est rien d'autre qu'un integral, donc nous convertissons les deux
côtés en intégrales.
6. Reconnaissant que l'entrée est la fonction f(t), nous reconnaissons également que la sortie est exactement le
intégrale de convolution.
Fig 1 : Nous commençons avec un système défini par sa réponse impulsionnelle, h(t).
Fig 2 : Nous considérons ensuite une version décalée de l'impulsion d'entrée. En raison de l'invariance temporelle du
Fig 4 : Nous pouvons maintenant utiliser l'aspect additif de la linéarité pour ajouter un nombre infini de ceux-ci, un
pour chaque τ possible. Puisqu'une somme infinie est exactement un intégral, nous aboutissons à l'intégration
connu sous le nom d'Intégrale de Convolution. En utilisant la propriété d'échantillonnage, nous reconnaissons le côté gauche
La convolution est un outil si important qu'elle est représentée par le symbole *, et peut être écrite
comme
En examinant de plus près l'intégrale de convolution, nous constatons que nous multiplions l'entrée.
signal par la réponse impulsionnelle inversée dans le temps et en intégrant. Cela nous donnera la valeur de la
sortie à une valeur donnée de t. Si nous décalons ensuite la réponse impulsionnelle inversée temporellement par un petit
montant, nous obtenons le résultat pour une autre valeur de t. En répétant cela pour chaque valeur possible de t,
produit la fonction de production totale. Bien que nous ne ferions jamais réellement ce calcul à la main dans
de cette manière, cela nous donne un aperçu de ce qui se passe réellement. Nous constatons que
nous inversions essentiellement la fonction de réponse impulsionnelle et la faisons glisser sur l'entrée
function, integrating as we go. This method, referred to as the graphical method, provides us with
une méthode beaucoup plus simple pour résoudre l'output pour des signaux simples (artificiels), tout en améliorant notre
intuitions pour les cas plus complexes où nous comptons sur les ordinateurs. En fait, Texas Instruments.
développe des processeurs de signal numérique qui possèdent des ensembles d'instructions spéciaux pour des calculs tels que
convolution.
2.4Convolution symétrique
Lethéorème de convolutionindique qu'une convolution dans le domaine réel peut être représentée
en tant quemultiplication point par pointà travers le domaine de fréquence d'untransformée de Fourier. Depuissinus et
transformées cosinusles transformations liées sont une version modifiée du théorème de convolution
appliqué, dans lequel le concept deconvolution circulaireest remplacé par une convolution symétrique.
Utiliser ces transformations pour calculer des convolutions symétriques discrètes n'est pas trivial puisquediscret
transformées sinusoïdales(DST) ettransformées cosinus discrètes(DCT) peuvent être contre-intuitifs
incompatible pour le calcul de la convolution symétrique, c'est-à-dire que la convolution symétrique ne peut être que
Il y a un certain nombre d'avantages à calculer des convolutions symétriques dans les DST et
DCTs par rapport à la convolution circulaire plus courante avec la transformée de Fourier.
Il est particulièrement remarquable que la symétrie implicite des transformations impliquées est telle que seules les données incapables de
être déduit par la symétrie est requis. Par exemple, en utilisant une DCT-II, un signal symétrique doit
n'avoir que la moitié positive de la DCT-II transformée, puisque le domaine fréquentiel sera implicitement
construire les données miroitées comprenant l'autre moitié. Cela permet des noyaux de convolution plus grands à
être utilisé avec le même coût que des noyaux plus petits convolués circulairement sur le DFT. Aussi le
Les conditions aux limites implicites dans les DST et DCT créent des effets de bord qui sont souvent plus dans
en gardant les données voisines plutôt que les effets périodiques introduits par l'utilisation de la Fourier
transformer.
BASES DU VHDL
Entités de conception et configurations
L'entité de conception est la principale abstraction matérielle dans VHDL. Elle représente
une portion d'une conception matérielle qui a des entrées et des sorties bien définies et qui effectue une
fonction bien définie. Une entité de conception peut représenter un système entier, un sous-système, un
carte, une puce, une macro-cellule, une porte logique ou tout niveau d'abstraction intermédiaire.
La configuration peut être utilisée pour décrire comment les entités de conception sont assemblées pour former un
design complet.
Une entité de conception peut être décrite en termes d'une hiérarchie de blocs, chacun d'eux
représente une partie de l'ensemble du design. Le bloc de niveau supérieur dans une telle hiérarchie est le
concevoir l'entité elle-même ; un tel bloc est un bloc externe qui réside dans une bibliothèque et peut être
utilisé comme un composant d'autres conceptions. Les blocs imbriqués dans la hiérarchie sont des blocs internes,
Une déclaration d'entité définit l'interface entre une entité de conception donnée et le
environnement dans lequel il a été émis. Il peut également spécifier des déclarations et des énoncés qui sont
partie de l'entité de conception. Une déclaration d'entité donnée peut être partagée par de nombreux designs
entités, chacune ayant une architecture différente. Ainsi, une déclaration d'entité peut
représenter potentiellement une classe d'entités de conception, chacune ayant la même interface.
entity_declaration ::=
identifiantentitéest
en-tête_d'entité
partie_déclarative_de_l'entité
[début
partie_de_l'énoncé_d'entité
fin[entité] [nom_entité_simple] ;
1.1.1 Génériques :
Les génériques fournissent un canal pour que des informations statiques soient communiquées à un bloc depuis son
environnement. Ce qui suit s'applique à la fois aux blocs externes définis par des entités de conception et
aux blocs internes définis par le bloc
déclarations.
generic_list ::=generic_interface_list
Les génériques d'un bloc sont définis par une liste d'interfaces génériques. Chaque élément d'interface dans
une telle liste d'interface générique déclare un générique formel.
1.1.2 Ports:
Les ports fournissent des canaux pour une communication dynamique entre un bloc et son environnement.
port_list ::=port_interface_list
architecture_body ::=
l'architectureidentificateurdel'entité_nomest
architecture_declarative_part
commencer
architecture_statement_part
fin[architecture] [nom_simple_de_l_architecture] ;
Une déclaration de sous-programme déclare une procédure ou une fonction, comme indiqué par le
une fonction est pure. Une fonction est impure si sa spécification contient le mot réservé
impur; sinon, on dit qu'il est pur. Un désignateur de procédure est toujours un identifiant. Un
un désignateur de fonction est soit un identifiant soit un symbole opérateur
La déclaration au sein d'un paquet peut être étendue à d'autres unités de conception.
package_declaration ::=
l'identifiant du paquet est
partie_déclarative_du_package
fin[paquet] [nom_simple_du_paquet] ;
1.3.4 Package bodies
Un corps de package définit les corps des sous-programmes et les valeurs des éléments différés.
Les types scalaires peuvent être classés en quatre types. Ils sont
-- Énumération
-- Entier
-- Physique
-- Nombre à virgule flottante
enumeration_type_definition ::=
( littéral_d_enumération { , littéral_d_enumération } )
physical_type_definition ::=
range_constraint
unités
primary_unit_declaration
{ secondary_unit_declaration }
unités de fin [nom_type_physique_simple]
les types sont utiles pour les modèles dans lesquels la caractérisation précise d'un point flottant
constrained_array_definition ::=
indication_de_sous-type_de_contraintes_d'index_de_tableau
La valeur d'un objet d'enregistrement est une valeur composite constituée des valeurs de ses éléments.
record_type_definition ::=
enregistrer
element_declaration
{ element_declaration }
fin enregistrement[nom_type_enregistrement_simple]
représentation des fichiers dans l'environnement du système hôte. La valeur d'un objet fichier est le
Si le symbole d'assignation ':=' suivi d'une expression est présent dans une constante
déclaration, l'expression spécifie la valeur de la constante ; le type de l'expression
doit être celle de la constante. La valeur d'une constante ne peut pas être modifiée après le
signal_kind ::=register|bus
[Link] Déclarations de variables
Une déclaration de variable déclare une variable du type spécifié. Une telle variable est
une variable déclarée explicitement.
variable_declaration ::=
[partagé]liste_identifiant_variable : indication_sous_type [ := expression ] ;
[Link] Déclarations de fichiers
Une déclaration de fichier déclare un fichier du type spécifié. Un tel fichier est une déclaration explicite.
fichier.
file_declaration ::=
fileidentifier_list : subtype_indication [ file_open_information ] ;
1.6 Operators:
array type whose element type is BIT or BOOLEAN. For the binary operatorsand,or,
nand, nor, xor, et xnor, les opérandes doivent être du même type de base. De plus, pour le
opérateurs binaires et, ou, nand, nor, xor, et xnor définis sur un tableau unidimensionnel
types, les opérandes doivent être des tableaux de la même longueur, l'opération est effectuée sur
éléments correspondants des tableaux, et le résultat est un tableau avec la même plage d'index que
l'opérande de gauche.
type de tableau dont le type d'élément est soit l'un des types prédéfinis BIT soit BOOLEAN.
sll Décaler à gauche type de tableau dont l'élément ENTIER Identique à gauche
logique le type est BIT ou BOOLEAN
Tout dimensionnel
srl Décaler à droite type de tableau dont l'élément ENTIER Même que à gauche
logique le type est BIT ou BOOLEAN
Tout unidimensionnel
sla Déplacement à gauche
type de tableau dont l'élément ENTIER Même que gauche
arithmétique le type est BIT ou BOOLEAN
Déplacer vers la droite
Tout dimensionnel ENTIER
sra arithmétique type de tableau dont l'élément Identique à gauche
le type est BIT ou BOOLEAN
Faire tourner à gauche
Tout dimension unidimensionnelle ENTIER
rol logique type de tableau dont l'élément Même que gauche
le type est BIT ou BOOLEAN
Une dimensionnelle
ror Rotate right array type whose element ENTIER Pareil à
le type logique est BIT ou gauche
BOOLEAN
[Link] d'opérateurs.
Les opérateurs d'addition + et Ð sont prédéfinis pour tout type numérique et ont leur
conventional mathematical meaning. The concatenation operator & is predefined for any
type de tableau unidimensionnel.
Opérande gauche Right operand Résultat
Opérateur Opération type Type Taper
+ Addition Tout numérique Même type
type Même type
- Soustraction Tout numérique Même type
taper Même type
Tout type de tableau Même tableau
& Même type de tableau type
N'importe quel tableau Même élément Même tableau
Concaténation type type type
L'élément Tout type de tableau Même tableau
type type
L'élément Tout élément n'importe quel tableau
Les opérateurs * et / sont prédéfinis pour tout type entier et tout type à virgule flottante et
ont leur signification mathématique conventionnelle ; les opérateurs mod et rem sont
prédefini pour tout type d'entier. Pour chacun de ces opérateurs, les opérandes et le résultat
sont du même type.
où la liste de sensibilité de l'instruction d'attente est celle qui suit le mot réservé
process. Such a process statement must not contain an explicit wait statement. Similarly,
si une telle déclaration de processus est un parent d'une procédure, alors cette procédure ne peut pas
contiennent une instruction d'attente.
wait_statement ::=
[ label : ]wait[ sensitivity_clause ] [ condition_clause ] [ timeout_clause ] ;
sensitivity_clause ::=onsensitivity_list
condition_clause ::=untilcondition
condition ::=boolean_expression
timeout_clause ::=fortime_expression
assertion ::=
conditionassert
[expressionderapport]
[severityexpression ]
[Link] Déclaration de rapport :
Une déclaration de rapport affiche un message.
report_statement ::=
[ label : ]
expression de rapport
[severityexpression ] ;
[Link] Instruction if :
Une instruction if sélectionne pour l'exécution une ou aucune des séquences englobées.
déclarations, en fonction de la valeur d'une ou plusieurs conditions correspondantes.
if_statement ::=
[if_label : ]
siconditionalors
sequence_of_statements
{elsifconditionthen
sequence_of_statements }
[sinon
sequence_of_statements ]
fin si[étiquette_si] ;
Si une étiquette apparaît à la fin d'une instruction if, elle doit répéter l'étiquette if.
Pour l'exécution d'une instruction if, la condition spécifiée après if, et tout
conditions specified afterelsif, are evaluated in succession (treating a finalelseaselsif
VRAI alors) jusqu'à ce qu'une évaluation soit à VRAI ou que toutes les conditions soient évaluées et donnent
case_statement ::=
[case_label : ]
expressiondecas
case_statement_alternative
{ case_statement_alternative }
fin du cas [étiquette_du_cas] ;
case_statement_alternative ::=
whenchoices =>
sequence_of_statements
L'expression doit être d'un type discret ou d'un type de tableau unidimensionnel
dont le type de base des éléments est un type de caractère. Ce type doit être déterminable
indépendamment du contexte dans lequel l'expression se produit, mais en utilisant le fait que le
l'expression doit être d'un type discret ou d'un type de tableau de caractères unidimensionnel. Chaque
le choix dans une instruction de cas doit être du même type que l'expression ; la liste
des choix spécifie pour quelles valeurs de l'expression l'alternative est choisie.
[Link] Instruction de boucle :
Une instruction de boucle comprend une séquence d'instructions qui doit être exécutée
iteration_scheme ::=
conditiondewhile
|forloop_parameter_specification
parameter_specification ::=
identifierplage_indiscrète
[Link] Prochaine déclaration :
Une instruction suivante est utilisée pour terminer l'exécution de l'une des itérations d'un
instruction de boucle englobante (appelée boucle dans le texte suivant). L'achèvement est
conditionnel si l'énoncé inclut une condition.
next_statement ::=
[ label : ]next[loop_label ] [whencondition ] ;
.return_statement ::=
[ label : ]return[ expression ] ;
[Link] Déclaration nulle
Une instruction nulle n'exécute aucune action.
null_statement ::=
[ label : ]null;
décrire le comportement général ou la structure d'un design. Les déclarations simultanées s'exécutent
Une instruction de bloc définit un bloc interne représentant une partie d'un design.
Les blocs peuvent être imbriqués de manière hiérarchique pour supporter la décomposition de la conception.
block_statement ::=
block_label :
bloc[ (expression_de_garde) ] [est]
block_header
partie_déclarative_du_bloc
début
partie_de_l'instruction_bloc
fin bloc[étiquette_bloc] ;
Si une expression de garde apparaît après le mot réservé bloc, alors un signal avec le
le nom simple GUARD de type prédéfini BOOLEAN est déclaré implicitement à la
début de la partie déclarative du bloc, et l'expression de garde définit la valeur
de ce signal à tout moment donné (voir 12.6.4). Le type de l'expression de garde doit être
type BOOLEAN. Le signal GUARD peut être utilisé pour contrôler le fonctionnement de certains
concurrent_procedure_call_statement ::=
[ label : ] [postponed] procedure_call ;
concurrent_signal_assignment_statement ::=
[ label : ] [postponed] conditional_signal_assignment
| [ label : ] [postponed] selected_signal_assignment
1.8.5 Attributions de signal conditionnelles :
L'affectation de signal sélectionnée représente une instruction de processus dans laquelle le signal
component_declaration ::=
componentidentifier [is]
[clause_générique_locale]
[local_port_clause ]
fin du composant[composant_nom_simple] ;
Chaque objet d'interface dans la clause générique locale déclare un générique local. Chaque
L'interface de l'objet dans la clause de port local déclare un port local. Si un nom simple apparaît à
la fin d'une déclaration de composant, elle doit répéter l'identifiant du composant
déclaration.
1.9.2 Déclarations d'instanciation de composants :
Une déclaration d'instanciation de composant définit un sous-composant de l'entité de conception
dans lequel il apparaît, associe des signaux ou des valeurs aux ports de ce sous-composant, et
associe des valeurs avec des génériques de ce sous-composant. Ce sous-composant est une instance
d'une classe de composants définie par une déclaration de composant correspondante, conception
unité_instanciée ::=
[component]component_name
|entityentity_name [ (architecture_identifier ) ]
|configurationconfiguration_name
CHAPITRE 3
Conceptiondumodèlematériel
3.1 Convolution
La convolution est un outil important dans le traitement des données, en particulier dans le traitement des signaux et des images numériques.
traitement. De nombreuses opérations de traitement d'image telles que le redimensionnement et la rotation nécessitent un rééchantillonnage
ou filtrage par convolution pour chaque pixel de l'image Les images numériques peuvent être modifiées (par
convolution) par des opérations de voisinage ; ces opérations vont au-delà des opérations ponctuelles, et
inclure le lissage, le renforcement et la détection des contours. La convolution a de nombreuses applications qui
have great significance in discrete signal processing. It is usually difficult to deal with analog
signaux. Ainsi, les signaux sont convertis en état numérique. De nombreuses approches ont été tentées pour
reduce the convolution processing time using hardware and software algorithms but they are
restreint à des applications spécifiques. Le principal problème dans la mise en œuvre et le calcul
la convolution est la vitesse, la surface et la puissance qui affectent tout système DSP. Accélérer la convolution
l'utilisation d'un langage de description matériel pour l'entrée de conception augmente (améliore) non seulement le
niveau d'abstraction, mais ouvre également de nouvelles possibilités d'utilisation des dispositifs programmables. Aujourd'hui,
la plupart des DSP souffrent de limitations dans l'espace d'adresses disponible, ou de la capacité à s'interfacer avec
systèmes environnants. L'utilisation de circuits intégrés reprogrammables sur le terrain à haute vitesse, c'est-à-dire les FPGA, ensemble
avec des DSP, il est souvent possible d'augmenter la bande passante du système, en fournissant des fonctionnalités supplémentaires à
DSPs à usage général. Dans ce projet, une méthode novatrice pour calculer la convolution linéaire de
Deux séquences de longueur finie sont présentées. Un circuit de convolution 4x4 peut être instancié pour plus grand.
Cette méthode est similaire à la multiplication de deux nombres décimaux, cette similarité que
rend cette méthode facile à apprendre et rapide à calculer.
3.2 Convolution dans le domaine temporel
Lorsque la convolution de deux signaux est effectuée dans le domaine temporel, elle est appelée convolution dans
domaine temporel. Nous traitons la convolution dans le domaine temporel dans ce projet. Dans le domaine temporel
la convolution peut également être continue ou discrète. Lorsque la convolution est dans le domaine temporel, c'est
discret alors on l'appelle convolutions dans le temps discret et quand la convolution est effectuée
en ce qui concerne le temps continu, on l'appelle convolution comme convolution en temps continu.
La convolution dans le temps discret et continu est décrite dans le chapitre précédent.
Lorsque deux signaux sont convolués dans le domaine de fréquence, on appelle cela la convolution dans
domaine de fréquence. Il est prouvé que la convolution dans le domaine temporel est équivalente à
multiplication dans le domaine de la fréquence.
Preuve :
Ainsi, il est prouvé que la convolution dans le domaine temporel est équivalente à la multiplication dans
domaine de fréquence.
simulé et vérifié pour tous les cas. La vérification fonctionnelle doit répondre aux exigences prévues
architecture et devrait passer tous les cas de test.
Une fois la vérification fonctionnelle claire, le modèle RTL sera soumis à la synthèse.
processus. Trois opérations seront réalisées dans le processus de synthèse, telles que
Traduire
Carte
Placement et Routage
et acheminé. Avant ces processus, les contraintes peuvent être données afin d'optimiser la conception.
Enfin, le fichier BIT MAP sera généré avec les informations de conception au format binaire.
qui sera déchargé dans la carte FPGA.
ci-dessous :
un multiplexeur peut être implémenté en utilisant deux multiplexeurs 2*1, et ainsi de suite. De même, un 8*1
Il est différent en ce sens qu'il rend toutes les étapes internes disponibles en tant que sorties. Par conséquent, un série
Le registre à décalage in/parallel-out convertit les données du format série au format parallèle. Si quatre bits de données
sont décalés de quatre impulsions d'horloge via un seul fil à l'entrée de données, ci-dessous, les données deviennent disponibles
simultanément sur les quatre sorties QUnà QDaprès la quatrième impulsion d'horloge.
L'application pratique du registre à décalage série/en parallèle est de convertir des données de série
format sur un seul fil au format parallèle sur plusieurs fils. Peut-être que nous allons éclairer quatre
LEDs (Diodes Électroluminescentes) avec les quatre sorties (QAQBQCQD).
Les détails ci-dessus du registre à décalage série-en/parallèle-sont assez simples. Cela ressemble à un série-
dans un registre à décalage série-sortie avec des prises ajoutées à chaque sortie de stade. Les données série se décalent à l'entrée SI
Après un nombre d'horloges égal au nombre d'étapes, le premier bit de données apparaît à SO
(QD) dans la figure ci-dessus. En général, il n'y a pas de broche SO. La dernière étape (QDci-dessus) sert de SO
et est transmis au paquet suivant s'il existe.
The shift register has been cleared prior to any data byCLR', an active low signal, which clears
tous les bascules D de type D dans le registre à décalage. Notez le motif de données en série 1011 présenté à la
SIinput. Ces données sont synchronisées avec l'horloge CLK. Ce serait le cas si elle est en cours de
déplacé à partir de quelque chose comme un autre registre à décalage, par exemple, un registre à décalage parallèle en/série.
registre (non montré ici). Sur la première horloge att1, le data1atSI est décalé de D à Q de la
première étape du registre à décalage. Après t2, ce premier bit de données est à QB. Aprèst3it est àQC. Aprèst4it est àQD.
Quatre impulsions d'horloge ont déplacé le premier bit de données jusqu'à la dernière étape QDLes deuxième données
bit a0is atQCaprès le 4ème horloge. Le troisième bit de données a1 est à QBLe quatrième bit de données est un autre1
àQA. Ainsi, le motif d'entrée de données série 1011 est contenu dans (QDQCQBQA). Il est maintenant disponible
sur les quatre sorties.
Il sera disponible sur les quatre sorties juste après l'horloge.4juste avant5. Ce parallèle
les données doivent être utilisées ou stockées entre ces deux moments, sinon elles seront perdues en raison du décalage du QD
Le multiplicateur binaire utilisé ici est un multiplicateur de 4 bits qui prend deux entrées de quatre bits et
Le multiplicateur binaire qui est utilisé dans la convolution ici dans le présent
le projet a une caractéristique spéciale selon laquelle le transport interne ne sera pas transféré à l'étape suivante. Donc
le nombre de sorties obtenues ici est de sept seulement parce que dans le multiplicateur binaire, la partie MSB est
rien d'autre que le report obtenu du deuxième MSB donc comme le report n'est pas transféré, seulement sept bits
Un registre est un groupe de bascules. Sa fonction principale est de conserver des informations.
dans un système numérique afin de le rendre disponible aux unités logiques pendant le calcul
processus. Cependant, un registre peut également avoir des fonctionnalités supplémentaires qui lui sont associées. Il peut
ont des portes combinatoires qui effectuent certaines tâches de traitement de données.
Divers types de registres sont disponibles sur le marché. Un registre simple de 4 bits est montré.
ci-dessous. L'horloge commune déclenche tous les bascules et les données binaires disponibles aux quatre
inputs are transferred into the register. The clear input is useful for clearing the register to all
0's sortie.
Registres capables de décaler leur contenu binaire dans une ou les deux directions. A
registre à décalage unidirectionnel de 4 bits qui utilise uniquement des bascules est comme suit :
Fig : Registre à décalage
CHAPITRE 4
Résultatsetdiscussions
4.1IntroductiontoModelSimulator:
4.1.1 Flux de simulation de base
Le diagramme suivant montre les étapes de base pour simuler un design dans ModelSim.
Dans ModelSim, tous les conceptions sont compilées dans une bibliothèque. Vous commencez généralement une nouvelle simulation dans ModelSim en
création d'une bibliothèque de travail appelée "travail". "Travail" est le nom de la bibliothèque utilisé par le compilateur comme valeur par défaut
Après avoir créé la bibliothèque de travail, vous compilez vos unités de conception dedans. Le format de bibliothèque ModelSim est
compatible sur toutes les plateformes supportées. Vous pouvez simuler votre conception sur n'importe quelle plateforme sans avoir
Charger le simulateur avec votre conception et exécuter la simulation Avec la conception compilée, vous
chargez le simulateur avec votre conception en invoquant le simulateur sur un module de niveau supérieur (Verilog) ou un
configuration ou paire entité/architecture (VHDL). En supposant que la conception se charge avec succès, la simulation
le temps est fixé à zéro, et vous entrez
une commande d'exécution pour commencer la simulation.
Si vous n'obtenez pas les résultats escomptés, vous pouvez utiliser le débogage robuste de ModelSim.
Un projet est un mécanisme de collecte pour une conception HDL sous spécification ou test. Même si
vous n'avez pas besoin d'utiliser des projets dans ModelSim, ils peuvent faciliter l'interaction avec l'outil et sont
Le diagramme suivant montre les étapes de base pour simuler une conception dans un projet ModelSim.
Comme vous pouvez le voir, le flux est similaire au flux de simulation de base. Cependant, il y a deux
important differences:
Vous n'avez pas à créer de bibliothèque fonctionnelle dans le flux du projet ; cela est fait pour vous.
automatiquement.
Les projets sont persistants. En d'autres termes, ils s'ouvriront chaque fois que vous invoquez ModelSim.
ModelSim utilise les bibliothèques de deux manières : 1) en tant que bibliothèque de travail locale contenant les compilés
version of your design; 2) as a resource library. The contents of your working library will
changez au fur et à mesure que vous mettez à jour votre design et recompilez. Une bibliothèque de ressources est généralement statique et
sert de source de pièces pour votre conception. Vous pouvez créer vos propres bibliothèques de ressources, ou elles
peut être fourni par une autre équipe de conception ou un tiers (par exemple, un fournisseur de silicium).
Vous spécifiez quelles bibliothèques de ressources seront utilisées lorsque le design est compilé, et il y a
règles pour spécifier dans quel ordre ils sont recherchés. Un exemple commun de l'utilisation des deux un fonctionnel
une bibliothèque et une bibliothèque de ressources est un endroit où votre conception au niveau porte et votre banc d'essai sont compilés.
dans la bibliothèque de travail, et les références de conception utilisent des modèles au niveau de la porte dans une ressource séparée
bibliothèque.
Le diagramme ci-dessous montre les étapes de base pour simuler avec plusieurs bibliothèques.
Figure 4-3. Flux de plusieurs bibliothèques
Outils de débogage
ModelSim offre de nombreux outils pour déboguer et analyser votre conception. Plusieurs d'entre eux
Le design de l'échantillon pour cette leçon est un simple compteur binaire de 8 bits avec un associé
Verilog–<install_dir>/exemples/tutoriels/verilog/simulationBasiques/compteur.v et tcompteur.v
VHDL–<install_dir>/exemples/tutoriels/vhdl/simulationDeBase/[Link]
Cette leçon utilise les fichiers Verilog filescounter.v et tcounter.v. Si vous avez une licence VHDL, utilisez
[Link] à la place. Ou, si vous avez une licence mixte, n'hésitez pas à utiliser le
bibliothèque.
1. Créez un nouveau répertoire et copiez les fichiers de conception pour cette leçon dedans.
Commencez par créer un nouveau répertoire pour cet exercice (au cas où d'autres utilisateurs travailleront avec ces leçons).
a. Tapez vsimat à l'invite de commande UNIX ou utilisez l'icône ModelSim sous Windows. En ouvrant ModelSim
pour la première fois, vous verrez la boîte de dialogue Bienvenue dans ModelSim. Cliquez sur Fermer.
b. Sélectionner le fichier > Changer de répertoire et changer pour le répertoire que vous avez créé à l'étape 1.
Cela ouvre une boîte de dialogue où vous spécifiez des noms physiques et logiques pour la bibliothèque (Figure 3-2). Vous pouvez
créer une nouvelle bibliothèque ou mapper à une bibliothèque existante. Nous ferons la première option.
Figure 4.5. La boîte de dialogue Créer une nouvelle bibliothèque
b. Tapez dans le champ Nom de la bibliothèque (s'il n'est pas déjà rempli automatiquement).
c. CliquezOK.
ModelSim crée un répertoire appelé work et écrit un fichier au format spécial nommé _info dedans.
répertoire. Le fichier_info doit rester dans le répertoire pour le distinguer comme une bibliothèque ModelSim. Ne pas éditer
le contenu du dossier de votre système d'exploitation ; tous les changements doivent être effectués depuis ModelSim.
ModelSim ajoute également la bibliothèque à la liste dans l'espace de travail (Figure 3-3) et enregistre la cartographie de la bibliothèque.
vlib travail
Ces deux lignes sont les équivalents en ligne de commande des sélections de menu que vous avez effectuées. De nombreuses
Les équivalents en ligne de commande afficheront leurs fonctions basées sur un menu de cette manière.
Avec la bibliothèque de travail créée, vous êtes prêt à compiler vos fichiers source.
Vous pouvez compiler en utilisant les menus et les dialogues de l'interface graphique, comme dans le Verilog
1. [Link].v.
a. Sélectionnez Compiler > Compiler. Cela ouvre la boîte de dialogue Compiler les fichiers source (Figure 3-4).
Si l'option de menu Compiler n'est pas disponible, vous avez probablement un projet ouvert. Dans ce cas, fermez le projet en
making the Workspace pane active and selectingFile > Closefrom the menus.
b. Sélectionnez à la fois counter.v et tcounter.v dans la boîte de dialogue Compiler les fichiers source et cliquez sur Compiler.
Les fichiers sont compilés dans theworklibrary.c. Lorsque la compilation est terminée, cliquez sur Terminer.
Dialogue de compilation des fichiers source 4-7
a. Dans l'onglet Bibliothèque, cliquez sur l'icône '+' à côté de theworklibrary et vous verrez deux unités de conception (Figure
3-5). Vous pouvez également voir leurs types (Modules, Entités, etc.) et le chemin vers les fichiers source sous-jacents
(faites défiler vers la droite si nécessaire).
Vous pouvez également charger le design en sélectionnant Simuler > Démarrer la simulation dans la barre de menu. Cela ouvre le
Démarrer le dialogue de simulation. Avec l'onglet Conception sélectionné, cliquez sur le signe ‘+’ à côté de la bibliothèque de travaux pour voir le
modules_controle_et_test. Sélectionner
a. Dans l'Espace de travail, cliquez sur le signe ‘+’ à côté du travail bibliothécaire pour afficher les fichiers contenus là.
Figure 4-9. L'onglet de simulation de l'espace de travail affiche la hiérarchie de conception
a. Ouvrez le menu Vue et sélectionnez Objets. L'équivalent en ligne de commande est : voir objets
Le panneau Objets (Figure 3-8) montre les noms et les valeurs actuelles des objets de données dans la région actuelle.
(sélectionné dans l'espace de travail). Les objets de données incluent des signaux, des réseaux, des registres, des constantes et des variables non
Vous pouvez ouvrir d'autres fenêtres et panneaux avec le menu Affichage ou avec la commande vue. Voir Navigation
l'Interface.
You can also use theView > Wavemenu selection to open a Wave window.
La fenêtre Wave est l'une des plusieurs fenêtres disponibles pour le débogage. Pour voir une liste
des autres fenêtres de débogage, sélectionnez le menu Affichage. Vous devrez peut-être déplacer ou
redimensionnez les fenêtres à votre goût. Les carreaux de fenêtre dans la fenêtre principale peuvent être
zoomé pour occuper l'ensemble de la fenêtre principale ou non arrimé pour être autonome. Pour des détails,
b. Cliquez avec le bouton droit sur test_counter pour ouvrir un menu contextuel.
c. Sélectionnez Ajouter > À Vague > Tous les éléments de la région (Figure 3-9).
Figure 4-11. Utiliser le menu contextuel pour ajouter des signaux à la fenêtre d'ondes
3. Exécutez la simulation.
a. Cliquez sur l'icône Exécuter dans la barre d'outils de la fenêtre Principale ou Vague.
La simulation dure 100 ns (la durée de simulation par défaut) et les vagues sont
La simulation continue de s'exécuter jusqu'à ce que vous exécutez une commande d'arrêt ou qu'elle
atteint une déclaration dans votre code (par exemple, une déclaration $stop de Verilog) qui arrête le
simulation.
4.2 Introduction
Le processus de convolution et l'architecture développée pour la fonctionnalité requise
ont été discutés dans les chapitres précédents. Maintenant, ce chapitre traite de la simulation et
résultats de synthèse du processus de convolution. Ici, l'outil Modelsim est utilisé pour simuler le
conçoit et vérifie la fonctionnalité du design. Une fois la vérification fonctionnelle effectuée, le
la conception sera prise dans l'outil Xilinx pour le processus de synthèse et la génération de netlist.
Les cas de test appropriés ont été identifiés afin de tester ce modèle de convolution
architecture des processus. Sur la base des valeurs identifiées, les résultats de la simulation qui décrivent le
l'opération du processus a été réalisée. Cela prouve que le design modélisé fonctionne correctement
selon sa fonctionnalité.
4.3 Résultats de la simulation :
4.4.1 Multiplexeurs :
4.4.2 SIPO :
4.4.3 Multiplier binaire :
4.4.4 Multiplexeur 8*1 :
4.4.5 Register:
4.5 Introduction aux FPGA :
FPGA signifie tableau logique programmable sur le terrain, qui dispose d'un ensemble de modules logiques.
Module I/O et pistes de routage (interconnexion programmable). Le FPGA peut être configuré par l'utilisateur final.
utilisateur pour mettre en œuvre un circuit spécifique. La vitesse est jusqu'à 100 MHz mais à l'heure actuelle la vitesse est en GHz.
Les principales applications sont le DSP, les ordinateurs basés sur FPGA, l'émulation logique, l'ASIC et l'ASSP.
Les FPGA peuvent être programmés principalement sur SRAM (Mémoire à Accès Aléatoire Statique). C'est volatil et
L'avantage principal de l'utilisation de la technologie de programmation SRAM est la reconfigurabilité. Problèmes dans FPGA
la technologie est la complexité des éléments logiques, le support d'horloge, le support d'E/S et les interconnexions
(Routage).
Dans ce travail, la conception d'un DWT et d'un IDWT est réalisée en utilisant Verilog HDL et est synthétisée.
sur la famille FPGA de Spartan 3E via l'outil XILINX ISE. Ce processus comprend les étapes suivantes :
Traduire
Carte
Placement et routage
Optimisation logique
Cartographie Technologique
Placement
Routage
Unité de Programmation
FPGA configuré
Ci-dessus sont montrés les étapes de base impliquées dans la mise en œuvre. L'entrée de conception initiale de peut
les blocs logiques, qui sont appelés Slices. Ici, l'optimisation de la surface et du délai aura lieu.
Lors du placement, les algorithmes sont utilisés pour placer chaque bloc dans le réseau FPGA. L'assignation du
Segments de fil FPGA, qui sont programmables, pour établir des connexions entre les blocs FPGA
à travers le routage. La configuration de la puce finale est effectuée dans l'unité de programmation.
La première étape de la mise en œuvre d'un design sur FPGA implique les spécifications du système.
Les spécifications font référence aux types d'entrées et de sorties, ainsi qu'à la gamme de valeurs que le kit peut accepter.
basé sur ces spécifications. Après la première étape des spécifications du système, l'étape suivante est l'architecture.
L'architecture décrit les interconnexions entre tous les blocs impliqués dans notre conception. Chacun de ces blocs
le bloc dans l'Architecture ainsi que leurs interconnexions est modélisé en VHDL ou Verilog
selon la facilité. Tous ces blocs sont ensuite simulés et les sorties sont vérifiées pour leur exactitude
fonctionnement.
Figure 4-12 Diagramme de flux de conception d'implémentation Xilinx.
Après l'étape de simulation, les étapes suivantes, c'est-à-dire la Synthèse. C'est une étape très importante pour connaître
si notre conception peut être implémentée sur un kit FPGA ou non. La synthèse convertit notre code VHDL en son
composants fonctionnels qui sont spécifiques au fournisseur. Après avoir effectué le schéma RTL de synthèse, technologie
Le schéma est généré et les délais de temporisation sont générés. Les délais de temporisation seront présents dans le
FPGA si le design est implémenté dessus. Le placement et le routage est l'étape suivante où l'outil place tous les
composants sur une puce FPGA pour des performances optimales tant en termes de surface que de vitesse. Nous voyons également le
les interconnexions qui seront réalisées dans cette partie du flux de mise en œuvre.
Dans l'étape de simulation après placement et routage, les délais qui seront impliqués sur le kit FPGA sont
considéré par l'outil et la simulation est effectuée en tenant compte de ces délais qui seront
présent dans les mises en œuvre sur le kit. Les délais ici signifient effet de charge électrique, délais de câblage, dérive
capacitances.
Après le placement et le routage postérieurs, vient la génération du fichier bitmap, ce qui signifie la conversion du VHDL.
code into bit streams which is useful to configure the FPGA kit. A bit file is generated this step is
réalisé. Après cela vient l'étape finale de téléchargement du fichier bitmap sur la carte FPGA qui est
réalisé en connectant l'ordinateur à la carte FPGA avec l'aide d'un câble JTAG (Joint Test Action Group)
qui est une norme IEEE. Le fichier de carte de bits contient l'ensemble du design qui est placé sur la puce FPGA,
les sorties peuvent maintenant être observées à partir des LED FPGA. Cette étape complète tout le processus de
4.7.1 Introduction
Le logiciel Xilinx ISE (Integrated Software Environment) 9.2i provient de la société XILINX, qui est
utilisé pour concevoir tout circuit numérique et l'implémenter sur un dispositif FPGA Spartan-3E. XILINX ISE 9.2i
le logiciel est utilisé pour concevoir l'application, vérifier la fonctionnalité et enfin télécharger le design sur un
Dispositif FPGA Spartan-3E.
Le projet de convolution développé est simulé et sa fonctionnalité est vérifiée. Une fois que le
la vérification fonctionnelle est effectuée, le modèle RTL est pris pour le processus de synthèse à l'aide de l'outil Xilinx ISE.
Dans le processus de synthèse, le modèle RTL sera converti en liste de portes au niveau des portes mappée à un spécifique
bibliothèque de technologie. Ici dans cette famille Spartan 3E, de nombreux appareils différents étaient disponibles dans le Xilinx
Outil ISE. Le dispositif cible est le kit FPGA SPARTAN 2. Pour synthétiser ce design, le dispositif nommé est
"XC3S100E" a été choisi et le boîtier comme "TQ144" avec une vitesse de dispositif telle que "5".
Le projet de convolution développé est simulé et sa fonctionnalité est vérifiée. Une fois que le
La vérification fonctionnelle est effectuée, le modèle RTL est soumis au processus de synthèse en utilisant le Xilinx
Outil ISE. Dans le processus de synthèse, le modèle RTL sera converti en liste de connexion au niveau des portes.
à une bibliothèque technologique spécifique. Ici, dans cette famille Spartan 3E, de nombreux dispositifs différents ont été
disponible dans l'outil Xilinx ISE. Pour synthétiser ce design, le dispositif nommé comme
"XC3S500E" a été choisi et le boîtier comme "FG320" avec une vitesse de dispositif telle que "-4".
Ce design est synthétisé et ses résultats ont été analysés comme suit.
CHAPITRE 5
ConclusionetTravauxFuturs
5.1 Conclusion