• Aucun résultat trouvé

5.3 Acquisition radio-fréquence et traitement par GNURadio

5.3.3 Application de démonstration

L’application visée pour cette démonstration consiste à réceptionner un flux radio-fréquence

modulé en fréquence (FM), produit par un émetteur FM RADIOMETRIX TX2-433-160-5V à

433.9 MHz connecté à la sortie d’une carte son. La partie FPGA aura la charge de réaliser la conversion du flux i2s, une décimation pour obtenir un flux compatible avec les capacités de trans- fert du processeur et stocker/transférer ces résultats (figure 5.14 partie gauche).

La partie logicielle devra fournir à la demande de GNURadio un ensemble de données qui sera passé dans un bloc de démodulation FM puis transféré vers la carte son de la plate-forme mais dont le résultat sera également affiché sur l’écran (figure 5.14 partie droite).

sx1255 ECRAN driver decim GNURadio SPARTAN6 wishbone sx1255_impl data_to_ram_with_dual_buffer wishbone i2s SPI

Figure5.14 – Schéma global de l’application visée. À gauche, le traitement dans le FPGA (conver- sion du flux, décimation, stockage/transfert). À droite, partie logicielle.

Afin de réaliser la démodulation, il est impératif de garantir la continuité du flux, sans quoi le son serait saccadé voire inaudible. Cette application a donc pour objectif de démontrer qu’aucun échantillon n’est perdu au cours des transferts.

5.3.3.1 Principe du bloc terminal avec implémentation d’un double tampon

Le but de ce double tampon est de permettre un stockage en continu des données. À chaque fin de tampon, le bloc avertit le processeur pour la récupération des données. Pendant que celui-ci réalise cette action, le bloc est en mesure de continuer le stockage dans le second tampon, sans risque d’écraser les données avant leurs transferts.

Le principe de l’implémentation de ce bloc est présenté sur la figure 5.15. Son fonctionnement est le suivant :

– un compteur est incrémenté à chaque nouvelle donnée par le signal enable. Quand ce compteur atteint la valeur maximale, il est remis automatiquement à 0 ;

– dans le même temps la valeur du compteur est utilisée comme adresse pour le stockage dans la RAM, la donnée entrante est directement connectée sur ce bloc ainsi que le enable qui sert d’ordre d’écriture.

– l’adresse est également comparée à deux valeurs : l’une correspond à la moitié de la capacité de la mémoire, la seconde à sa capacité totale. Si l’une des comparaisons est évaluée comme vraie, leOU logique génère pendant un cycle d’horloge un état haut sur un signal de sortie connecté à une broche du processeur et permet de produire une interruption. Ces deux comparaisons sont également utilisées au niveau de l’esclavewishbone pour mettre à jour le statut du bloc, utilisé par le processeur pour connaître la partie du tampon à lire ;

– l’esclave wishbone reçoit les commandes du processeur, met à jour l’adresse de lecture et transmet la donnée correspondante.

= addr data data_en 0 compteur RAM wishbone addr data = Interrupt full half 2n − 1 (2n − 1)/2 (2n − 1)

Figure5.15 – Implémentation du bloc terminal pour le transfert des données, avec utilisation du principe du double tampon. Le compteur est utilisé pour incrémenter l’adresse de la RAM, il est également utilisé pour déterminer à quel moment une interruption doit être levée et mettre à jour le statut du bloc. Le bloc wishbone gère l’ensemble des transactions de lecture et de statut.

5.3.3.2 Pilote pour le transfert depuis le FPGA vers la source GNURadio

Ce type de pilote est assez classique. Il crée un pseudo fichier, utilisé par l’application en espace utilisateur afin de fournir les données à celle-ci. Compte tenu du besoin potentiel d’un flux continu sans perte de donnée, ce pilote ne se contente pas d’aller chercher des données à la volée. C’est le bloc terminal qui impose quand le bloc doit aller chercher les données avec un principe de double tampon.

Ainsi le principe de fonctionnement, dont le diagramme est présenté sur la figure 5.16, est le suivant :

à transférer (partie gauche figure 5.16(b)).

– le pilote va sonder le FPGA pour savoir quel tampon doit être lu et par extension dans quelle zone de son propre tampon les données doivent être stockées ;

– le transfert est initié ;

– lorsque les deux tampons sont transférés, la tâche en charge du transfert réveille la fonction de lecture depuis l’espace utilisateur pour que l’application puisse copier et traiter le flux. Ce mécanisme est la condition sine qua non pour garantir un flux continu. Si le pilote initiait le stockage/transfert, un certain nombre de données seraient perdues pendant le temps du transfert et avant la prochaine requête.

(a) Diagramme de fonctionnement de la fonction de lecture. L’exécution de cette fonction est mise en veille jusqu’à la mise à disposition d’un ta- bleau de données complet. Une fois le tableau disponible, la fonction se charge de le copier dans l’espace uti- lisateur et finit son exécution

(b) Diagramme de principe de la gestion de l’avis de mise à disposi- tion d’un tampon complet. Un événement matériel déclenche l’exécu- tion d’une fonction particulière. Celle-ci déclenche à son tour l’exécution d’une tâche, qui, dans un premier temps, vérifie l’état du bloc dans le FPGA, puis va transférer les données. Si l’état est full alors la tâche débloque la fonction de lecture.

Figure5.16 – Diagramme des deux parties principales utilisées, d’une part, pour la lecture depuis l’espace utilisateur et d’autre part pour la récupération des données depuis le FPGA.

5.3.4

Résultats

À partir du montage expérimental (figure 5.17), nous avons été en mesure de pouvoir d’une part observer le signal démodulé (partie droite de la figure 5.17) mais également, après connexion, d’un haut-parleur sur la sortie son de la carte APF51, nous avons pu démontrer notre capacité à produire un son de même qualité qu’un poste de radio.

Figure 5.17 – Montage expérimental et détail de l’affichage du signal démodulé. À gauche : au premier plan le radio-modem SX1255, sur le côté gauche, connecté à la sortie son d’un ordinateur, l’émetteur FM. Au dernier plan, l’écran pour l’affichage du signal démodulé. À Droite : Représen- tation fréquentielle du signal démodulé dans le sink GNURadio.