15
BOLLENGIER Théotime FAU Nicolas LANDIECH Matthieu OUSSEINE Mwendzao TONNELLIER Thibaud Architecture matérielle (FPGA) pour la détection de template en temps réel Implantation matérielle Interface graphique

Architecture matérielle (FPGA) pour la détection de ... · temps de réel du signal à la recherche du paterne. ... Figure - Exemple de signal généré avec Matlab La figure 4

  • Upload
    vunhi

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

BOLLENGIER Théotime

FAU Nicolas

LANDIECH Matthieu

OUSSEINE Mwendzao

TONNELLIER Thibaud

Architecture matérielle (FPGA) pour la détection de

template en temps réel

Implantation matérielle – Interface graphique

Contenu INTRODUCTION ...................................................................................................................... 3

I. Présentation ........................................................................................................................ 3

II. Réalisation .......................................................................................................................... 4

III – Partie matérielle .................................................................................................................. 4

1 – Convertisseur Analogique Numérique ............................................................................. 4

A – Selon le cahier des charges .......................................................................................... 4

B – Ersatz ........................................................................................................................... 5

2 – Sous échantillonneur ........................................................................................................ 6

3 – Bloc Check SAD .............................................................................................................. 6

III. ARCHITECTURE MATERIELLE GÉNÉRALE ........................................................... 7

IV. ARCHITECTURE MATERIELLE DÉTAILLÉE .......................................................... 9

Le module de simulation de l'ADC ........................................................................................ 9

Le module subsampling ......................................................................................................... 9

La FIFO .................................................................................................................................. 9

Le bloc SAD ........................................................................................................................... 9

Le module match detector .................................................................................................... 10

V. Interface graphique .............................................................................................................. 10

1. Description .................................................................................................................... 11

2. Utilisation ...................................................................................................................... 13

3. Code .............................................................................................................................. 13

Conclusion ................................................................................................................................ 14

TABLE DES ILLUSTRATIONS

Figure 1 : Schéma Global ........................................................................................................... 3

Figure 2 - AD9467-FMC-EBZ board on Virtex 6 ...................................................................... 5

Figure 3 : Capture d'écran de l'interface graphique .................................................................. 10

Figure 4 : Diagramme de Classe .............................................................................................. 13

INTRODUCTION

Le but de notre projet est de réaliser un analyseur de signal permettant la détection

d’un paterne en temps réel. Notre système qui se compose d’une partie matériel (sur FPGA) et

d’une partie logiciel afin de permettre à un utilisateur de visualisé sur une interface graphique

la courbe qu’analyse la partie matériel et de sélectionner de manière ergonomique le paterne

souhaité.

Pour réaliser ce projet, différentes parties se dégagent : la gestion du CAN, l’analyse par le

FPGA, la communication entre le logiciel et le matériel.

Nous avons réalisé ce travail en sein d’une équipe de cinq, nous avons donc partagé le travail

selon les gouts et les compétences de chacun. Le développement matériel et logiciel devait

s'effectuer conjointement de façon à corréler les fonctionnalités proposées et la

communication entre les deux parties.

Ces parties seront développées dans la suite de notre rapport.

I. Présentation

Figure 1 : Schéma Global

output :

match ref/input

analog input

signal

ethernet

control link

computer

master

FPGA board

slave

hardware

development

software

development

Voici le schéma du système que nous avons conçu ; il fonctionne selon le principe

suivant : on récupère un signal analogique provenant d’une source extérieure, un

convertisseur analogique-numérique (CAN) convertie ce signal, pour qu’il soit analyser par le

FPGA.

Le FPGA a lui pour but d’envoyer le signal transmis à l’ordinateur, de récupérer le paterne

dont on souhaite savoir le nombre d’occurrence dans le signal et enfin d’effectuer l’analyse en

temps de réel du signal à la recherche du paterne.

Quant à la partie ordinateur, c’est un logiciel que nous avons programmé nous-même, et qui

permet à l’utilisateur de demander la récupération du signal numérisé, du choix du paterne et

