Une plate-forme d`expérimentation multiprocesseur pour les

publicité
CIME
Une plate-forme d’expérimentation multiprocesseur
pour les réseaux sans fil
Damien Hedde, Pierre-Henri Horrein, Frédéric Pétrot, Robin Rolland et Franck Rousseau
CNRS/Grenoble INP/UJF
CIME-Nanotech
Parvis Louis Néel, Grenoble
R ÉSUMÉ
Cet article présente le travail effectué dans le cadre
de la mise en place d’une plate-forme d’expérimentation
pour les réseaux sans fil se basant sur des cartes FPGA
à bas coût.
Mots-clés: SDR, radio logicielle, télécommunications
sans fil, systèmes embarqués
I. I NTRODUCTION
La mobilité généralisée des personnes et des
équipements change totalement la problématique de
l’accès aux différents réseaux. Cette mobilité est
généralement obtenue en utilisant des télécommunications sans fil, que ce soit pour le téléphone ou les réseaux
informatiques. L’étude et l’enseignement pratique de
solutions d’interconnexions mobiles, efficaces, et peu
coûteuses est donc fondamentale.
Traditionnellement, les couches du réseau gérant la
concurrence des sources de données et la transmission
physique étaient, vu les débits et les latences requises, réalisées en matériel. Depuis quelques années,
une solution en plein essor, possible seulement grâce
à l’intégration micro-électronique, consiste à effectuer
les traitements numériques, habituellement réalisés en
matériel, à l’aide de programme s’exécutant principalement sur des processeurs de type DSP.
Une telle solution a, en particulier, l’avantage de
très bien s’adapter au nombre croissant de standards
« sans fil » : il est possible de modifier dynamiquement
les opérations effectuées en fonction du standard sans
avoir besoin d’une plate-forme matérielle par standard,
réduisant ainsi les coûts de fabrication.
L’objectif du projet est de permettre à des étudiants
se spécialisant en réseau d’avoir accès à une plateforme d’expérimentation ouverte, sur laquelle ils peuvent modifier l’ensemble de la chaîne de réception, de
l’émission des signaux I et Q à la réception du paquet
dans l’application tournant sous Linux.
La plate-forme de radio logicielle est en cours de
finalisation, et les TPs et projets qui l’utiliseront sont
en cours de définition.
II. C HOIX D ’ ARCHITECTURE
A. Objectifs : problèmes à résoudre
Les contraintes posées par un tel projet sont nombreuses et variées. En effet, le nombre de normes existantes est impressionnant, et de nouvelles normes sont
sans cesse en développement. L’objectif du projet est de
s’abstraire de la norme pour proposer une vue générale
adaptable à n’importe quel système de communications.
D’autres contraintes existent, en particulier des contraintes de modularité. En effet, la plate-forme étant
destinée à un but éducatif et de recherche, il est nécessaire de pouvoir séparer les différentes parties du réseau
à différents grains. En effet, si une manipulation doit
mettre en évidence les différences entre deux protocoles
d’accès au médium, il est inutile et même contraignant de
travailler à un grain trop fin. Par contre, pour étudier les
performances de telle ou telle technique de modulation,
il est nécessaire de pouvoir modifier la modulation
sans avoir à redévelopper l’intégralité de la chaîne de
transmission.
B. Matériel disponible
Le matériel disponible dans le cadre de ce projet
est fourni par la plate-forme OCAE (Objets Communicants et Applications Embarquées) du CIME-Nanotech
de Grenoble. Les cartes programmables pour la mise
en place du système sont des cartes Digilent XUPV2P
intégrant un FPGA Xilinx Virtex2Pro, une barrette de
mémoire RAM DDR 512Mo et de la connectique. Le
Virtex2Pro est un FPGA de taille moyenne, embarquant
2 PowerPC405 cadencés à 300MHz. Sont également
disponibles des processeurs synthétisables MicroBlaze,
pouvant être cadencés à un maximum de 150MHz.
Ces cartes sont extensibles facilement grâce à de la
P28
CIME
connectique spécifique. Du matériel ad-hoc a ainsi été
mis à disposition et interfacé avec les cartes : des
modules Wireless USB CYWUSB6935 de Cypress et des
cartes d’évaluation du composant Maxim MAX19713
(Front-End radio, permettant en particulier de traiter
les signaux IQ du WiFi (802.11b)). La plate-forme
dispose également de nombreux appareils de mesures,
parmi lesquels des oscilloscopes pour l’étude des signaux
analogiques générés et reçus, et des analyseurs de spectre
pour l’étude de l’occupation des fréquences.
C. Solution : architecture du système
Pour répondre au problème, une architecture
matérielle/logicielle à base de blocs logiques semble la
mieux adaptée. Deux niveaux de blocs ont été proposés.
Tout d’abord, des « macro-blocs », correspondant en
fait aux différentes couches du modèle Internet qui nous
intéresse ici : la couche physique, la couche de liaison
de données, et les couches réseaux et applications.
Les couches supérieures étant déjà implémentées, il était
préférable ici de prendre les solutions les plus standards
possible, et il a donc été décidé d’utiliser un noyau
Linux 2.4.26 porté sur la carte XUPV2P. Ce noyau a
l’avantage d’être connu par beaucoup de développeurs,
et permet d’offrir aux utilisateurs un environnement
standard, même si parfois peu familier, pour contrôler la
carte. Ce macrobloc n’est pas découpé en blocs de grain
plus fin. En effet, l’objectif n’est pas d’expérimenter sur
les couches hautes.
Les couches inférieures, dépendantes de la norme
utilisée, sont développées pour répondre à nos besoins.
Pour fonctionner et offrir la modularité nécessaire, il a
fallu de définir correctement les APIs logicielles et les
interfaces matérielles permettant de relier ces différentes
couches. On distingue deux macro-blocs. D’abord, un
macro-bloc liaison de données, plus communément
appelé couche MAC. Ce bloc est divisé en 3 sous
parties : deux blocs d’interface et un bloc de protocole.
Ce macro-bloc est défini plus précisément dans la partie
traitant du logiciel.
Le second macro-bloc correspond à la couche physique.
Ce bloc comporte un bloc d’interface, développé en
logiciel, et une multitude de blocs de traitement, qui,
une fois reliés entre eux, permettent d’obtenir une
chaîne de traitement numérique. Grâce à la définition
d’une interface matérielle unique, chaque bloc est
indépendant, ce qui permet de construire une chaîne par
assemblage. Cette couche est détaillée dans la partie
décrivant le matériel utilisé.
Fig. 1.
Architecture : interfaces
D. Communication interne
Une telle architecture en blocs impose des interfaces
entre blocs définies précisément, tant au niveau matériel
qu’au niveau logiciel.
Les interfaces de niveau matériel pour les blocs de
traitement de la couche physique ont été développés
entièrement, et sont présentés dans la partie traitant du
matériel dans le système. Les interfaces entre macroblocs, elles, font partie de l’architecture. Deux interfaces
nous intéressent ici : l’interface MAC/Linux et l’interface
MAC/PHY. Chacune de ces interfaces requière une étude
séparée, les besoins n’étant pas les mêmes.
L’interface MAC/PHY, par exemple, a des besoins
temps réel que l’on ne retrouve pas dans l’interface
MAC/Linux. Ces besoins temps-réel nous ont poussé
vers une interface à base de liens rapides de type FIFO,
pour l’interface MAC/PHY.
Le Linux et la couche MAC ont eux besoin de persistance dans les données, une communication à base de
mémoire partagée a été adoptée. Une interface à base de
DMA est envisageable, mais plus complexe à implanter.
Au niveau logiciel, les APIs sont également différentes,
car liées à l’architecture matérielle. Ainsi, l’interface
MAC/Linux utilise des registres/variables partagés, et un
système de signalisation par interruption.
Par contre, l’API MAC/PHY ne peut être implémentée
de la même manière, les contraintes temps réel ne
supportant pas le surcoût occasionné. Un système de
scrutation sur les FIFO et de commandes prédéfinies est
donc mis en place.
Enfin, une interface logicielle est nécessaire pour le
contrôle des blocs matériels de traitement de la couche
PHY. Cette « interface », définie dans les normes IEEE,
s’appellent le PLCP (Physical Layer Convergence Protocol), et sert en fait à offrir aux couches supérieures
une API indépendante des techniques de transmission
P28
CIME
utilisées.
III. PARTIES LOGICIELLES
A. Retour sur le CSMA/CA
Comme défini dans l’architecture, les parties logicielles concernent essentiellement les couches hautes,
ainsi que la couche de convergence (PLCP). Le plus
gros effort de développement a été fait sur la couche
MAC et sur l’implantation d’un protocole d’accès au
médium appelé CSMA/CA (Carrier Sense Multiple Access/Collision Avoidance).
Le CSMA/CA est une évolution du CSMA axée sur les
réseaux sans fil. La version filaire, appelée CSMA/CD,
ne pouvait pas convenir du fait des caractéristiques du
médium utilisé. Le CSMA/CD se base en effet sur la
détection des collisions par la mesure de la puissance :
si la puissance mesurée est supérieure à la puissance
attendue, deux émissions ont eu lieu en même temps.
Dans le cas des réseaux sans fils, la forte atténuation
de la puissance du signal fait qu’un émetteur ne peut
mesurer ces différences, le signal qu’il émet écrasant
complètement les autres signaux.
Plutôt que de détecter les collisions, le CSMA/CA a pour
objectif de les éviter. Ceci se fait par l’intermédiaire de
temps d’attente « aléatoires ».
Fig. 2.
Fonctionnement du CSMA/CA
B. Linux embarqué
Pour pouvoir utiliser le système, il est nécessaire
d’offrir à l’utilisateur une interface avec un système
d’exploitation connu pour pouvoir le contrôler. Plusieurs
solutions existent. La plus courante utilise le système
comme une carte réseau et se branche sur un PC hôte
comme un périphérique, par USB ou PCI. Le Virtex2Pro
a l’avantage d’offrir deux PowerPC405 en matériel à
l’utilisateur, et un noyau Linux 2.4 avait déjà été porté
sur ce processeur avec l’architecture Xilinx. Il a donc été
décidé d’offrir à l’utilisateur un système complet, avec la
partie réseau et le système d’exploitation tournant sur la
carte, donnant lieu à la création d’un système embarqué
Fig. 3.
Architecture logicielle du système
complet.
Selon les besoins, deux variantes de l’environnement
sont disponibles, différenciées par le type de partition
racine. En effet, la solution la plus simple utilise la technologie NFS pour monter une partition racine disponible
sur une machine hôte. Cette solution permet d’inclure
dynamiquement des modifications depuis le PC hôte
(la compilation n’étant pas possible depuis la carte), et
de conserver les modifications. Par contre, l’utilisation
d’une partition NFS nécessite une connexion réseau
active avant le lancement réel du système, ce qui peut
être bloquant pour certaines manipulations (par exemple,
la mise en place d’un point d’accès WiFi avec un bridge
reliant l’interface sans fil et l’interface Ethernet).
Une deuxième solution a donc été implémentée. Cette
solution utilise une partition racine chargée en mémoire
vive au démarrage. Elle présente certains désavantages,
principalement le temps de chargement et la volatilité
des modifications. Elle ne permet pas non plus de
modifications dynamiques depuis la machine hôte : les
modifications doivent être inclues puis le noyau recompilé pour les prendre en charge. Par contre, elle offre des
avantages non négligeables en termes de performance, et
permet de se passer du réseau au démarrage du système.
L’environnement standard offert reste cependant le même
dans les deux cas (même noyau et mêmes outils). Les
outils installés sont les outils de base pour un Linux
axé réseau : les outils de configuration ifconfig,
iwconfig, arp, traceroute, ping, brctl, . . . .
Des commandes plus spécialisées sont disponibles, telles
P28
CIME
D. MadWiFi
Fig. 4.
Automate du CSMA/CA
que wget ou dhcpcd. Le noyau est compilé avec
le support pour la plupart des manipulations fines du
réseau, telles que le bridging ou les VLANs, et avec le
support de la cryptographie pour le cryptage des données
(WEP ou WPA). Un « sniffeur » de réseau est également
installé pour capturer et étudier les paquets en transit
(tcpdump).
C. Couche MAC
Le développement de la couche MAC comporte en fait
deux parties principales : la partie CSMA/CA décrite
plus haut, qui définit le protocole d’accès au médium,
et la partie « paquet », qui gère la mise en forme des
données dans un format défini par la norme. Dans notre
système, la partie de gestion des paquets est faite dans
le driver MadWiFi (présenté plus bas), ce qui permet de
ne s’intéresser qu’au protocole d’accès.
Le développement de la couche MAC impose des contraintes de type temps réel fortes. En effet, la notion de
priorité est omniprésente, et les contraintes temporelles
imposées par les normes forcent à répondre dans des
temps très courts à certaines requêtes. Par exemple, dans
le cas du WiFi, le temps entre la réception du paquet et
l’acquittement de ce paquet est de 10μs, avec une marge
d’erreur de 10%. Le protocole actuellement disponible
est de type CSMA/CA, avec quelques modifications
sur les temporisations préconisées dans le WiFi. Ce
protocole est en fait une machine à état, d’un point
de vue algorithmique. De nouveaux protocoles peuvent
facilement être réimplémentés en utilisant les interfaces
disponibles : seul le coeur de l’algorithme doit être réimplémenté, permettant une expérimentation simplifiée.
L’interface logicielle entre la couche MAC et les
couches supérieures a déjà été explicitée, mais elle
ne suffit pas dans notre cas. Il faut en effet ajouter
l’interface avec le Linux. Toujours dans un souci de
normalisation, le système utilise un driver répandu
appelé MadWiFi, développé à la base pour supporter les
chipsets WiFi de type Atheros. Ce driver est organisé
en plusieurs modules Linux, parmi lesquels un module
appelé HAL qui offre une API aux autres modules pour
le contrôle du matériel. L’implantation de l’interface
revient donc à implémenter cette HAL en utilisant
nos spécifications. L’utilisation de MadWiFi permet
de se concentrer sur les parties nous intéressant ici.
Cependant, le développement dans MadWiFi peut se
révéler ardu.
E. Test du logiciel : CYWUSB6935
Pour tester ces différentes parties logicielles, il peut
être utile d’utiliser une couche physique existante. Pour
se faire, le module Cypress CYWUSB6935 est d’une
grande utilité. En effet, il offre, via une interface SPI,
un système de transmission complet : il suffit de le
configurer au début, puis on écrit dans des registres les
octets à envoyer. Un système d’interruption permet de
connaître l’état du système.
Dans la configuration utilisée, le module peut atteindre
un débit binaire de 16kb/s, soit 2ko/s. Le débit utile
obtenu dans la version stable actuelle est de 1,40ko/s,
avec comme test un transfert d’un fichier de 116ko par
FTP.
IV. PARTIES MATÉRIELLES
A. Architecture de la couche physique
La couche physique a pour fonction de transmettre
les paquets reçus de la couche MAC sur le médium et
vice versa. Elle génère les signaux analogiques pour
l’émission et les traite dans le cas de la réception.
Une grande partie de sa tâche relève du traitement du
signal et nécessite donc une importante puissance de
calcul pour être effectuée en logiciel. Les ressources
permettant d’exécuter du logiciel disponibles sur le
Virtex2Pro n’étant pas suffisamment puissantes, le
traitement est effectué en grande partie dans des blocs
matériels de calcul développés en VHDL.
La couche physique est ainsi constituée d’un processeur
MicroBlaze, appelé « PLCP », et de deux chaînes de
traitement formées de plusieurs blocs de calculs, une
pour l’émission et l’autre pour la réception. Chacune
P28
CIME
une autre chaîne de traitement. L’interface d’entrée et
de sortie d’un bloc est prédéfinie et de cette manière, il
suffit d’implémenter ces interfaces pour développer un
nouveau bloc.
B. Aiguillage des données
Fig. 5.
Couche PHY
des deux chaînes de traitement est reliée au MicroBlaze
et au bloc matériel s’interfaçant avec les convertisseurs
Numérique-Analogique et Analogique-Numérique, par
exemple le composant Maxim 19713, connectés a la
carte XUPV2P.
Ces chaînes de traitement sont entièrement contrôlées
par le MicroBlaze. Chaque bloc de traitement qui
nécessite une configuration via des registres est doté
d’un accès à un bus permettant au MicroBlaze de lire
et écrire dans ces registres. De plus, un composant
d’initialisation connecté sur ce même bus permet de
déclencher une ré-initialisation complète d’une chaîne
de traitement, ce qui est nécessaire avant toute émission
ou réception.
Une chaîne de traitement ressemble donc à un pipeline,
où chaque bloc de calcul est un étage, cela permet
d’atteindre des débits bien plus important qu’en logiciel
et nécessaires pour respecter les standards de réseaux
sans fil. Pour la norme 802.11b, le WiFi, il faut en effet
échantillonner les signaux analogiques à au moins 11
MHz.
Comme dit précédemment l’intérêt d’une telle architecture est son efficacité, celle-ci est aussi aisément
modifiable même si cela ne peut être fait en modifiant
uniquement la partie logicielle. Pour apporter des modifications à la chaîne de traitement, il suffit d’ajouter et/ou
de supprimer des blocs dans l’architecture, de recompiler
celle-ci et de la charger dans le Virtex II Pro. Chaque
bloc étant basique et parfois configurable par registre,
la plupart des blocs peuvent être réutilisés pour réaliser
Une contrainte supplémentaire est introduite par les
normes : plusieurs modulations peuvent être utilisées
lors d’une transmission. Cela correspond par exemple
aux différents débits proposés par la norme 802.11b (le
WiFi) : 1, 2, 5.5 ou 11 Mbits/s. Il est donc nécessaire
de pouvoir changer le traitement qu’effectue la chaîne
et cela en temps réel car il doit être possible de passer
d’une modulation à une autre à un instant précis. Ce
problème est résolu en introduisant des aiguilleurs dans
la chaîne de traitement permettant ainsi d’orienter les
données vers ou depuis un bloc de calcul choisi.
Pour pouvoir changer de traitement a un instant donné,
un mécanisme d’étiquetage est introduit. Chaque donnée
de la chaîne se voit affectée un « ID » unique qui
est utilisé pour l’identifier. Les aiguillages sont programmables : il est possible de leur ordonner de changer
l’aiguillage des données lorsqu’un certain ID est détecté.
Ainsi le MicroBlaze peut contrôler quel traitement est
effectué en anticipant les changements à faire et en
programmant les aiguillages.
C. Domaines d’horloge
Un autre problème est posé par la fréquence
d’échantillonnage des convertisseurs analogiquenumérique (CAN) et numérique-analogique (CNA).
En effet celle-ci dépend de la fréquence des signaux
analogiques générés ou traités et fixe aussi la fréquence
de l’interface avec ces convertisseurs, à savoir un bus
parallèle. Les blocs voisins de cet interface sont donc
obligatoirement cadencés à cette fréquence tandis que
les blocs voisins du MicroBlaze doivent être cadencés
à la fréquence de ce dernier. Il est donc nécessaire
d’ajouter des FIFOs bisynchrones entre certains blocs
permettant de séparer les domaines d’horloges de la
chaîne de traitement. De plus chaque bloc nécessitant
une liaison sur le bus du MicroBlaze intègre une
interface de synchronisation puisque la fréquence du
bus n’est pas forcément celle du bloc.
D. Implantation du WiFi
Le développement de la couche physique a été orienté
vers la norme 802.11b (norme WiFi), et plus précisément
sur les deux premiers débits définis : 1 et 2 Mbits/s. La
modulation est divisée en deux parties.
P28
CIME
Fig. 6.
Chaîne de traitement pour l’émission
La première partie consiste à moduler les données en
symboles. Les symboles sont des phases et ils codent 1
ou 2 bits suivant le débit voulu (1 ou 2 Mbits/s). Un
symbole vaut 0 où π quand il code 1 bit et il vaut 0,
π/2, π ou 3π/2 quand il code 2 bits. La modulation est
différentielle, ce qui signifie que la phase d’un symbole
est relative à celle du symbole précédent et non absolue.
La deuxième partie reprend les symboles précédents, et
duplique chacun 11 fois suivant la séquence de Barker
suivante :1, −1, 1, 1, −1, 1, 1, 1, −1, −1, −1. Un 1 signifie que le symbole n’est pas modifié et un −1 signifie
que le symbole est inversé.
Une fois la séquence de Barker appliquée, le débit des
symboles est de 11 millions de symboles par seconde
quel que soit le débit de données initial. Ces symboles
sont ensuite transmis à un convertisseur analogique
numérique. La figure 6 montre la chaîne de traitement
pour l’émission. La chaîne de traitement pour la réception est similaire.
Le passage vers et depuis les signaux analogiques I et Q
se fait grâce au composant MAX19713 qui est connecté
via sa carte d’évaluation à la carte XUPV2P.
Fig. 7.
Développement Linux/MAC/PLCP
Fig. 8.
Dévelopement PLCP/PHY
V. E XPÉRIMENTATIONS
Les figures 7 et 8 présentent la mise en œuvre
du prototype. Sur la figure 7, on peut distinguer
l’environnement de développement Linux, les deux
cartes XUPV2P, les modules RF Cypress, et des trames
circulant sur l’oscilloscope. C’est l’environnement qui a
été utilisé pour développer la couche MAC en lien avec
le Linux d’un coté et le PLCP de l’autre.
La figure 8 montre les deux convertisseurs IQ, connectés
en filaire, attaqués par les éléments matériels et logiciels
implantant la couche PLCP, avec un symbole après
étalement de spectre circulant sur les fils analogiques.
La totalité du développement des blocs matériels et
logiciels s’effectue dans un environnement Linux, y
compris la programmation des cartes.
VI. C ONCLUSION
Cet article illustre les possibilités qu’offrent les FPGA
intégrant des processeurs : il est maintenant possible
d’intégrer des systèmes complets réalisant des fonctions radio complexes couvrant la totalité de la transmission numérique. Ces systèmes incluent des aspects
logiciels, numériques et même analogiques à de faibles
coûts, et les rendent ainsi tout à fait utilisables dans le
cadre de travaux pratiques ou de projets d’intégration
matériel/logiciel, de transmission numérique ou de
réseau. Néanmoins, il est nécessaire de concevoir dès
le départ ces plates-formes en ayant en tête le public
visé, afin que l’investissement dans des développements
aussi complexes et longs puisse effectivement être mis
en mis en œuvre par l’utilisateur final.
P28
Téléchargement