de son envoi vers la partie matériel. C’est la partie logicielle qui est le maitre dans la relation,

l’utilisateur décide de la mise à jour et de l’envoi.

II. Réalisation

Pour la réalisation de notre projet, nous avons fait le choix de tester au fur et à mesure.

D’abord, nous avons testé le bon fonctionnement de la liaison entre l’ordinateur et la carte

FPGA à l’aide d’un programme écrit en C. Il permettait d’afficher l’état des switches sur

l’écran de l’ordinateur et d’allumer les leds de la carte à partir du PC.

Puis l'étape suivante a été d'ajouter une ROM sur le FPGA et de tester le programme, en

inscrivant dans cette même ROM une suite de valeur aléatoire. On transfert les informations

de la ROM et on les compare avec les valeurs initiales que l'on connaît, le résultat étant

identique, on en déduit que le transfert.

D’autre part, nous avons fait le choix d’écrire notre propre programme java en se basant sur

les fichiers java permettant l’affichage des courbes.

III – Partie matérielle

1 – Convertisseur Analogique Numérique

A – Selon le cahier des charges

Comme vu sur le schéma d’ensemble, l’acquisition doit, selon le cahier des charges

être fait par le convertisseur analogique numérique d’Analog Device AD9467. Sa connexion

avec la carte de développement Virtex 6 est permise par la carte mezzanine FPGA (FMC)

fournie par Analog Device. Celui-ci possède la caractéristique d’échantillonner sur 16bits à

250MHz.

Mais, sa documentation est quasiment inexistante. En effet, les meilleures explications

résident dans le wiki d’Analog Device. Celui-ci propose un programme de démonstration.

Celui-ci est très lourd : il va même jusqu’à employer le MicroBlaze pour configurer la carte.

Mais rien dans ce design ne permet d’extraire le paramétrage de l’ADC. Les maigres

datasheets fournies sur les FMC ou sur l’AD9467, ne semblent pas correspondre avec la

configuration. Ainsi, pour pouvoir prendre le contrôle de cet ADC, un travail de reverse

enginering est nécessaire. Mais, nous n’avons pas le temps pour l’effectuer. Une solution

alternative, présentée dans la partie suivante, est alors envisagée.

B – Ersatz

Le CAN étant le premier élément de ce projet, il est nécessaire de le remplacer par une

solution alternative pour que le démonstrateur puisse fonctionner. Nous avons choisi

d’implémenter une RAM contenant les valeurs d’un signal généré par Malab. Ce signal doit

correspondre au signal échantillonné dans les cas réel par le CAN. Un modèle de RAM et non

de ROM a été choisi afin de pouvoir modifier les signaux d’entrées à la volée, sans avoir à

recompiler le tout.

Figure 2 - AD9467-FMC-EBZ board on Virtex 6

Figure - Exemple de signal généré avec Matlab

La figure 4 présente un exemple de signal généré avec Matlab. Sur celui-ci nous pouvons voir

un sinus en fondamental. Celui-ci a ensuite été bruité puis un sinus d’une autre fréquence a été

ajouté. Ce dernier est fenêtré avec une fenêtre de Hann afin d’assurer la continuité aux bornes.

2 – Sous échantillonneur

Nous avons ajouté un bloc sous échantillonneur. Celui-ci nous permet d’effectuer une

moyenne arithmétique sur le nombre d’échantillon de notre choix. Il pourrait être intéressant

d’y rajouter une moyenne quadratique, et un mode poinçon. Chaque mode de sous

échantillonnage permettrait sans doute de mettre en valeur des motifs spécifiques.

3 – Bloc Check SAD

Ce bloc permet de mettre en place un seuil sur la SAD et de détecter les motifs jugés

identiques. Lorsque le seuil est dépassé, un registre est modifié, celui-ci recense le nombre de

fois où le motif a été rencontré. Aussi, lors d’une occurrence, un signal est activé pour

permettre d’allumer une LED.

III. ARCHITECTURE MATERIELLE GÉNÉRALE

L'architecture matérielle que nous avions initialement prévue est représentée sur la figure

suivante.

Celle-ci se compose principalement de 6 parties :

- Le module ACD permet le contrôle et l'acquisition des données d'entrée issues du

convertisseur analogique/numérique à une fréquence fixe.

- Le rôle du module subsampling est de sous-échantillonner ces données afin de pouvoir

travailler avec des fréquences moins élevées.

- La FIFO est une mémoire tampon de type "first in first out". Ça présence permet de palier à

la différence de vitesse entre le bus Ethernet et l'arrivée des données issues du module

subsampling. Il est ainsi possible d'envoyer 8192 échantillons consécutifs du signal d'entrée à

l'ordinateur afin que l'utilisateur puisse choisir le motif qu'il souhaite faire détecter au

dispositif.

- Le module SAD est constitué d'un pipeline qui compare en permanence les 512 derniers

échantillons du signal d'entrée avec les 512 échantillons du motif de référence. La sortie de ce

module représente la corrélation de ces deux derniers.

- Le module match detector compare la sortie du module SAD avec une valeur fournie par

ADC simulator

subsampling

FIFO SAD

pipeline

match

detector

sample out regs reference regs

subsampling regs

match count regs

CTRL regs

output :

match ref/input

ethernet bus

computer

master

FPGA board

slave

RAMaddress

counter

l'utilisateur de façon à émettre sur la sortie une impulsion de durée choisie lorsque le signal

d'entrée atteint un certain niveau de ressemblance avec le motif enregistré. Un compteur

indique le nombre de détections qui ont eu lieux.

- Le bus ipbus permet l'accès en lecture est en écriture à des registres internes du FPGA

depuis un ordinateur via la liaison Ethernet. Ce sont ces registres qui contrôlent et permettent

l'échange de données avec les modules ci-dessus.

Au cours du projet, l'utilisation du convertisseur analogique/numérique que nous étions censés

utilisé s'est avérée beaucoup plus compliqué que prévue ; c'est-à-dire que l'ADC nécessitait

l'utilisation d'un processeur implanté dans le FPGA pour pouvoir le configurer, ce qui est

rarement le cas avec ce type de circuit.

L'implantation et l'utilisation d'un processeur n'étant pas l'objet de ce projet et demandant des

ressource importantes par rapport à l'application, nous avons modifié l'architecture de la partie

matérielle de façon à pouvoir simuler le convertisseur analogique/numérique avec des valeurs

enregistrées dans le FPGA. La figure suivante présente l'architecture matérielle que nous

avons réalisée et implémentée lors de ce projet. Le système ne comporte plus d'entrée pour le

signal et le bloc ADC est remplacé par le module ACD simulator.

ADC simulator

subsampling

FIFO SAD

pipeline

match

detector

sample out regs reference regs

subsampling regs

match count regs

CTRL regs

output :

match ref/input

ethernet bus

computer

master

FPGA board

slave

RAMaddress

counter

IV. ARCHITECTURE MATERIELLE DÉTAILLÉE

Le module de simulation de l'ADC

Ce module se comporte d'une mémoire RAM d'un compteur et d'un registre. Pour écrire les

données dans la RAM, il faut faire un accès en écriture sur le registre à l'adresse 6 pour

initialiser l'adresse d'écriture de la RAM à 0. En suite chaque écriture d'un octet à l'adresse 8

écrit cet octet dans la RAM et incrémente l'adresse d'écriture de celle ci. Le compteur

incrémente à chaque cycle d'horloge l'adresse de lecture de la RAM. Les données sont lues en

boucle pour simuler le signal d'entrée du système. Le registre accessible à l'adresse 7 indique

au compteur l'adresse maximale de lecture de la RAM. Il est ainsi possible de "jouer" un

signal qui n'occupe pas la totalité de la RAM.

Le module subsampling

Ce module récupère les données issues de l'ADC avec une fréquence d'échantillonnage de 200

MHz. Le registre de 3 bits accessible à l'adresse 5 permet de sélectionner une fréquence de

sous-échantillonnage (200 MHz / 1; 200 MHz /2; 200 MHz /4; ... ; 200 MHz /128). Les

échantillons d'entrée sont moyennés de façon à fournir le signal de sortie à la fréquence

choisie. Un signal de validation indique aux autres modules lorsque le signal qu'il produit est

valide.

La FIFO

Le bit 0 du registre accessible en écriture à l'adresse 4 permet de lancer ou de stopper le

remplissage de la FIFO. Si ce bit est mis à 0, l'entrée de la FIFO est bloquée ; si ce bit est mis

à 1, alors chaque donnée issue du module de sous-échantillonnage est enregistrée dans la

FIFO tant que celle-ci n'est pas pleine. L'état de la FIFO est accessible en lecture à l'adresse 4

:

- bit 0 : entrée de la FIFO bloquée (0), non bloquée (1)

- bit 1 : FIFO vide (1), non vide (0)

- bit 2 : FIFO pleine (1), non pleine (0)

Un accès en lecture à l'adresse 3 vide la FIFO d'une donnée et la renvoie. Ce registre ce

compose comme suit :

- bit 9 : FIFO pleine (1), non pleine (0)

- bit 8 : FIFO vide (1), non vide (0)

- bits 7 à 0 : donnée issue de la FIFO

Pour faire une acquisition de 8192 échantillons d'entrée, il faut commencer par bloquer la

FIFO, puis faire des lectures jusqu'à ce qu'elle soit vide. On peut alors débloquer l'entrée de la

FIFO et attendre qu'elle soit pleine. Enfin les 8192 échantillons peuvent être lus.

Le bloc SAD

C'est le cœur de la partie matérielle. Il permet d'évaluer la corrélation entre un signal et un

motif. Ce module nous était fourni au début du projet, il s'agit d'un pipeline calculant la

somme des valeurs absolue des différences entre le motif et le signal d'entrée. Sa cadence est

d'une SAD de 512 points par cycle d'horloge. Le signal issu des sous-échantillonneurs entre

dans ce module. Le motif de référence est écrit dans le bloc SAD en écrivant successivement

ses échantillons dans le registre accessible à l'adresse 10. Ce motif de référence à une taille de

512 échantillons, de 9 bits : 8 bit de données et 1 bit indiquant au bloc SAD si cet échantillon

doit être pris en compte dans le calcul de la SAD. Ceci permet de pouvoir utiliser des motifs

de mois de 512 points. La sortie du bloc SAD est une valeur codée sur 17 bits.

Le module match detector

Ce module compare la sortie de bloc SAD avec un seuil fournit par l'utilisateur. Dès que la

valeur de la SAD dépasse le seuil, le module match detector produit une impulsion sur sa

sortie et incrémente son compteur de détection. Il faut que la valeur de la SAD redescende en

dessous du seuil avant de pouvoir déclencher à nouveau une impulsion. Le seuil de détection

peut être lu et écrit à l'adresse 9 (sur 17 bits). Le compteur de détection est accessible en

lecture et écriture à l'adresse 12. Un dernier registre accessible à l'adresse 11 permet de fixer

la durée de l'impulsion de sortie (sur 32 bits). La durée de l'impulsion est de

REG_DUREE_IMPULSION / 200000000.

V. Interface graphique

Figure 3 : Capture d'écran de l'interface graphique

1. Description

L’interface graphique est composée de différentes composantes.

Des boutons de contrôle :

- Un bouton Start, qui permet de lancer l’initialisation de la zone d’affichage du

graphique.

- Un bouton Refresh, qui permet d’acquérir et d’afficher une nouvelle trame de

8192 échantillons.

- Un bouton Send, qui permet d’envoyer au FPGA le gabarit de 512 échantillons

sélectionné par l’utilisateur, le seuil sélectionné et le délai sélectionné.

Une zone de visualisation

- Un affichage graphique, sur lequel l’utilisateur visualise la trame de 8192

échantillons envoyé par le FPGA.

- Un curseur, avec lequel l’utilisateur sélectionne le gabarit. Ce dernier se trouve

entre les deux zones rouges.

Une zone de sélection des paramètres

- Le seuil de détection correspond à la valeur en pourcentage de la ressemblance

entre le gabarit et le signal.

- Le type d’algorithme :

Deux types d’algorithmes sont proposés à l’utilisateur pour la détection du

gabarit dans la trame :

o Sum of Squared Differences (SAD)

o Sum of Absolute Differences (SSD)

Seul le SAD est intégré dans le FPGA.

- Temporisation

L’utilisateur peut sélectionner le temps durant lequel la LED reste allumée sur le

FPGA lorsque le gabarit est détecté.

Une zone d’acquisition des résultats

- Redondance dans l’échantillon :

En cliquant sur le bouton Refresh, l’utilisateur constate le nombre de redondance

du gabarit sélectionné avec le seuil de détection paramétré.

- Redondance dans le signal :

En cliquant sur le bouton Refresh, l’utilisateur ordonne une lecture du registre

contenant le nombre de redondance détecté par le FPGA dans le signal entrant.

- Reset :

Le bouton Reset permet de mettre à zéro le nombre de détection du FPGA.

2. Utilisation

Pour utiliser l’interface, veuillez suivre les étapes suivantes :

- Initialisation :

o Cliquer sur le bouton Start.

o Déplacer le ensuite le curseur, pour lancer l’affichage de la courbe.

- Acquisition :

o Cliquer sur le bouton Refresh à gauche pour recevoir une trame.

o Via le curseur il est possible de sélectionner un gabarit

o Le gabarit sélectionné peut être testé dans la trame via le bouton Refresh

de la zone « Redundancy in sample. »

- Envoi :

o Cliquer sur le bouton Send à gauche pour envoyer le gabarit sélectionné.

o Le seuil et le délai sélectionné avant l’envoie sont également envoyé.

o A chaque détection du FPGA une LED s’allumera.

o A tout moment il est possible de lire le nombre de détaction via le bouton

Refresh de la zone « Redundancy in signal. »

3. Code

Figure 4 : Diagramme de Classe

Main.java

Cette page contient seulement la fonction principale du programme.

InterfaceForm.java

Cette page contient toute la description de l’interface graphique. Elle contient également la

déclaration des actions effectuées lors de différents évènements.

OpCommunication.java

Cette page contient les déclarations des fonctions appelé lors d’appuis sur un des boutons.

UdpClient.java

Cette page contient les fonctions permettant la communication via le Protocol UDP entre

l’interface et le FPGA.

Graphique.java

Cette page contient les fonctions permettant l’affichage de la courbe.

SADComputation.java

Cette page contient les fonctions permettant de mettre en œuvre l’algorithme SAD de

détection de ressemblance entre deux blocs.

SSDComputation.java

Cette page contient les fonctions permettant de mettre en œuvre l’algorithme SSD de

détection de ressemblance entre deux blocs.

Conclusion

Pour conclure, nous avons donc réalisé un projet liant à la fois une partie matérielle et

une partie logiciel. Ce fut très enrichissant car nous avons pu voir qu’il était toujours

nécessaire de communiquer entre les deux équipes pour accorder nos violons sur l’utilisation

des registres et autres liens entre les deux parties.

A la fin de notre projet, nous avons réussi à faire communiquer les deux parties ensemble, à

faire afficher la courbe et à renvoyer le paterne. Nous n’avons pas pu finaliser la vérification

pour cause d’un problème matériel. En effet, la sonde JTAG, nécessaire au test final, n’était

plus présente après l’ajout du bloc SAD. Cela reste une déception car nous aurions voulu voir

fonctionner notre projet.

Ce projet nous a aussi permis de se rendre compte que des difficultés inattendues pouvaient

apparaitre comme cela a été le cas avec le CAN, mais nous avons su rebondir et trouver une

solution de substitution.

Enfin, quelques perspectives d’évolution pour ce projet existent : il est possible d’envisager la

prise en charge d’une mise à jour en temps réel de l’affichage, la modification de la taille du

paterne ou bien encore d’ajouter de manière matérielle le calcul de SSD pour le comparer

avec la méthode SAD.