IMG - Bienvenue sur Catalogue des mémoires de projets de fin d

publicité
Mémoire de Projet de Fin d'Etudes
Sujet : Réalisation d’une interface Ethernet sur FPGA pour une
centrale d’acquisition basses températures rapide
Auteur : Fabien AUBERT
INSA de Strasbourg, Spécialité Génie Electrique
Tuteur entreprise : Daniel COMMUNAL
Tuteur INSA Strasbourg : Bertrand BOYER
Du 01/03/2011 au 29/07/2011
CEA GRENOBLE
17, rue des Martyrs
38054 Grenoble Cedex 9
REMERCIEMENTS
Avant de commencer ce rapport, je souhaite remercier Alain GIRARD, chef du SBT, de
m’avoir permis d’effectuer ce projet de fin d’études au Service des Basses Températures du
CEA Grenoble pendant cinq mois.
Je tiens à adresser mes plus vifs remerciements à mon maître de stage Daniel COMMUNAL,
pour m’avoir proposé un sujet aussi riche qu’intéressant, pour sa très grande disponibilité
ainsi que ses nombreux conseils.
Je remercie Patrick BONNAY, chef du groupe GEA, de s’être intéressé à mon travail et aux
problèmes auxquels j’étais confronté.
Je souhaite remercier :
- Christophe MARIETTE, pour ses conseils et remarques pertinentes.
- Anthony ATTARD et Guillaume FEGE, pour leur aide et explications sur la version actuelle
de la Centrale d'Acquisition ainsi que sur l'utilisation des logiciels Xilinx.
- Thierry JOURDAN, pour son aide et ses conseils sur tout ce qui touche au logiciel.
- Michèle MOUCOT, secrétaire du SBT, pour son implication dans toutes les démarches
administratives.
Je voulais également remercier l’ensemble du groupe GEA au sein duquel il règne une très
bonne ambiance.
Merci à Bertrand BOYER, tuteur enseignant de l'INSA, pour avoir suivi l’évolution de mon
projet de fin d’études.
Enfin, je remercie toutes les personnes qui se sont impliquées de près ou de loin dans le
déroulement de mon stage.
PFE / Génie Electrique / Fabien AUBERT
2
INTRODUCTION
J’ai effectué mon Projet de fin d’études au « Commissariat à l’Energie Atomique et aux
énergies alternatives » (CEA) de Grenoble dans le Groupe Electronique et Automatique
(GEA). Ce groupe figure au sein du Service des Basses Température (SBT) faisant partie de
l’Institut Nanoscience et Cryogénie (INAC).
Le Service des Basses Températures développe et utilise de l'instrumentation
spécifiquement adaptée à la cryogénie. Un projet de centrale d'acquisition pour les basses
températures (1 K à 300 K) est en cours de réalisation, une première partie concernant
l'acquisition et le traitement des mesures a été mise au point sur la base d'un composant
FPGA. Nous souhaitons maintenant intégrer la partie post-traitement et stockage des
données ainsi que la communication via le protocole Ethernet MODBUS TCP sur ce même
composant FPGA. Le but du stage est d'une part de synthétiser les composants réseau
nécessaires et d'autre part de développer le logiciel applicatif associé pour le processeur
embarqué dans ce FPGA.
La carte électronique de la centrale comporte 8 voies de mesure adaptées uniquement aux
capteurs à résistance. Le principe est de mesurer des tensions et des courants pour obtenir
une valeur de résistance qui est ensuite convertie en température. Dans l'état actuel des
choses, une carte processeur est couplée à plusieurs cartes de mesure. Elle se charge du
post-traitement des données, de leur stockage et de leur transfert via Ethernet.
Le but de mon stage est de développer une version mono-carte de ce système (8 voies
seulement). Cette autre version, dite « stand-alone » (autonome) est en quelque sorte une
version « allégée » qui comportera moins de capacités de traitement mais sera autonome et
moins chère. Elle vise à se passer de la carte réalisant le post-traitement des données et
l’interface Ethernet et de tout intégrer sur une seule et même carte, en se servant des
ressources non utilisées dans le FPGA. L’objectif est donc d'un côté, de récupérer les
mesures, les traiter (calculer les valeurs de résistance puis les convertir en température), les
stocker et d'un autre côté de les rendre disponibles sur le réseau via Ethernet. Un autre
aspect de mon projet est de répondre à certaines requêtes, permettre de modifier (à
distance) des paramètres du système sans avoir à reprogrammer le FPGA, transférer des
fichiers via TFTP, etc. Cet autre aspect n’était, à l’origine, pas prévu dans le sujet de mon
stage mais vu l’avancement, cette partie a aussi été traitée.
Mon travail consiste donc à réaliser une application comportant plusieurs tâches qui doivent
respecter des contraintes de temps réel (en particulier la tâche d’acquisition des mesures).
Dans ce rapport de nombreux termes techniques et acronymes sont utilisés dont une
définition est donnée dans le lexique, à la fin du mémoire.
PFE / Génie Electrique / Fabien AUBERT
3
RESUME
Réalisation d'une interface Ethernet sur FPGA pour une centrale
d'acquisition basses températures rapide
Le Service des Basses Températures du CEA de Grenoble développe et utilise de
l'instrumentation spécifiquement adaptée à la cryogénie. Un projet de centrale d'acquisition
pour les basses températures (1 K à 300 K) est en cours de réalisation, une première partie
concernant l'acquisition et le traitement des mesures a été mis au point sur la base d'un
composant FPGA.
L'objectif est maintenant d'intégrer la partie post-traitement et stockage des données ainsi
que la communication via le protocole Ethernet MODBUS/TCP/IP sur ce même composant
FPGA.
Le projet consiste d'une part à synthétiser les composants nécessaires et d'autre part à
développer le logiciel applicatif associé, pour le processeur embarqué dans ce FPGA. Il faut
pour cela réaliser une application comportant plusieurs tâches qui doivent respecter des
contraintes de temps réel (en particulier la tâche d’acquisition des mesures).
Development of an Ethernet interface on a FPGA for a fast low
temperatures data logger
Service of Low Temperatures of the CEA Grenoble develops and uses instrumentation
specifically tailored to cryogenics. A data logger for low temperatures (1 K to 300 K) is in
progress, a first part concerning the acquisition and processing steps has been developed
based on an FPGA.
The goal is now to integrate the part of the project concerning post-processing and data
storage as well as communication via the Ethernet protocol Modbus / TCP / IP on the same
FPGA.
The project consists in synthesizing the necessary components and developing the
application associated software, for the embedded processor in the FPGA. This requires an
application with multiple tasks that must meet real time constraints (especially the acquiring
measurements task).
PFE / Génie Electrique / Fabien AUBERT
4
SOMMAIRE
REMERCIEMENTS ....................................................................................................................... 2
INTRODUCTION .......................................................................................................................... 3
RESUME ...................................................................................................................................... 4
1
2
Présentation de l’entreprise .............................................................................................. 7
1.1
Historique .................................................................................................................... 7
1.2
Chiffres (2010) et activité ............................................................................................ 7
1.3
Le CEA de Grenoble ..................................................................................................... 8
1.4
Le service des basses températures (SBT) ................................................................... 9
Introduction du sujet ........................................................................................................ 11
2.1
2.1.1
Contexte ............................................................................................................. 11
2.1.2
Principales spécifications de la CABTR ............................................................... 12
2.1.3
Fonctionnement et problématique .................................................................... 13
2.2
4
Principe de fonctionnement général ......................................................................... 15
2.2.1
Acquisition et mise en forme des signaux.......................................................... 15
2.2.2
Conversion des mesures de tension et courant ................................................. 16
2.2.3
Stockage et transfert des données .................................................................... 17
2.3
3
La centrale d’acquisition de température ................................................................. 11
Protocoles de communication ................................................................................... 17
2.3.1
TCP/IP et OSI....................................................................................................... 17
2.3.2
Le protocole Modbus TCP .................................................................................. 19
Développement de la partie matérielle ........................................................................... 21
3.1
Réalisation d’une carte d’interface Ethernet pour le prototype ............................... 21
3.2
Environnement de travail .......................................................................................... 24
3.3
Mise en place d’un système multitâches temps réel ................................................ 25
3.3.1
Ordonnancement des tâches ............................................................................. 25
3.3.2
Accès aux données ............................................................................................. 26
Développement de la partie logicielle ............................................................................. 28
4.1
Architecture du système............................................................................................ 28
4.2
Initialisation ............................................................................................................... 30
PFE / Génie Electrique / Fabien AUBERT
5
4.2.1
Initialisation du système de fichier .................................................................... 30
4.2.2
Initialisation des coefficients de calibrage (ou calibration) ............................... 32
4.2.3
Initialisation des coefficients de linéarisation .................................................... 32
4.2.4
Démarrage du noyau .......................................................................................... 33
4.3
4.3.1
Implémentation de la couche TCP ..................................................................... 34
4.3.2
Serveur Modbus TCP .......................................................................................... 35
4.3.3
Serveur web, serveur TFTP, echo server ............................................................ 40
4.4
Traitement et stockage des acquisitions ................................................................... 40
4.4.1
Calcul de résistance et de température ............................................................. 40
4.4.2
Archivage des mesures....................................................................................... 42
4.4.3
Visibilité des mesures depuis l’extérieur ........................................................... 43
4.5
5
Communication réseau.............................................................................................. 34
Ordonnancement des tâches .................................................................................... 44
Portage sur la carte prototype CABTR ............................................................................. 45
5.1
Problèmes liés à l’utilisation d’une mémoire de type SDR SDRAM .......................... 45
5.2
Intégration de la récupération des mesures ............................................................. 47
5.3
Evolutions .................................................................................................................. 48
CONCLUSION ............................................................................................................................ 49
LEXIQUE .................................................................................................................................... 50
BIBLIOGRAPHIE ......................................................................................................................... 52
PFE / Génie Electrique / Fabien AUBERT
6
1 Présentation de l’entreprise
1.1 Historique
C’est en 1945 que le Général De Gaulle décide de créer le CEA afin de poursuivre la
recherche nucléaire et plus particulièrement des « recherches scientifiques et techniques en
vue de l’utilisation de l’énergie nucléaire dans le domaine de la sciences, de l’industrie et de
la défense nationale ». (Article premier du décret du 18 octobre 1945).
En 1956, les premiers Kilos Watt heure d’origine nucléaire sont produits sur le centre de
Marcoule.
Au fil du temps, le CEA a su se diversifier dans d’autres domaines tels que les
nanotechnologies ou l’électronique. Le CEA porte depuis mars 2010 le nom de Commissariat
à l’Energie Atomique et aux énergies alternatives.
Aujourd’hui, il est un acteur majeur en matière de recherche, de développement, et
d’innovation. Il intervient dans quatre grands domaines : les énergies bas carbone, les
technologies pour l’information et les technologies pour la santé, les Très Grandes
Infrastructures de Recherche (TGIR), la défense et la sécurité globale.
Le CEA est un établissement public industriel et commercial (EPIC).
1.2 Chiffres (2010) et activité
Le CEA est implanté sur 10 centres répartis dans toute la France. Il développe de nombreux
partenariats avec les autres organismes de recherche, les collectivités locales et les
universités.
Le CEA dispose d’un budget de 4,2 milliards d’euros dont 60% est destiné aux programmes
civils contre 40% pour les programmes de défense. 15989 salariés se répartissent sur les 10
centres de recherche. Plus de 600 dépôts de brevets prioritaires déposés dans l’année et 130
entreprises créées depuis 1984.
Le CEA se divise en 4 pôles fonctionnels et en 4 pôles opérationnels qui sont :
- Le pôle Energie. Le CEA cherche à optimiser le parc actuel des réacteurs nucléaires et
à mettre au point des solutions pour le traitement des déchets radioactifs. Il participe aussi
au développement des énergies nucléaires du futur tel que le projet ITER (International
Thermonuclear Experimental Reactor), plus sûres, plus économiques et générant moins de
déchets.
- Le pôle Défense. Il vise à garantir la pérennité de la dissuasion nucléaire et la
sécurité. Il met en œuvre des programmes de simulation (laser mégajoule) afin de palier à
l’arrêt des essais nucléaires.
PFE / Génie Electrique / Fabien AUBERT
7
Il est aussi responsable de la conception et de la maintenance des réacteurs de propulsion
nucléaire (sous marins, porte-avions).
- Le pôle Recherche Technologique. Destiné à valoriser l’innovation industrielle, le CEA
exerce ses compétences dans le domaine des technologies logicielles telles que les systèmes
embarqués et interactifs, les capteurs et le traitement du signal.
Il est aussi un acteur de la recherche médicale grâce à ses compétences autour des
biotechnologies et des technologies nucléaires pour la santé (marquage biomoléculaire,
imagerie médicale…).
- Le pôle Recherche. Ce pôle contribue à l’ensemble du CEA de part ses activités en
recherche fondamentale reconnue pour son excellence. Les principaux domaines sont la
fusion thermonucléaire, l’étude du climat et de l’environnement, la connaissance de la
matière et du vivant.
1.3 Le CEA de Grenoble
Le CEA de Grenoble a été fondé en 1956 sous le nom de Centre d’Etudes Nucléaires de
Grenoble (CENG) par le professeur Louis Néel, prix Nobel de physique.
Bien qu’initialement destiné à la recherche nucléaire, en 1965 y est créé le premier circuit
intégré français, composé de 10 transistors. C’est deux ans plus tard que le Laboratoire
d’Electronique et de Technologie de l’Information (LETI) est créé, détenteur du record en
1999 du plus petit transistor (20nm).
Depuis janvier 2001, ce centre s'est engagé dans un plan d'assainissement
démantèlement de ses installations
nucléaires (projet « passage »). Le
dernier démantèlement étant prévu pour
2012.
et de
Le CEA Grenoble est le premier centre de
recherche technologique en RhôneAlpes. 4200 personnes travaillent sur le
site dont 2300 salariés CEA, 225 brevets
sont déposés par an.
Le CEA de Grenoble est ainsi à l’origine
des accéléromètres de nos airbags, du
Figure 1 - Vue aérienne du CEA Grenoble
SOI (Silicon On Insulator) améliorant les
performances des puces, de nombreux brevets pour les écrans plats…
Aujourd’hui, la recherche technologique représente 80% de l’activité du centre.
PFE / Génie Electrique / Fabien AUBERT
8
Le pôle de Recherche Fondamentale dépendant de la direction des sciences de la matière
mène toutefois une activité très riche.
En effet, l’Institut Nanoscience et Cryogénie (INAC) est présent dans :
- les cryotechnologies (cryogénie spatiale, fusion par confinement inertiel et
magnétique, instrumentations et automatisme…),
- le développement de connaissances fondamentales (chimie moléculaire,
magnétisme, supraconductivité…),
- la physique et chimie pour l’électronique organique (électronique plastique, projet
Chimtronique),
- la physique et chimie pour les technologies de la santé.
- la physique et chimie pour les technologies de l’énergie.
1.4 Le service des basses températures (SBT)
C’est dans ce service que j’ai eu la chance d’effectuer mon stage.
Le SBT a été crée en 1957 sous l’influence du professeur Weil, pionnier des basses
températures en France. Il est composé actuellement d’environ cinquante personnes.
Le SBT est rattaché à L’Institut des NAnosciences et de la Cryogénie (INAC), lui-même
dépendant de la Direction des Sciences de la Matière (DSM). De nos jours, le domaine de
compétence du SBT est la cryotechnologie allant d’une température de quelques dizaines de
milli Kelvin à 120 K (-153,15 °C). Cette limite représente la température limite à partir de
laquelle les gaz de l'air se liquéfient.
L’activité du SBT se concentre aujourd’hui autour de 3 axes de recherches :
-
-
Développement de composants et études thermohydrauliques nécessaires à la mise
en œuvre de l’hélium superfluide ou super critique pour le refroidissement des
grands aimants supra conducteur (LHC, ITER, JT60).
Cryogénie pour la production de cibles, propulsion de glaçons D2 et pompage
cryogénique pour la fusion nucléaire.
Développement de la réfrigération autonome (réfrigérateurs à 4K, tubes à gaz pulsé,
adsorption 3He) pour applications sol et spatiales
Il mène des activités de Recherche et Développement en cryogénie pour les grands projets
du CEA et de grands projets européens et mondiaux dont le CEA est partenaire. Les travaux
vont de l’étude système (en cours avec ITER par exemple) jusqu’à la fourniture de
cryoréfrigérateurs pour le spatial en passant par l’étude et la validation de solutions
techniques pour les cibles cryogéniques du laser Mégajoule.
PFE / Génie Electrique / Fabien AUBERT
9
Le SBT a par exemple mis au point une solution de moins de 5kg permettant de produire en
continu 1μW de puissance de refroidissement à 50mK en environnement spatial. Il a ainsi pu
remporter un appel d’offre de l’Agence Spatiale Européenne pour équiper le futur satellite
d’observation SPICA qui opérera dans l’infrarouge.
Le SBT mène aussi une des expériences sur la station OLGA (Oxygen Low Gravity Apparatus)
visant à étudier le réchauffement de l’oxygène liquide en apesanteur.
La mise en œuvre de l’hélium superfluide sur des installations de grande taille permet au SBT
de participer à de grands projets tels que les réfrigérateurs 1,8K du LHC ou le design du
réacteur de fusion par confinement magnétique ITER à Cadarache.
Ce service se décompose en en six groupes (3 groupes thématiques et 3 groupes
fonctionnels) :
Groupes thématiques :
•
Cryoréfrigérateurs et Cryogénie Spatiale (GCCS)
•
Réfrigération THermohydraulique (GRTH)
•
Cryogénie Fusion (GCF)
Groupes fonctionnels :
•
Liquéfaction Réfrigération et Caractérisation (GLRC)
•
Electronique Automatique (GEA)
•
Calculs et Conception Cryogéniques (G3C)
J’ai été rattaché au groupe Electronique Automatique. Ce groupe est responsable de
l’automatisme, de l’instrumentation et de l’électronique associé à la cryogénie. Il a ainsi
développé des pressostats, des centrales d’acquisition de températures, des modules de
commandes de chauffage, des automates de processus cryogénique…
PFE / Génie Electrique / Fabien AUBERT
10
2 Introduction du sujet
2.1 La centrale d’acquisition de température
2.1.1 Contexte
La mesure de température en cryogénie est un élément des plus importants et des plus
complexes. L’instrumentation est réellement spécifique. Il faut en effet transmettre une
puissance minimale au capteur afin de ne pas perturber la mesure. Dans le cas contraire,
l’effet joule viendrait à la fois réchauffer le capteur et la température ambiante du milieu.
Le GEA a donc développé une Centrale d’Acquisition Basse Température pour Réseau Fip
(CABTF) qu’elle utilise depuis 1993 (Figure 2).
Figure 2 - Centrale d'Acquisition Basse Température pour Réseau Fip (CABTF)
Cette centrale utilise des capteurs résistifs. Elle dispose de 8 voies (extensible à 16 par
boitier), d'une bande passante de 1,4Hz et d'une résolution de quelques milli Kelvin à la
température de 4,2 K (température de liquéfaction de l’hélium).
Toutefois, de nos jours, il devient parfois nécessaire d’observer des
phénomènes thermiques transitoires rapides ce que ne permet pas la
CABTF.
Un des projets du SBT consiste à améliorer la sécurité et la fiabilité des
cryostats. Lorsque le vide d’isolement d’un cryostat, contenant un
réservoir d’hélium, est rompu de manière accidentelle, la pression du
réservoir augmente. Si l’organe de sécurité, tel que soupape ou disque
de rupture associé est sous dimensionné, la pression du réservoir va
continuer à croitre jusqu’à provoquer son explosion. Il est donc
nécessaire de quantifier le flux de chaleur déposé aux parois du
réservoir. La pression, suite à une telle rupture, va croitre de 1 bar à 14
bars en 3,5 secondes, la température variant dans le même temps de
quelques Kelvins à plusieurs centaines (Figure 3).
PFE / Génie Electrique / Fabien AUBERT
Figure 3 - Test de
comportement d'un
rupture de vide
d'isolement
11
D’autres applications nécessitent des instruments permettant d’étudier des oscillations de
température à une fréquence de quelques dizaines de hertz (tubes à gaz pulsés). La CABTF
ne le permet pas.
C’est grâce à l’apparition de nouveaux capteurs résistifs (Cernox) avec des temps de réponse
de 1,5 ms à 4,2 K, des plages de température de 100 mK à 420 K qu’il est concevable de
mettre au point des centrales d’acquisition de basses températures avec une bande
passante plus élevée que la CABTF.
2.1.2 Principales spécifications de la CABTR
Afin de répondre aux nouveaux besoins du SBT, le GEA a décidé de développer une nouvelle
Centrale d’Acquisition de Basses Températures Rapide (CABTR). L’objectif étant toujours de
fournir le signal d’excitation le plus faible sur le capteur résistif tout en augmentant la bande
passante.
Le cahier des charges indique une dynamique de mesure de 0 à 100kΩ, une bande passante
de 100Hz, une fréquence d’échantillonnage de 1kHz.
Deux modes de récupération des données seront disponibles :
- Un mode « lent » qui permet de récupérer les échantillons à une fréquence de
100Hz. Pour cela, la bande passante des signaux est limitée à 10Hz.
- Un mode « rapide » qui permet quant à lui d’échantillonner à 1kHz. La bande
passante des signaux est alors limitée à 100Hz.
Contrairement au modèle précédent, le signal d’excitation est de forme sinusoïdale et
d’amplitude maximale 7mV. Afin de palier au mieux aux problèmes de bruit et à la
composante 50Hz du secteur, il a été décidé de faire de la modulation/démodulation
synchrone.
Jusqu’à une fréquence de modulation d’environ 500Hz, l’influence des capacités parasites de
liaison au niveau du capteur reste négligeable. C’est la fréquence limite retenue par le cahier
des charges.
Pour des raisons économiques, le cahier des charges impose de traiter 8 voies de mesure
simultanément. Il est nécessaire d’avoir une capacité de calcul importante.
La partie traitement du signal (modulation, démodulation numérique) est effectuée grâce à
un FPGA.
PFE / Génie Electrique / Fabien AUBERT
12
Fréquence
d’échantillonnage
Bande passante
Nombre de voies
Excitation
Gamme de résistance
CABTF
CABTR
6.2Hz
1kHz
1.4Hz
8 à 16
Continue
0-40kΩ
100Hz
8 à 16
Sinus 512Hz/128Hz
0-100kΩ
2.1.3 Fonctionnement et problématique
La version actuelle de la CABTR peut se décomposer en trois grands blocs (Figure 4). Le
premier, assure le conditionnement du courant et de la tension. Il transmet ces données à
l’aide d’un convertisseur analogique numérique (CAN) au second bloc purement numérique
composé d’un FPGA. Une fois la valeur de la résistance déterminée, elle est transmise au
troisième bloc appelé « module unité centrale ». Ce bloc se charge du post traitement des
données, de leur stockage (en mode « rapide ») et les rend accessibles sur le réseau.
CARTE D’ACQUISITION
SPI entrant
CARTE
PROCESSEUR
Traitement
numérique
FPGA
Bloc analogique
SPI sortant
CARTE D’ACQUISITION
Bus //
Module unité
centrale (MUC)
SPI entrant
Traitement
numérique
FPGA
Bloc analogique
Réseau
SPI sortant
Figure 4 - Schéma de fonctionnement de la version actuelle de la CABTR
Cette version offre la possibilité de connecter deux cartes d’acquisition et donc d’avoir 16
voies de mesures. Le module unité centrale est réalisé à l’aide d’une carte processeur
vendue par l’entreprise MII (Modèle « UC06 » à base d’un processeur ARM9 fonctionnant à
une fréquence de 200Mhz).
PFE / Génie Electrique / Fabien AUBERT
13
La version à développer sera allégée mais autonome dans le sens où elle offrira moins de
capacités de traitement/stockage mais tous les composants nécessaires au fonctionnement
se trouveront sur une seule et même carte. Cette version ne possèdera que 8 voies de
mesures. L’espace de stockage permettant entre autre le stockage de fichiers sera
grandement réduit puisque les seuls éléments de stockage disponibles sont une EEPROM
flash de 16Mo et une SDR SDRAM de 16Mo. En contrepartie, elle intègrera les
fonctionnalités principales du module unité centrale dans le FPGA en se servant des
ressources non utilisées. Le coût de cette version en sera donc grandement réduit
puisqu’elle permettra d’économiser le coût de la carte processeur (soit environ 1000€).
Il faudra mettre en place tous les éléments nécessaires à la communication Ethernet, un
système de gestion de fichier, un « système d’exploitation », etc.
CARTE D’ACQUISITION
FPGA
SPI entrant
Traitement
numérique
Carte analogique
Module Unité
Centrale (MUC)
Réseau
SPI sortant
Figure 5 - Schéma de fonctionnement de la version de la CABTR à développer
Un prototype de la carte d’acquisition a déjà été réalisé (Figure 6). Celui-ci est utilisable pour
les deux versions puisque la partie acquisition est la même dans les deux cas, seuls le posttraitement et la communication Ethernet diffèrent. Les composants nécessaires à l’interface
Ethernet ne sont toutefois pas intégrés.
Un connecteur a été prévu permettant d’ajouter une extension pour une interface Ethernet.
Lors d’une future étape du projet, ces composants seront directement intégrés sur la carte
et l’interface avec la carte processeur ne sera plus présente. En attendant, pour mener à
bien mon travail, je devrai dans un premier temps réaliser cette carte d’interface Ethernet
pour pouvoir travailler sur le prototype.
PFE / Génie Electrique / Fabien AUBERT
14
Connecteur pour
l’interface Ethernet
Figure 6 - Prototype réalisé de la carte d'acquisition
2.2 Principe de fonctionnement général
2.2.1 Acquisition et mise en forme des signaux
La mesure de température s'effectue en plusieurs étapes. La première consiste à mesurer
des températures à l'aide de capteurs résistifs dont l'excitation est sinusoïdale et réalisée par
un montage spécifique. Ces capteurs délivrent une tension ou un courant proportionnel à la
température sous forme de signaux analogiques. Ils sont ensuite amplifiés puis convertis en
signaux numériques. Ceux-ci sont ensuite démodulés et filtrés dans le FPGA qui se charge de
réaliser la partie traitement numérique.
Pour des raisons d'auto échauffement du capteur il est impératif de pouvoir commuter la
source d’excitation : tension ou courant.
La plage de résistance étant importante (0-100kΩ), afin de rester à pleine échelle lors des
mesures, il a été décidé de pouvoir commuter également la gamme, c'est-à-dire rajouter
une résistance en série modifiant ainsi la valeur de la résistance de shunt. Des registres à
décalage permettent de commuter la gamme et la source depuis le FPGA.
La figure 7 résume le fonctionnement de la partie analogique. Le signal d’excitation est
généré par le bloc numérique, il traverse un convertisseur numérique analogique (CNA) et
est injecté dans le capteur après avoir été filtré (passe-bas).
Une isolation galvanique est placée au niveau des deux liaisons SPI qui servent pour la
communication entre la partie analogique et la partie numérique.
PFE / Génie Electrique / Fabien AUBERT
15
Figure 7 - Fonctionnement de la partie analogique
2.2.2 Conversion des mesures de tension et courant
A ce stade-ci nous avons une valeur de tension et de courant sous forme de signaux
numériques qui vont pouvoir être convertis pour obtenir une valeur de température.
Une fois qu'une mesure de tension et de courant sont disponible pour une voie de mesure,
une interruption est déclenchée pour indiquer au module unité centrale qu'il peut venir les
récupérer pour les convertir.
La première conversion consiste à obtenir une valeur de résistance à partir des valeurs de
tension et de courant. La conversion va dépendre de la gamme et de la source utilisée.
Cette valeur de résistance est alors convertie en température à l'aide de l'étalonnage fourni
par le fabriquant du capteur.
PFE / Génie Electrique / Fabien AUBERT
16
Figure 8 - Variation de la résistance en fonction de la température (échelle log) pour différents capteurs
Cernox. Document fournit par le fabriquant du capteur
La figure 8 montre les variations de résistances en fonction de la température suivant le
capteur Cernox choisi. Le fabriquant donne les plages de variations maximales de ses
capteurs. Pour des raisons évidentes de précisions, il fournit également un étalonnage précis
pour chaque capteur. Dans tous les cas, la variation de résistance est loin d'être linéaire,
même sur une échelle de type log. Le calcul de température est donc complexe.
2.2.3 Stockage et transfert des données
Les valeurs manipulées (tension, courant, résistance et températures) sont enregistrées en
"flottant" (simple précision) c'est à dire qu'elles sont codées sur 32 bits, ce qui donne une
précision de l'ordre de 10-6.
Les valeurs de résistances et de températures courantes sont disponibles via la
communication Modbus. Elles sont également archivées pendant une seconde. Si
l'utilisateur le souhaite, il peut également sauvegarder les mesures, pendant un certain laps
de temps, dans un fichier qui sera accessible via le réseau Ethernet.
2.3 Protocoles de communication
Dans ce chapitre nous allons présenter brièvement les protocoles de communication utilisés
dans ce projet. Le but n’étant pas de faire un cours sur les protocoles mais d’expliquer
rapidement leur fonctionnement. Nous allons dans un premier temps parler du modèle
TCP/IP puis du protocole Modbus.
2.3.1 TCP/IP et OSI
A l’origine des réseaux, chaque constructeur avait son propre système ce qui engendrait des
incompatibilités entre les réseaux. C’est pourquoi L’organisation Internationale de
Standardisation (ISO) à mis au point le model OSI. Le rôle de ce modèle est de normaliser la
PFE / Génie Electrique / Fabien AUBERT
17
communication entre les machines afin que différents constructeurs puissent mettre au
point des produits (logiciels ou matériels) compatibles.
Le modèle TCP/IP est très proche du modèle OSI. En réalité le modèle TCP/IP a été
développé à peu près au même moment que le modèle OSI, c'est la raison pour laquelle il
s'en inspire mais n'est pas totalement conforme aux spécifications du modèle OSI.
Afin de pouvoir appliquer le modèle TCP/IP à n'importe quelle machine, c'est-à-dire
indépendamment du système d'exploitation, le système de protocoles TCP/IP a été
décomposé en plusieurs modules effectuant chacun une tâche précise. De plus, ces modules
effectuent ces tâches les unes après les autres dans un ordre précis, on a donc un système
stratifié, c'est la raison pour laquelle on parle de modèle en couches. Chaque couche du
modèle communique avec une couche adjacente (celle du dessus ou celle du dessous).
Chaque couche utilise ainsi les services des couches inférieures et en fournit à celle de
niveau supérieur.
Le modèle TCP/IP, inspiré du modèle OSI (7 couches), reprend l'approche modulaire
(utilisation de modules ou couches) mais n’en contient uniquement quatre. Les rôles des
différentes couches du modèle TCP sont les suivants :




Couche Accès réseau : spécifie la forme sous laquelle les données doivent être
acheminées quel que soit le type de réseau utilisé
Couche Internet : chargée de fournir le paquet de données (datagramme)
Couche Transport : Assure l'acheminement des données, ainsi que les mécanismes
permettant de connaître l'état de la transmission
Couche Application : Englobe les applications standard du réseau (Telnet, FTP, etc.)
Modèle OSI
Modèle TCP/IP
Couche Application
Couche Application
Couche Présentation
ex : HTTP,
FTP, DNS
Couche Session
ex : TCP, UDP
Couche Transport
Couche Transport (TCP)
Couche Réseau
Couche Internet (IP)
ex : IP, ARP, RARP
Couche Accès réseau
ex : Ethernet
Couche Liaison données
Couche Physique
Figure 9 - Comparaison entre le modèle OSI et le modèle TCP/IP
PFE / Génie Electrique / Fabien AUBERT
18
Lors d'une transmission, les données traversent chacune des couches au niveau de la
machine émettrice. A chaque couche, une information est ajoutée au paquet de données, il
s'agit d'un en-tête, ensemble d'informations qui garantit la transmission. Au niveau de la
machine réceptrice, lors du passage dans chaque couche, l'en-tête est lu, puis supprimé.
Ainsi, à la réception, le message est dans son état originel (Figure 10).
MACHINE ÉMETTRICE
MACHINE RÉCEPTRICE
Application
Application
Transport
Transport
Internet
Internet
Accès réseau
Accès réseau
Figure 10 - Transmission de données par protocole TCP
2.3.2 Le protocole Modbus TCP
Modbus est un protocole de communication utilisé pour des réseaux d'automates
programmables. Il fonctionne sur le mode maître / esclave ou client / serveur. La centrale
d’acquisition réalisée a le rôle de serveur.
Ce protocole est constitué de trames contenant l'adresse de l'automate concerné, la
fonction à traiter (écriture/lecture de n bits/octets), ainsi que la donnée. Le protocole
Modbus peut être implémenté via une trame TCP/IP, il porte alors le nom de « Modbus
TCP ». C’est ce que nous allons faire dans ce projet. Il diffère légèrement du protocole
Modbus de base en cela que l’adresse de l’automate ainsi que le CRC sont inclus dans la
trame TCP. Une fois « décortiqué » il reste les champs suivants :
- Identifiant de Transaction : sert à synchroniser les différentes requêtes entre un
serveur et son/ses client(s).
- Identifiant du Protocole : sert à indiquer le protocole utilisé. Vaut 0 pour le Modbus.
- Longueur de Champ : nombre d’octets dans la suite de la trame (contient l’identifiant
de l’unité, le code fonction ainsi que les données). Cette valeur sert à connaître le
nombre d’octets que contient la trame.
- Identifiant de l’Unité : adresse du client. C’est un octet que nous n’utilisons pas.
- Code Fonction : code indiquant la fonction à réaliser (lecture/écriture).
- Données : mots de données. Les deux premiers mots correspondent à l’adresse de
départ où effectuer les opérations. Les mots suivants servent à indiquer les données
à écrire (dans le cas d’une écriture) ou le nombre de bits/octets à lire (dans le cas
d’une lecture).
PFE / Génie Electrique / Fabien AUBERT
19
Voici la représentation d’une trame :
Identifiant
de
Transaction
(2 octets)
Identifiant
de
Protocole
(2 octets)
Longueur
de Champ
Identifiant
de l’Unité
Code
Fonction
(2 octets)
(1 octet)
(1 octet)
Données
(N octets)
Figure 11 - Représentation d'une trame Modbus TCP
Champs
Longueur
Description
Client
Identifiant de
Transaction
2 octets
(1 mot)
Identification de la
requête Modbus
Initialisé par le
client
Identifiant de
Protocole
2 octets
(1 mot)
0 pour le protocole
Modbus
Initialisé par le
client
Longueur de
Champ
2 octets
(1 mot)
Initialisé par le
client (dans le cas
d’une requête)
Identifiant de
l’Unité
1 octet
Code Fonction
1 octet
Nombre d’octets
dans la suite de la
trame
Identification d'un
esclave distant
connecté sur un port
série ou d’autres bus
Code de fonction
représentant l’action
à exécuter
Données
N octets
(voir ci-dessous)
Données transmises
Initialisé par le
client
Initialisé par le
client
Initialisé par le
client (dans le cas
d’une requête)
Serveur
Recopié par le
serveur à partir de
la requête reçue
Recopié par le
serveur à partir de
la requête reçue
Initialisé par le
serveur (dans le
cas d’une réponse)
Recopié par le
serveur à partir de
la requête reçue
Recopié par le
serveur à partir de
la requête reçue
Initialisé par le
serveur (dans le
cas d’une réponse)
Le protocole Modbus repose sur une trame avec un
nombre d’octets multiple de 2 et d’une longueur
maximum de 256 octets. N est donc un nombre pair
ayant pour valeur maximum 248. 248 correspond à
la taille maximum d’une trame moins les champs
autres que les Datas. Les différents champs
mentionnés ci-dessus sont encodés dans le format
Big Endian c'est-à-dire de l’octet de poids fort vers
l’octet de poids faible (de gauche à droite).
Les communications Modbus via TCP se font sur le
Figure 12 - Représentation des données dans
port 502.
la mémoire
(A : octet de poids fort et D : octet de poids faible)
Flèche dans le sens des adresses croissantes
PFE / Génie Electrique / Fabien AUBERT
20
3 Développement de la partie matérielle
3.1 Réalisation d’une carte d’interface Ethernet pour
le prototype
Le prototype (de la carte d’acquisition) fabriqué, ne comportant pas les composants
nécessaires à une communication Ethernet, une carte d’interface pour l’Ethernet a été
réalisée. Pour des raisons de délais de fabrication, le stage a débuté, par la réalisation de
cette carte. La première étape a été de se documenter sur les différents composants
nécessaires à la connexion Ethernet.
Les trois principaux composants nécessaires sont :
Un connecteur Ethernet. C’est lui qui
assure le contact physique entre le câble
RJ45 (nécessaire au transport des données
dans le cadre d’une connexion filaire) et le
reste de la carte.
Il comprend :
- Un connecteur RJ45 femelle.
- Les transformateurs de lignes.
- Deux LEDs indiquant l’état du réseau.
Figure 13 - Connecteur Ethernet utilisé
Un transceiver (émetteur-récepteur
en Français). Le mot « transceiver » provient
de la contraction en anglais de
« TRANSmitter » (« émetteur ») et de
« reCEIVER » (« récepteur »). Ce mot est
parfois francisé en « transcepteur ».
Ce composant assure la réception et
l'émission des trames de données entre le
réseau et la centrale d’acquisition.
Concrètement, ce composant s’interface
entre le contrôleur Ethernet et le
connecteur Ethernet. Le composant choisi
est un petit circuit intégré de 5mm par 5mm
qui comporte 32 broches. L’espace entre les
broches est de 0,5mm. Il supporte des débits
de 10 et 100Mbps ce qui est suffisant pour
notre application.
-
PFE / Génie Electrique / Fabien AUBERT
Figure 14 – Emetteur récepteur Ethernet choisi
21
Un contrôleur Ethernet ou Media
Access Controller (MAC). Il sert d'interface
entre la partie logicielle et la couche
physique (matérielle). Celui-ci sera intégré
dans le FPGA qui est actuellement sur le
prototype. Nous avons utilisé un composant
fourni par Xilinx (le fabriquant du FPGA) non
soumis à une licence. Ce composant (le «
XPS Ethernet Lite ») est limité à 100Mbps
mais cela convient pour notre application. Il
a pour but de fournir les fonctions
minimales nécessaires à une interface
Ethernet tout en utilisant le moins de
ressources possible.
-
Figure 15 - FPGA de type Spartan-6 dans lequel sera
intégré le contrôleur Ethernet
Le schéma typique d’une interface Ethernet est celui de la Figure 16.
Figure 16 - Schéma typique d'une interface Ethernet
Dans notre application, le connecteur Ethernet intègre les transformateurs d’isolement
(Magnetics).
L’interface utilisée pour relier le contrôleur Ethernet et l’émetteur-récepteur dépend
principalement de la vitesse de la connexion Ethernet. Pour une connexion de type
10/100Mbps nous pouvons utiliser les interfaces MII (Media Independent Interface) ou RMII
(Reduced Media Independent Interface).
La principale différence entre ces deux interfaces réside dans le nombre de connexions
nécessaires pour l’interface. Le principe de fonctionnement reste le même. A titre de
comparaison, l’interface MII comporte 7 connexions supplémentaires par rapport à
l’interface RMII. Ce rajout de connexions peut être gênant sur des microcontrôleurs ou des
FPGA car cela engendre une utilisation de broches plus importante. Pour compenser la
PFE / Génie Electrique / Fabien AUBERT
22
diminution du nombre de lignes de transmission et de réception, l’interface RMII nécessite
l’utilisation d’une horloge à 50Mhz contre 25Mhz pour la MII.
Dans le cadre de ce projet, le prototype réalisé prévoyait suffisamment de broches pour une
interface de type MII. La seule contrainte était donc de sélectionner des composants
alimentés en 3,3V pour correspondre au niveau d’alimentation distribué. Lors de la
réalisation de la carte d’interface Ethernet, pour des raisons de fonctionnalités, de prix et de
simplicité d’utilisation, nous avons choisi l’émetteur-récepteur 78Q2123 de chez TERIDAN.
Celui-ci répond au cahier des charges, il offre toutes les fonctionnalités que nous souhaitons
et communique en mode MII.
L’horloge (clock source) dépend, comme dit précédemment, de l’interface utilisée. Nous
avons donc choisi une horloge à 25Mhz puisqu’elle correspond à l’interface MII. Pour réaliser
le signal d’horloge, nous avons utilisé un oscillateur du commerce en faisant
particulièrement attention à sa tension d’alimentation.
Nous avons réalisé une carte d'interface Ethernet pour permettre la communication via
Ethernet entre le prototype et le réseau. Cette carte vient se greffer à un connecteur prévu à
cet effet sur la carte prototype. Elle comporte le connecteur de carte, le connecteur
Ethernet, l’émetteur-récepteur, un oscillateur à 25MHz, des condensateurs et des
résistances. Tous les composants à l’exception du connecteur Ethernet sont en CMS.
Cette carte a été réalisée en double couche à l’aide du logiciel Proteus. Sa taille est d’environ
5 cm par 4 cm. Sa fabrication a été sous-traitée.
Figure 17 - Carte d'adaptation Ethernet réalisée durant le stage
PFE / Génie Electrique / Fabien AUBERT
23
3.2 Environnement de travail
Le SBT s’est procuré un kit de développement contenant un FPGA de type Spartan-6 LX45T
de chez Xilinx. Ce kit, nommé « SP605 » est montré en page de garde.
Il dispose d’une horloge à 200MHz, d’une mémoire DDR3 SDRAM de 128Mo, d’interfaces
USB 2.0, Ethernet, VGA, CompactFlash, etc.
Comme tous les modèles Spartan ne disposent pas de processeur hardcore, il est seulement
possible d’implémenter un ou deux processeurs softcores « Microblaze ». Le Microblaze est
un processeur 32bits RISC avec une architecture Harvard c'est-à-dire disposant d’un bus
pour la mémoire d’instruction et d’un bus pour la mémoire de données. L’architecture du
Microblaze est donnée en annexe.
Les éléments qui nous intéressent sont les nombreuses options dont il dispose, telles que la
possibilité d’intégrer un FPU et/ou un MMU afin d’assurer une compatibilité avec les OS
linux. Pour notre application nous allons nous limiter à implémenter un « Noyau de système
d’exploitation » qui est la partie fondamentale d’un OS car l’emploi d’un OS n’est pas
nécessaire et serait une solution plus lourde, surtout au regard des ressources matérielles
dont nous disposons. Le FPU permettra d’accélérer l’ensemble des calculs en flottant
(codage des réels en simple précision).
Avec cette carte de développement, les logiciels ISE (Integrated Software Environment), EDK
(Embedded Development Kit) et SDK (Software Development Kit) sont fournis.
-
ISE permet de gérer un projet, de concevoir des blocs matériels, de synthétiser,
d’implémenter et configurer le FPGA.
EDK est utile pour réaliser des systèmes embarqués avec un processeur. Il permet de
réaliser l’architecture matérielle à implémenter dans le FPGA.
SDK est un outil basé sur l’environnement de développement Eclipse destiné à
développer la partie logicielle et à la debugger.
La version utilisée de cette suite de logiciels est la 13.1, la dernière en date lors du début du
stage. Pour ce projet nous avons principalement utilisé EDK et SDK puisque nous nous
sommes servis de composants préexistants.
Nous avons commencé à développer le système sur le kit « SP605 » avant de travailler sur le
prototype réalisé par le SBT.
PFE / Génie Electrique / Fabien AUBERT
24
3.3 Mise en place d’un système multitâches temps
réel
Le système doit être capable de procéder à la lecture des mesures et leur traitement
cyclique tout en répondant à des requêtes diverses de façon asynchrone. Ces requêtes
proviennent essentiellement de la communication Ethernet. Plusieurs d’entre elles
(affichage d’une page web, demande d’envoi de mesures, etc.) peuvent arriver en même
temps et sont traitées en parallèle, d’où la nécessité d’un système multitâche. La seule
opération non « aléatoire », dans le sens où l’on peut la prévoir puisqu’elle arrive à une
fréquence donnée (1kHz), est celle indiquant l’arrivée de nouvelles mesures à traiter. Celle-ci
est prioritaire puisqu’elle doit être traitée avant l’arrivée de la suivante sous peine de perdre
les mesures.
Dans le FPGA, nous avons installé plusieurs composants comme un Microblaze, un
contrôleur de RAM, le contrôleur Ethernet, etc. Ces composants sont déjà créés par le
fabriquant, nous n’avons qu’à les sélectionner lorsque nous préparons la plateforme
matérielle sous EDK. L’environnement de développement se charge de connecter entre eux
ces composants. Toute la partie VHDL est donc transparente tant que nous utilisons des
composants déjà existants.
3.3.1 Ordonnancement des tâches
Le programme à exécuter par le microprocesseur est écrit en langage C puis converti en
assembleur par le compilateur. Nous lui avons implémenté un noyau d’OS temps réel fourni
par Xilinx : le « Xilkernel ». Celui-ci permet la gestion des threads et donc d’avoir un système
avec plusieurs tâches en parallèle. Bien évidemment, n’ayant qu’un seul processeur installé,
les tâches ne s’exécutent pas exactement en parallèle car à un instant t, il n’y a qu’un seul
processus qui utilise les ressources CPU.
Deux modes de fonctionnement sont disponibles pour l’ordonnanceur :
- Le premier mode : « Round-Robin », attribue des tranches de temps à chaque thread en
proportion égale, sans accorder de priorité aux threads.
- Le deuxième mode permet de donner des priorités aux différents threads. Dans ce cas, si
tous les threads ont des priorités différentes, les threads seront exécutés dans l’ordre de ces
priorités. Le thread dont la priorité est la plus importante gardera la main tant qu’il aura
besoin des ressources CPU. Si deux threads ont la même priorité, l’ordonnanceur agira pour
ces threads de la même façon que le ferait le premier mode.
Ce deuxième mode est très intéressant dans notre cas. En effet, la partie récupération des
mesures et traitement de celles-ci doit être effectuée à intervalles réguliers. Nous risquons
de perdre des mesures si l’ordonnanceur ne laisse pas la main au thread correspondant
PFE / Génie Electrique / Fabien AUBERT
25
lorsque les mesures sont envoyées. C'est pour cela que nous lui avons donné la priorité
maximale.
Cependant, dans ce mode-ci, le thread de plus grande priorité doit-être mis en « veille »
régulièrement, sinon les autres threads n’auront jamais la main et ne pourrons pas
s’exécuter. Ce second mode est très pratique pour notre application mais doit être manipulé
avec précaution.
3.3.2 Accès aux données
Réaliser une application multitâche nécessite de prendre des précautions pour éviter
certains problèmes de conflits entre les tâches. En effet, lorsque plusieurs threads ont accès
à une même variable (Figure 18), si l’un modifie sa valeur pendant que l’autre cherche à la
lire, cela peut engendrer des problèmes.
Thread 1
Thread 2
Lec
tur
e
/E
cri
tur
e
Ressource
partagée
tur
Lec
re
itu
Ecr
/
e
Figure 18 - Ressource partagée par plusieurs threads
Pour permettre de synchroniser les différents threads, nous utilisons des mécanismes prévus
à cet effet : les sémaphores. C’est un mécanisme atomique qui est utilisé dans les systèmes
multithreads et permet de (entre autre) verrouiller l’accès à des « zones critiques »
(ressources partagées). Lorsqu’un thread veut accéder à une zone critique il verrouille le
sémaphore correspondant et le libère quand il a fini. Ainsi lorsqu’un autre thread tente
d’accéder à cette zone, si le sémaphore est verrouillé, il se met en « veille » jusqu’à ce que
celui-ci soit libéré. Ce mécanisme permet à la fois d’éviter les conflits et d‘éviter d’utiliser les
ressources CPU pendant l’attente.
Un sémaphore peut prendre différentes valeurs. Si sa valeur est 0 alors le thread est
« verrouillé ». Sinon il est « libre ».
PFE / Génie Electrique / Fabien AUBERT
26
Thread
Souhaite accéder à une
ressource partagée
Le sémaphore
protégeant l’accès à
cette ressource est
libre?
Non
Se mettre en
veille jusqu’à ce
que le
sémaphore soit
libre
Oui
Verrouiller le sémaphore
Effectuer les opérations nécessitant l’accès
aux ressources partagées
Déverrouiller le sémaphore
Figure 19 - Principe de fonctionnement d'un sémaphore
A titre d’exemple, dans le but de garantir l’intégrité des données, des sémaphores sont
utilisés lors du calcul de résistance ou de température. En effet ces calculs font appel à des
coefficients qui peuvent être modifiés via Modbus et ne doivent pas être modifiés pendant
un calcul afin d’éviter des erreurs. C’est pourquoi, des sémaphores sont utilisés pour
empêcher l’accès à ces coefficients par deux threads différents où l’un chercherait à les
modifier et l’autre à les lire. Le sémaphore correspondant est alors initialisé à la valeur 1, ce
qui permet de n’avoir qu’un seul thread accédant à ces coefficients à un instant t.
Une autre utilité des sémaphores est celle de la synchronisation d’une opération sur un
événement. Le stockage des acquisitions dans un fichier en est un exemple. Cette opération
ne se fait pas automatiquement, elle est déclenchée par un automate ou un utilisateur. Afin
de limiter l’attente active (attente consommant des ressources processeur), le thread
réalisant cette fonction attend la libération d’un sémaphore avant de démarrer ses
opérations. La libération de ce sémaphore se fait lors d’une demande de déclenchement de
stockage des mesures. Dans ce cas-ci, le sémaphore correspondant est initialisé à 0, ce qui
indique qu’il est bloqué à la base.
PFE / Génie Electrique / Fabien AUBERT
27
4 Développement de la partie logicielle
4.1 Architecture du système
Le fonctionnement chronologique du système peut se synthétiser comme sur le schéma cidessous (Figure 20).
Initialisation
Communication
réseau
Acquisition
Archivage dans un
fichier
Récupération
de U et I
Conversion
en R et T
Filtrage
Serveur
Modbus
Attente du
signal, Archivage
Serveur Web,
Serveur TFTP,
Serveur d'écho
Légende :
Fonctions réalisées
durant le stage
Fonctions
préexistantes
Figure 20 - Synthèse du fonctionnement du système
Au lancement du programme, le système est initialisé. Voici la séquence d’initialisation :
-
Mise en place d’un système de fichiers.
Chargement des coefficients de calibrage et de linéarisation
Démarrage du « système d’exploitation ».
Initialisation des sémaphores
Initialisation de la partie acquisition des mesures
Implémentation de l’interface réseau.
PFE / Génie Electrique / Fabien AUBERT
28
L’initialisation est terminée, les threads suivants sont alors démarrés :
- Réseau (serveur Modbus, server web, serveur TFTP, serveur d’écho)
- Acquisition
- Stockage dans un fichier
Le schéma (Figure 21) ci-dessous représente de manière simplifiée l’agencement des
différents threads et des ressources partagées.
-
En bleu, les threads
En jaune, les variables partagées
En vert, le système de fichier
Les flèches indiquent le sens de déplacement des données :
Donnée
Donnée
Donnée
Thread : Ecriture et Lecture
Thread : Lecture seule
Thread : Ecriture seule
Par exemple, le thread « Serveur Modbus TCP » accède aux variables à la fois en écriture et
en lecture. En revanche, le thread de « Stockage des mesures dans un fichier » n’effectue
que des lectures de données, il ne vient pas modifier leur contenu. L’importance des
sémaphores prend alors tout son sens.
Thread
Routine
d’interruption
Serveur
Modbus TCP
Données
Thread
Traitement
des mesures
R, T
Coefficients
Paramètres
statut
Thread
Stockage des
mesures dans
un fichier
Système de fichier
Thread
Thread
Thread
Serveur web
Serveur TFTP
Serveur écho
Figure 21 - Agencement des différents threads et des ressources partagées
PFE / Génie Electrique / Fabien AUBERT
29
4.2 Initialisation
4.2.1 Initialisation du système de fichier
4.2.1.1
Intérêt d’un système de fichier
Lors du démarrage du système, avant de démarrer le noyau, nous commençons par créer un
système de fichier (file system) dans un espace bien délimité de la RAM. La taille de cet
espace doit être ajustée pour permettre de stocker suffisamment de fichiers sans toutefois
empiéter sur les espaces réservés au code source et aux autres données nécessaires au
fonctionnement du programme.
Ce système permet de gérer des fichiers comme nous avons l’habitude de le faire sur un
ordinateur. Ceci offre la possibilité de voir les données comme étant des fichiers et non plus
comme des blocs de données mémoires. Ceci facilite l’accès à ces informations.
4.2.1.2
Sauvegarde du système de fichier
Ce système de fichier est stocké (dans son intégralité) au préalable dans la mémoire de type
EEPROM flash présente sur la carte. Cette mémoire, contrairement à la RAM, est non
volatile. Ceci permet donc de conserver certaines données même lorsque l’alimentation de
la carte est coupée.
L’idéal aurait été de pouvoir stocker uniquement les fichiers que l’on souhaite conserver
dans la flash et ainsi économiser de la place, mais les bibliothèques disponibles, permettant
l’accès à la flash, ne permettent pas l’écriture de fichiers dans celle-ci.
Lorsque l’on définit la taille du système
de fichier, cela signifie que nous allouons
une zone de cette taille, dans la
mémoire, qui sera réservée au stockage
de fichier. Que cette zone soit vide ou
pleine, cet espace reste le même, ce qui
nous oblige à copier l’intégralité du
système de fichiers dans la ROM. La
taille du système de fichier sera la même
dans les deux mémoires.
Cette solution est très contraignante. En
effet, elle est « gourmande » en terme
de place mémoire et la copie de la SDR
SDRAM vers la EEPROM flash peut être
Figure 22 - Zone mémoire allouée pour le système
de fichiers
très longue (plusieurs secondes) suivant
la taille du système de fichiers. La question s’est posée de savoir si le système de fichier
devait donc être implémenté ou non. Nous avons estimé que les gains engendrés par ce
PFE / Génie Electrique / Fabien AUBERT
30
système, notamment en termes de flexibilité, de simplification d’accès aux données, valait la
peine de le mettre en œuvre.
4.2.1.3
Contrôle de l’intégrité des données
Pour contrôler l’intégrité des données, une « signature » est stockée dans la flash avant et
après la zone où est stocké le système de fichier. En plus de cela, un checksum est stocké
entre la fin de l’emplacement du système de fichier et le début de la signature de fin.
Lors de l’initialisation, nous commençons par tester les deux signatures. Si elles sont bonnes,
nous venons copier l’ensemble du système de fichier dans la RAM à un emplacement prévu
à cet effet. Nous calculons ensuite le checksum et nous le comparons à celui stocké dans la
flash pour vérifier que la copie a été réalisée correctement. Si les deux coïncident, nous
initialisons le système de fichier à partir de celui qui vient d’être recopié.
Signature (0xAA55AA55)
Système de fichier
Checksum
Signature (0x55AA55AA)
Figure 23 - Archivage du système de
fichiers dans la EEPROM Flash
Si pour une raison ou une autre, une de ces vérifications n’est pas bonne, un système de
fichier vide est initialisé et les fichiers minimum nécessaires au bon fonctionnement du
système sont créés. Ces fichiers sont :
-
un fichier html pour le serveur web,
un fichier contenant les coefficients de linéarisation par défaut (calcul de
température à partir des valeurs de résistance)
un fichier d’initialisation par défaut.
Ce dernier permet de stocker le nom des voies ainsi que les types de linéarisation souhaité. Il
contient aussi les paramètres réseau (adresse IP, passerelle, masque de sous réseau).
Les données par défaut de ces fichiers sont contenues dans le code source du programme ce
qui permet de les recréer. Après cette séquence d’initialisation, nous recopions le nouveau
système de fichier dans la flash en ajoutant les signatures et le checksum pour avoir un
système de fichiers fonctionnel lors d’un prochain redémarrage.
PFE / Génie Electrique / Fabien AUBERT
31
4.2.2 Initialisation des coefficients de calibrage (ou
calibration)
Les coefficients de calibrage servent à calculer les résistances à partir des valeurs de tension
et de courant. Ces coefficients sont ajustés pour chacune des voies lors du calibrage en
usine. Ils permettent de compenser les différences physiques entre les voies. Huit
coefficients par voie sont nécessaires au calcul de résistance. Chacun de ces coefficients est
codé sur 4 octets (float). Ces coefficients sont stockés dans la flash de la même façon que le
système de fichier (signature avant et après ainsi que checksum) mais hors du système de
fichier et ne devraient pas avoir à être modifiés sauf lors d’un nouveau calibrage. La
modification de ces coefficients se fait à l'aide d'une commande Modbus.
Après avoir initialisé le système de fichier, si les signatures et le checksum sont bons, nous
venons copier les coefficients de calibrage dans une structure (au sens du langage C) prévu à
cet effet. Si ce n’est pas le cas, des coefficients de calibrage par défaut sont chargés. Ils sont
identiques pour chacune des voies et correspondent à des valeurs théoriques.
Dans tous les cas, un fichier est créé, dans lequel ces coefficients sont stockés, ce qui permet
d’avoir accès aux coefficients depuis l’extérieur via transfert TFTP ou le serveur web (voir
partie sur la communication Ethernet).
4.2.3 Initialisation des coefficients de linéarisation
La linéarisation est le calcul permettant de passer d’une valeur de résistance à une valeur de
température. Plusieurs types de linéarisation sont possibles mais nous n’en avons
implémenté que 3. Voici la liste de ces types de linéarisation, par ordre de précision
croissante :
-
Polynôme
Table de points
Polynôme de type log (la variable n’est pas R mais log(R) et le calcul n’est pas
exactement le même que celui du polynôme "simple")
Le type de linéarisation à utiliser pour chacune des voies est défini dans le fichier
d’initialisation. Par défaut c’est le polynôme d’un capteur platine (pt100) qui est utilisé. Les
coefficients sont stockés dans des fichiers. Le nom du fichier correspondant à chacune des
voies est stocké dans le fichier d’initialisation. Si le fichier correspondant à la voie n’est pas
présent dans le système de fichiers, celui contenant les coefficients du polynôme par défaut
est utilisé. Ce dernier fichier est forcément présent puisque s’il n'existe pas il est créé lors de
l’initialisation.
PFE / Génie Electrique / Fabien AUBERT
32
4.2.4 Démarrage du noyau
Après l’initialisation décrite précédemment, le noyau est lancé et les sémaphores sont
initialisés. La valeur à laquelle le sémaphore est initialisé dépend de la raison pour laquelle il
est utilisé. Si le but est de verrouiller l’accès à des variables, il faut l’initialiser à 1 : état
« libre » mais n’autorisant qu’un seul thread à la fois, à accéder à la zone. Dans ce cas là le
sémaphore est utilisé comme un « mutex » (mutuelle exception) qui est un autre moyen de
synchronisation comme les sémaphores mais ne pouvant posséder que 2 états (0 ou 1).
Le cas le plus courant d’utilisation des sémaphores, pour notre application, est celui de la
protection des données accessibles par Modbus. Si un automate vient lire des données,
comme par exemple les valeurs de températures courantes, et que le thread principal est en
train de les mettre à jour, il y aura un conflit.
Thread
Routine
d’interruption
Serveur
Modbus TCP
Données
Thread
Traitement
des mesures
R, T
Coefficients
Paramètres
statut
Figure 24 - Exemple de cas nécessitant l'utilisation de sémaphores
Afin d’éviter ce problème, nous utilisons un sémaphore qui bloque l’accès à ces données
venant de deux threads différents. Ce thread sera donc initialisé à 1.
Nous initialisons ensuite toute la partie concernant la mesure. Cette partie n’a pas été
traitée lors de ce stage puisqu’elle est identique à celle de l’autre version de la CABTR. Les
opérations à réaliser lors de cette étape sont l’initialisation des différents paramètres liés
aux mesures (mode d’acquisition, mise à zéro des flags d’interruption, initialisation des
structures de donnée, etc.) et la mise en place des interruptions liées à l’arrivée de ces
mesures pour pouvoir les traiter ensuite.
La mise en place des interruptions est différente selon la présence d’un noyau ou non. Cette
partie a donc été modifiée pour correspondre à l’utilisation d’un noyau.
La dernière étape de l’initialisation est la mise en place de la couche TCP/IP (chapitre 4.3.1).
PFE / Génie Electrique / Fabien AUBERT
33
Une fois l’initialisation terminée, la partie réseau est démarrée avec tous les types de
communication souhaités ainsi que le thread principal, qui s’occupe de la partie acquisition
(conversion en résistance et température et archivage).
4.3 Communication réseau
Le kit SP605 contient tous les composants nécessaires à la mise en place d’une interface
Ethernet. Cependant, les composants utilisés, notamment l’émetteur-récepteur
(transceiver), ne sont pas les mêmes que ceux qui vont être utilisés pour la réalisation du
projet. La vitesse de transmission sera plus faible.
Nous cherchons à utiliser un contrôleur Ethernet fournit par Xilinx appelé « EthernetLite ».
L’intérêt principal de ce contrôleur est sa gratuité. Cependant celui-ci est limité à une vitesse
maximum de fonctionnement de 100Mbps. L’émetteur-récepteur, du kit, est toutefois
capable d’établir une connexion à 1Gbps. Il doit être impérativement réglé pour limiter le
transfert à un maximum de 100Mbps.
Une fois le programme implémenté sur le prototype, la vitesse s’établit automatiquement à
100Mbps puisque le matériel ne permet pas une connexion plus rapide donc ces soucis
n’apparaissent plus. Dans le cas d’une évolution éventuelle de ce projet vers une vitesse de
communication plus élevée il faudra tenir compte de ces problématiques.
4.3.1 Implémentation de la couche TCP
La couche « accès réseau » du model TCP/IP (voir chapitre 2.3.1) est réalisée par le
contrôleur Ethernet et l’émetteur-récepteur.
Pour implémenter les couches Internet et Transport, nous utilisons la pile « lwIP ».
« LwIP (lightweight IP) est une pile TCP/IP open source largement utilisée pour le
développement de systèmes embarqués. LwIP a été développé à l'origine par Adam Dunkels
au Swedish Institute of Computer Science et est maintenant développé et maintenu par un
réseau de développeurs répartis dans le monde entier, et conduit par Kieran Mansley.
L'un des objectifs de l'implémentation de lwIP est de réduire l'utilisation des ressources tout
en ayant un module TCP le plus complet possible. Cela rend l'utilisation de lwIP parfaitement
adaptée dans des systèmes embarqués. » (Source : Wikipedia)
Nous avons particulièrement fait attention à ce que les fonctions utilisées faisant appel à
cette librairie ne soient pas bloquantes, dans le sens où elles ne gardent pas la main alors
que le thread d’acquisition en aurait besoin, ce qui provoquerait beaucoup de problèmes.
Le mécanisme de fonctionnement de la communication réseau repose sur des interruptions.
Celles-ci étant prioritaires sur n’importe quel Thread, nous avons effectué plusieurs tests, de
façon empirique, pour nous assurer que la partie réseau n’interfère pas de façon critique
PFE / Génie Electrique / Fabien AUBERT
34
dans le processus d’acquisition des mesures. Nous avons pu constater que la partie
acquisition effectuait son travail correctement et que les transferts de données s’exécutaient
après la tâche d’acquisition.
4.3.2 Serveur Modbus TCP
Les installations cryogéniques sont pilotées par des automates. Ils se servent des centrales
d’acquisition, comme la CABTR, pour récupérer les mesures de température au sein de ces
installations. Pour permettre aux automates de dialoguer avec les centrales d’acquisition, le
protocole Modbus TCP est utilisé. Pour les informations théoriques sur le fonctionnement de
ce protocole, se référer au paragraphe 2.3.2.
4.3.2.1
Le plan mémoire Modbus TCP
Un certain nombre d’informations relatives au fonctionnement de la centrale d’acquisition
sont disponible via Modbus. Ces informations sont répertoriées dans ce que l’on appelle un
« plan mémoire ».
Ce plan est une table indiquant :
-
L’adresse de la donnée (pour le client Modbus)
Le type de donnée (entier, réel, caractère ascii, etc.)
Son label
Une description succincte de cette donnée
L’unité de la donnée (dans le cas d’un nombre)
Son type d’accès (lecture seule, écriture seule ou lecture et écriture)
Un exemple de variables dans le plan mémoire est donné dans le tableau ci-dessous
Adresse
Type
Label
Modbus
Hex Dec
0018 24 Octets
OSName
0034 52 Short Declench_Acqui
0100 256
Float
Rx
Description
Nom de l'OS (char [16])
Déclenchement de l'acquisition
(0 : Off, 1 : On)
Mesure résistance 1
Unité R/W
R
R/W
Ω
R
Lorsque l’automate souhaite accéder à une donnée, il doit indiquer son adresse dans le plan
Modbus. Le système ne va pas forcément toujours allouer le même emplacement dans la
RAM pour cette donnée. C’est le plan mémoire qui permet de résoudre ceci. Il existe pour
permettre d’attribuer une adresse « arbitraire » fixe à la variable, qui sera l’adresse à
indiquer pour accéder à celle-ci, mais qui n’a rien à voir avec l’adresse réelle dans la
mémoire. Ce plan sert donc « d’interface », de lien, entre la mémoire et l’automate (Figure
25).
PFE / Génie Electrique / Fabien AUBERT
35
Figure 25 - Interfaçage du plan mémoire entre le client Modbus et la RAM dans laquelle est stockée la
donnée voulue
Le plan mémoire est réalisé par le concepteur du système, pour l’utilisateur. En théorie,
l’attribution des adresses, pour chacune des variables, n’a aucune importance. En pratique,
ce plan ne doit pas être réalisé au hasard afin d'optimiser la communication.
En effet, lors d’une requête Modbus, le client indique le nombre de mots qu’il souhaite
récupérer à partir d’une certaine adresse, dans la limite des 248 octets (124 mots) maximum
de donnée contenus dans une trame Modbus TCP.
Par exemple, si l’automate (le client) veut récupérer les valeurs de résistance et de
température des 8 voies de mesures et que celles-ci sont éparpillées dans le plan, il lui
faudra plusieurs requêtes pour les avoir. Cependant, si ces données sont contigües dans le
plan mémoire, il pourra les récupérer en n’ayant besoin que d’une seule requête ce qui
diminue grandement la durée de l’opération. Le but est donc de regrouper les données
susceptibles d’être demandées en même temps pour optimiser les échanges.
Il n’y a pas de « recette miracle » indiquant comment organiser un plan mémoire, il faut
donc bien réfléchir lors de son établissement. Bien entendu, il arrive souvent que l’on n’ait
pas tout anticipé la première fois et que des modifications soient apportées après coup.
4.3.2.2
Agencement des données dans le plan mémoire Modbus
L’unité de base dans le protocole Modbus est le mot et non pas l’octet. Un mot est composé
de deux octets. La norme pour le Modbus stipule que les données doivent être codées au
format Big Endian (de l’octet de poids fort vers l’octet de poids faible).
Par exemple, un nombre codé sur 32 bits comme le nombre : 0xA0B1C2D3 sera enregistré
dans l’ordre suivant en mémoire : A0 B1 C2 D3. L’octet de poids le plus fort (ici A0) est
enregistré à l'adresse mémoire la plus petite, l'octet de poids inférieur (ici B1) est enregistré
à l'adresse mémoire suivante et ainsi de suite.
PFE / Génie Electrique / Fabien AUBERT
36
…
0
1
2
3
A0
B1
C2
D3
…
Le Microblaze (le processeur implanté dans le FPGA) fonctionne aussi au format Big Endian.
Cependant, pour des raisons d’homogénéité entre les différents systèmes développés par le
SBT et le fait que les automates utilisés fonctionnent au format Little Endian, des
ajustements ont été apportés. Lors de l’envoi de données via Modbus, une variable codée
sur plusieurs mots gardera le format Big Endian à l’intérieur d’un mot mais les mots de poids
fort et de poids faible seront inversés (format Little Endian).
Ainsi, si l’on reprend l’exemple précédent, la même valeur sera envoyée de cette manière :
…
0
1
2
3
C2
D3
A0
B1
…
Un autre problème s’est posé pour ce qui est de l’envoi de chaînes de caractères. Les chaînes
de caractères sont des suites de caractères (chacun codé sur un octet) indépendants entre
eux. L’automate, lors de la réception, vient inverser les octets d’un mot pour correspondre
au format Little Endian dans lequel il fonctionne. Ainsi, les caractères de la chaîne sont
envoyés en étant inversés deux à deux. Afin d’éviter les problèmes dus aux caractères de fin
de chaînes (« \0 »), qui pourraient « arriver » avant le dernier caractère du mot, nous
n’écrivons que des chaîne de longueur paire (au besoin nous rajoutons un espace à la fin de
la chaîne) et nous ajoutons deux fois le caractère « \0 » à la suite.
Par exemple :
Mot
VOITURES
VOITURE
O
O
V
V
T
T
I
I
Codage
R
U
R
U
S
-
E
E
\0
\0
\0
\0
Certains ajustements dans le plan mémoire Modbus contenu dans le programme ont été
réalisés pour correspondre à la forme des données envoyées via Modbus. Ces artifices
internes ne sont pas vus de l’extérieur. Afin d’être certain que le décodage se fasse
correctement, des valeurs types sont disponibles au début du plan Modbus :
Adresse
Modbus
Hex Dec
Type
Label
Description
0028
0029
002B
Short
Int
Float
Valeur
Valeur
Valeur
Lecture mot valeur 4660 (0x1234)
Lecture int valeur 439041101 (0x1A2B3C4D)
Lecture float valeur 123456.789 (0x47F12065)
40
41
43
PFE / Génie Electrique / Fabien AUBERT
Unité R/W
R
R
R
37
4.3.2.3
Fonctionnement d’une requête Modbus TCP
La centrale d’acquisition a le rôle de serveur dans la communication Modbus, autrement dit,
elle agit comme un esclave, elle ne fait que répondre à des requêtes qui lui sont envoyées.
Comme vu dans le paragraphe 2.3.2, une trame Modbus se présente de cette façon :
Identifiant
de
Transaction
(2 octets)
Identifiant
de
Protocole
(2 octets)
Longueur
de Champ
Identifiant
de l’Unité
Code
Fonction
(2 octets)
(1 octet)
(1 octet)
Données
(N octets)
Par exemple, si l’automate veut venir lire 10 mots à partir de l’adresse 8, la requête sera la
suivante :
Identifiant de
Transaction
00 00
(+1 à chaque
requête)
Identifiant de
Protocole
00 00
(Modbus)
Longueur
de Champ
00 06
Identifiant
de l’Unité
02
(Non utilisé)
Code
Fonction
03
(Lecture)
Données
00 08
00 0A
(Adresse) (Quantité)
La longueur de champ indique le nombre d’octets derrière ce champ. Ici il y en a 6 car :
- 1 pour l’Identifiant de l’Unité,
- 1 pour le code fonction,
- 2 pour l’adresse,
- 2 pour la quantité de mots à lire.
La réponse à cette requête serait la suivante :
Identifiant de
Transaction
00 00
(recopiée par
le serveur)
Identifiant
de Protocole
00 00
(Modbus)
Longueur
de Champ
00 17
(23 en
décimal)
Identifiant
de l’Unité
02
(Non utilisé)
Code
Fonction
03
(Lecture)
Données
00 14
(Nombre
d’octets : 20
en décimal)
20 octets
de
données
(10 mots)
Dans le cas d’une écriture, le code fonction serait de 6 ou 16 suivant si l’on écrit un ou
plusieurs mots.
Du point de vue requête, à la place de la « quantité », il y aurait les données à écrire. Le mot
indiquant la « longueur de champ » serait modifiée pour correspondre au nombre de
données à écrire.
La réponse indiquerait l’adresse mémoire de début et le nombre de mots écrits. La réponse
dans le cas d’une écriture a plus pour vocation de confirmer que la requête a été traitée et
traitée correctement, qu’autre chose.
PFE / Génie Electrique / Fabien AUBERT
38
4.3.2.4
Mise en place de la communication Modbus
Comme indiqué dans le paragraphe précédent (voir chapitre 4.3.1), la pile TCP/IP est
implémentée grâce à la « lwip ». Nous utilisons donc des fonctions de cette bibliothèque
pour réaliser les différentes connexions réseau.
Le principe d’une connexion repose sur l’utilisation de sockets. Un socket est « une interface
logicielle avec les services du système d’exploitation, grâce à laquelle un développeur
exploitera facilement et de manière uniforme les services d’un protocole réseau. »
L’utilisation de socket permet donc de
mettre en place des communications
réseau et de gérer l’interface réseau
de façon transparente pour le
développeur.
Au début d’une connexion, le client
envoi une demande de connexion que
le serveur accepte si il le peut
(nombre maximum de connexions en
même temps). A partir de là une
connexion durable est établie entre le
client et le serveur, de telle façon que
l'adresse de destination n'est pas
nécessaire à chaque envoi de
données. C’est ce que l’on appelle
travailler en mode « connecté ». Ce
type de fonctionnement peut
s’apparenter à une communication
téléphonique. Du point de vue du
système,
lors
d’une
nouvelle
connexion, un nouveau thread est
lancé et se charge de répondre aux
requêtes du client. Il y aura autant de
thread que de connexion.
La connexion reste établie jusqu’à ce
qu’elle soit volontairement coupée
par l’un des deux protagonistes ou
jusqu’à ce qu’elle se coupe faute
d’activité pendant une certaine durée
(quelques dizaines de secondes).
PFE / Génie Electrique / Fabien AUBERT
Figure 26 - Connexion entre un client et un serveur avec
l'utilisation de sockets
39
4.3.3 Serveur web, serveur TFTP, echo server
Xilinx met à disposition de nombreuses notes d’application pour les composants qu’ils
proposent. Ces notes d’application sont généralement accompagnées d’exemples assez
détaillés. Dans la note d’application de la lwIP (« XAPP 1026 »), plusieurs exemples étaient
proposés comme notamment un serveur web (permettant une interface via un navigateur
web), un serveur TFTP (Protocole simplifié de transfert de fichiers en français) ou encore un
« echo serveur ». Ce dernier est un programme simple permettant de renvoyer ce qu’on lui
envoie via le réseau.
Nous avons repris ces éléments et les avons implémentés dans notre programme. Ceci nous
permet d’avoir plusieurs moyens d’accès aux fichiers présents sur la carte. En modifiant
l’ « echo server » nous avons réalisé une sorte de mini invité de commande comme sous
Windows ou Linux. Nous avons rajouté la possibilité d’afficher les fichiers présents dans le
système de fichier, de supprimer des fichiers, de sauvegarder le système de fichier dans la
flash, etc.
Le fonctionnement reste le même que celui utilisé pour la communication Modbus
(utilisation de sockets, écoute sur le port, etc.).
4.4 Traitement et stockage des acquisitions
Après l’initialisation des sémaphores, le thread principal est lancé. C’est celui de plus haute
priorité car il ne doit pas être interrompu par un autre thread. Ayant, la plus haute priorité,
c’est lui qui prend la main sur n’importe quel thread même si ce dernier n’a pas fini son
action en cours.
Lors du démarrage de ce thread, celui-ci lance à son tour un autre thread, de priorité plus
faible qui va servir à stocker des mesures pendant un cours laps de temps, dans un fichier.
A une fréquence d’1kHz, une nouvelle série d’acquisition arrive, c'est-à-dire 8 valeurs de
tension et de courant, une pour chaque voie de mesure. Une interruption est alors
déclenchée. Cette interruption va libérer un sémaphore qui va déclencher une série de
calculs dans le thread principal. Après la libération du sémaphore, le thread principal
démarre le calcul de résistance et de température pour les 8 voies, stocke ces valeurs dans
une mémoire tampon et met à jour les données venant du Modbus.
4.4.1 Calcul de résistance et de température
Le calcul de résistance est assez rapide même si ce n'est pas juste U/I, il faut appliquer les
fameux coefficients de calibrage. La durée est de l'ordre de la µs.
Par contre pour le calcul de T il faut « linéariser » à partir d’un polynôme, d’un polynôme en
logarithme ou d’une table de conversion suivant la précision souhaitée.
PFE / Génie Electrique / Fabien AUBERT
40
Nous avons vu dans le paragraphe 2.2.2 que la variation de résistance en fonction de la
température est grandement non linéaire.
Le calcul de température à l'aide d'un polynôme nécessite d'avoir un ordre élevé pour
obtenir une bonne précision, ce qui augmente le temps de calcul. Nous avons choisis
d'utiliser des polynômes d'ordre 4 ce qui permet de limiter le nombre de calculs et donc de
diminuer les temps de conversion au détriment de la précision.
La conversion à l'aide d'une table de point permet d'avoir un résultat rapidement mais
nécessite un grand nombre de points pour garantir une bonne précision ce qui engendre une
quantité plus importante de données à garder en mémoire. Nous avons choisi d'utiliser des
tables contenant un maximum de 100 points.
Le polynôme de type log est la méthode de conversion la plus précise implémentée dans ce
système mais nécessite des capacités de traitement plus importantes. Le calcul est le
suivant :
Avec X = ln(R).
Lors de la création de la plateforme matérielle, un composant permettant d'optimiser les
calculs en flottant (simple précision : codé sur 4 octets) a été activé (FPU). Le calcul des
additions, multiplications et divisions en flottant est alors très rapide (quelques cycles
d'horloges). Par contre, la fonction log provenant de la librairie « math.h » effectue le calcul
en double précision. Pour calculer le log elle commence par convertir la valeur de R (qui est
en flottant) en double, calcule le log et reconverti en flottant. L’exécution de ce calcul
n'utilise pas le composant d'optimisation ce qui fait que rien que le calcul du log prend
environ 300µs.
Sachant que 8 calculs (un pour chaque voie) de R et T doivent être exécutés à chaque
interruption, la durée totale est d'environ 2,5ms. Or, lors de l'acquisition, les échantillons
arrivent à une fréquence de 1kHz (toutes les 1ms). Dans l'état actuel des choses, le calcul des
températures ne pourrait pas être fait en temps réel.
Nous avons essayé de trouver s’il existait une autre librairie effectuant le calcul de
logarithme en flottant mais nous n’en avons pas trouvé. Nous avons donc reprogrammé la
fonction logarithme à partir de l’algorithme de Cordic. C’est un algorithme de calcul des
fonctions trigonométriques et hyperboliques, notamment utilisé dans les calculatrices. Il
permet d'avoir un résultat très précis (de l’ordre de 10-6) en très peu d’itérations. Ce procédé
a permis de diviser le temps de calcul par environ 10. L’économie sur le temps de calcul
essentiellement du au fait de travailler avec des flottants plutôt que des doubles et ainsi
permettre l’utilisation du FPU. Ainsi, maintenant, en environ 250µs, il est possible de faire
les 8 calculs de résistance et de température, contre plus de 2ms sans cette méthode.
PFE / Génie Electrique / Fabien AUBERT
41
4.4.2 Archivage des mesures
Après avoir calculé les résistances et les températures, celles-ci sont archivées dans une
mémoire tampon tournante. Cette mémoire permet d’archiver n échantillons avant de les
effacer un par un, en commençant par le plus ancien pour les remplacer par de nouveaux
échantillons. Ceci offre la possibilité, lors du démarrage d’une acquisition en mode
« rapide », d’ajouter dans le fichier un certain nombre de mesures précédentes. Ceci permet
aussi, dans le cas où entre deux acquisitions nous n’arriverions pas, pour n’importe quelle
raison, à archiver l’acquisition dans le fichier, de pouvoir le faire un peu plus tard.
Figure 27 - Représentation de la mémoire tampon tournante
La profondeur de cette mémoire dépend du nombre d’éléments que l’on souhaite pouvoir
conserver. Cette profondeur doit être ni trop grande, pour ne pas monopoliser trop
d’emplacements mémoire, ni trop petite pour que ceci ait un intérêt. Cette mémoire est en
réalité un tableau de structures contenant les valeurs de résistance et de température pour
chacune des voies, ainsi qu’un statut codé sur 4 octets qui indique la validité des mesures
(pas de saturation, de défaillance matérielle, etc.). Chaque valeur de résistance ou de
température étant codée sur 4 octets, la taille d’un échantillon (8 résistances + 8
températures + 1 statut) est de 68 octets. Nous avons opté pour une profondeur de 1000
échantillons (1 seconde d’acquisition) soit une taille d’environ 68 ko car cela nous semble
être un bon compromis.
PFE / Génie Electrique / Fabien AUBERT
42
Il est possible d’activer la sauvegarde de ces mesures, pendant quelques minutes maximum,
dans un fichier. La durée dépend de la taille maximum que peut prendre le fichier, donc de la
taille disponible dans le système de fichier. Il est possible de modifier le nombre de voies que
nous souhaitons stocker dans le fichier ainsi que le fait de stocker uniquement les
résistances ou à la fois les résistances et les températures. Pour permettre d’augmenter
encore le temps d’enregistrement, les données sont stockées dans le format binaire qui est
le plus compact.
4.4.3 Visibilité des mesures depuis l’extérieur
Le fichier de mesures est disponible via le serveur web ou un transfert TFTP. Un programme
en C a été réalisé pour permettre de convertir le fichier au format ASCII une fois transféré
sur le PC.
Le second canal d’accès aux mesures utilise la communication Modbus. Ceci permet à
l’automate de récupérer les mesures. Cependant, la vitesse à laquelle ces mesures sont
disponibles est réduite à 100hz soit un échantillon sur dix. Ce qui est amplement suffisant au
contrôle de process. Pour éviter des erreurs dues aux repliements de spectres, la bande
passante est réduite à 10Hz. Les valeurs de résistances doivent être alors être filtrées avant
d’être disponibles. Un filtre numérique de type IIR : filtre à réponse impulsionnelle infinie,
d’ordre 4 est donc mis en place. Toutes les 10 acquisitions un nouveau calcul de
température est réalisé à partir des valeurs de résistance filtrées courantes. Ces mesures
sont alors mises à disposition pour être réceptionnées via Modbus. En revanche, par ce
moyen toute acquisition non récupérée est perdue car elle n’est pas stockée en mémoire.
PFE / Génie Electrique / Fabien AUBERT
43
4.5 Ordonnancement des tâches
Par défaut, le noyau utilisé (Xilkernel) propose 32 niveaux de priorité pour les threads. Le
thread de priorité 0 aura la plus haute priorité et plus ce chiffre augmentera plus la priorité
sera faible. Les interruptions restent cependant prioritaires sur n’importe quel autre thread.
Dans ce système, nous n’utilisons que deux niveaux de priorité. Tous les threads ont une
priorité de 1 à l’exception d’un seul : le thread d’acquisition qui a une priorité de 0. Il est
absolument indispensable que ce dernier prenne la main lors de l’arrivée de nouvelles
mesures et qu’il ait fini avant l’arrivée des mesures suivantes (1 ms plus tard). Pour garantir
ceci, il a une priorité 0 mais, de plus, il est le seul à l’avoir donc il n’y a que lui qui utilise les
ressources processeurs pendant qu’il effectue ses opérations.
A titre d’information, sur le kit SP605 avec la gestion du cache par le processeur et le FPU
(Floatting Point Unit) activé, l’ensemble de ces taches durait moins de 300µs. A ceci, il faut
rajouter environ 70µs pour venir récupérer les valeurs de U et I. Cette opération est
effectuée dans la routine d’interruption. Il reste alors environ 630µs durant lesquelles les
autres threads peuvent se partager les ressources processeur.
Les autres threads ayant tous une priorité de 1, l’ordonnanceur va leur attribuer à chacun, et
de façon alternée, des courts laps de temps (une dizaine de µs à chaque fois) d’utilisation du
CPU.
I
N
T
E
R
R
U
P
T
I
O
N
Conversion
en R et T
+
Filtrage
70µs
300µs
Serveur Modbus TCP
Serveur web
Serveur TFTP
Sauvegarde des mesures
dans un fichier
Autres
PFE / Génie Electrique / Fabien AUBERT
630µs
44
5 Portage sur la carte prototype CABTR
Un prototype de la CABTR a été réalisé avant que je ne commence mon stage. Ce prototype
comporte 8 voies de mesures et, peut être utilisé pour les deux versions de la CABTR.
Pour ce qui est de la version autonome, la carte réalisée en début de stage, permettant
l’interface Ethernet fonctionne correctement.
Le FPGA utilisé est identique à celui présent sur le kit SP605. Les principales différences
matérielles résident dans les mémoires utilisées.
La mémoire flash est de la même famille que celle présente sur le kit mais n’a qu’une taille
de 16Mo contre 32Mo.
La principale différence, et non des moindres, réside dans la mémoire RAM utilisée. Le
prototype est équipé d’une SDR SDRAM de 16Mo alors que le kit comporte 128Mo de
mémoire DDR3.
5.1 Problèmes liés à l’utilisation d’une mémoire de
type SDR SDRAM
Ce choix de mémoire avait été fait pour plusieurs raisons dont voici les principales:
-
La DDR3 nécessite une alimentation 1,5V et une référence à 0,75V pour les
résistances de terminaisons,
La simplicité de mise en œuvre,
Le coût du composant,
Le fait que la fréquence de fonctionnement est limitée par le Microblaze (83,3Mhz)
et ne permet pas d’exploiter les avantages de rapidité liés à la DDR3.
Etc.
Cependant, ce type de mémoire étant jugé obsolète par Xilinx, l’entreprise ne fournit plus de
contrôleur pour les versions 6 et supérieures de leurs FPGA (Spartan-6, Virtex-6, etc.). Une
équipe du CEA de Saclay qui travaille conjointement sur ce projet et qui avait proposé ce
type de SDR, car ils avaient l’habitude de travailler avec, avaient développé un contrôleur
pour celle-ci.
Malheureusement, le contrôleur développé ne permettait pas l’utilisation des bus « XCL »
(« Xilinx Cache Link ») qui sont les connexions privilégiées entre le Microblaze et la RAM pour
l’utilisation du cache d’instructions et de données. Dans la version actuelle de la CABTR (avec
l’interface processeur MII) le code exécuté par le Microblaze est minime et il n’y a pas de
système d’exploitation. L’ensemble de la partie logicielle peut tenir directement dans la
PFE / Génie Electrique / Fabien AUBERT
45
mémoire cache du processeur (64ko), ce qui n’est pas possible dans la version autonome
puisque le code dépasse les 200ko.
Les performances du système se sont donc écroulées car à chaque instruction le processeur
devait venir chercher l’instruction et les données nécessaires dans la SDR or les temps
d’accès sont beaucoup plus long que ceux de la mémoire cache.
Afin d’avoir une idée de la différence de performance obtenue, nous avons mesuré la durée
de calcul des 8 logarithmes, avec l’algorithme de Cordic et le FPU activé, dans les deux cas.
Avec l’utilisation du cache processeur ces 8 calculs s’exécutent en 90-100µs au total contre
1000-1200µs (1-1,2ms) sans. Ce qui fait environ un facteur 10. Sachant qu’en 1ms nous
avons pour contrainte d’au moins récupérer les 8 mesures, d’effectuer les 8 conversions en
résistance puis en températures ainsi que leur filtrage, nous ne respectons largement plus
les contraintes de temps.
Nous avons trouvé un contrôleur de SDR compatible réalisé par l’entreprise « Logic Bricks »,
permettant l’utilisation des bus XCL et donc du cache. Ce composant est cependant soumis à
une licence payante mais nous utilisons pour l’instant une version de démonstration
gratuite. Cette version possède les mêmes fonctionnalités et caractéristiques de la version
payante à ceci près que son utilisation est limitée à quelques heures. Dépassé ce cours laps
de temps, le FPGA doit de nouveau être programmé, ce qui n’est pas viable pour un
déploiement à grande échelle du projet.
Nous avons passé plusieurs semaines (avec l’aide de leur support technique) à essayer de
faire fonctionner ce contrôleur. Le composant n’avait pas été testé pour une utilisation avec
les dernières versions du Microblaze et comportait plusieurs bogues.
L’entreprise a donc procédé à certaines modifications de leur composant, et ce n’est qu’au
bout de la quatrième semaine que ces bogues ont étés corrigés.
Nous avons alors pu tester les performances de notre projet avec une SDR. Celles-ci sont
quasiment similaires à celles obtenues avec de la DDR3.
En théorie, le système devrait être plus rapide avec de la DDR3 puisque cette technologie est
réputée pour sa rapidité. De plus comme son nom l’indique, une RAM de type SDR (Simple
Data Rate), n’échange des données que sur les fronts montants d’horloge. Alors que la
technologie DDR (Double Data Rate) permet des échanges à la fois sur fronts montants et
sur fronts descendants (2 échanges par période).
Cependant, si l’on regarde de plus près, ceci peut aisément se comprendre. La fréquence
d’horloge, fixée par le Microblaze à 83,3 Mhz, est la même pour les deux type de RAM, donc
la DDR3 n’est pas utilisée à son plein potentiel. La DDR3 devrait quand même être plus
rapide puisqu’il y a 2 échanges par période mais la taille du bus de données de la DDR3 est
de 16 bits contre 32 bits pour la SDR, donc les performances s’équilibrent.
PFE / Génie Electrique / Fabien AUBERT
46
De plus, les instructions et les données étant dans le cache processeur, qui est identique
dans les 2 cas, les temps d’accès aux informations sont identiques.
Le choix de la SDR semble donc judicieux mais, à moins de développer nous même un
contrôleur de SDR permettant la gestion des bus XCL, les économies réalisées sur le prix du
composant, du routage, etc. sont malheureusement contrebalancées par le coût de la
licence du contrôleur de l’entreprise « Logic Bricks » qui s’élèvent à 2000€ pour 3 ans.
Un nouveau prototype doit être réalisé pour cette version de la CABTR, intégrant
notamment les composants pour l’interface Ethernet. Nous avons décidé de modifier le type
de RAM utilisé et passer sur de la LPDDR (Low Power DDR) ou de la DDR3 qui seraient
compatibles avec le contrôleur fournit par Xilinx.
Ce choix a été renforcé par le fait que les FPGA de type Spartan-6, comme celui que nous
utilisons, intègrent « en dur » dans le composant un contrôleur pour ce type de mémoire. Le
terme « en dur » signifie que ce bloc est gravé dans la puce du FPGA lors de sa création.
Comparé à un composant équivalent réalisé en VHDL, le fait d’intégrer le contrôleur :
-
Améliore fortement les performances,
Réduit la consommation énergétique,
Réduit la durée de la synthèse par le compilateur VHDL, puisque le composant n’a
pas à être synthétisé,
Libère des ressources du FPGA pour une autre utilisation.
5.2 Intégration de la récupération des mesures
L’autre différence importante par rapport au projet sur le kit SP605 correspond à la gestion
des mesures. En effet sur le kit l’arrivée des mesures était simulée par un signal délivré par
un GBF (Générateur Basse Fréquence) qui permettait de déclencher une interruption toutes
les millisecondes.
Sur le prototype, la gestion/traitement des mesures est réellement exécutée. Les blocs
correspondant à l’interface entre la partie analogique et le prétraitement numérique dans le
FPGA ont été réalisés pour la version actuelle de la CABTR. Cette partie ayant déjà été traitée
antérieurement elle a été reprise telle qu’elle.
Le fonctionnement est quelque peu différent, par rapport au projet sur le kit de
développement, car cette fois-ci, toutes les millisecondes, nous n’avons pas 1 mais 8
interruptions espacées chacune de 10µs. Ceci provient du fait que le composant envoyant le
signal d’interruption, ne stocke la mesure que d’une voie à la fois et déclenche une
interruption dès qu’une voie est prête à être transférée.
Ce fonctionnement rajoute une contrainte assez forte que l’on ne peut pas respecter dans
cette version avec un OS et différents threads. Une des sources du problème provient du
PFE / Génie Electrique / Fabien AUBERT
47
cache dans lequel le code de l’interruption ne se trouve pas forcément au moment où elle
est appelée. Ce qui nécessite un rechargement du cache et donc fait perdre quelques
précieuses microsecondes. De manière générale, pour chaque interruption, nous
commençons par masquer les interruptions, puis nous exécutons les instructions de
l'interruption, acquittons que celle-ci a été traitée et finissons par démasquer les
interruptions. La durée moyenne d’une interruption, obtenue de manière empirique, est
supérieure à 15µs ce qui fait que nous perdons environ un tiers des mesures.
5.3 Evolutions
Il sera nécessaire de faire évoluer le fonctionnement du composant délivrant l’interruption
pour permettre de stocker au minimum les 8 mesures simultanément. Par exemple il
pourrait contenir une FIFO permettant de stocker temporairement quelques échantillons
supplémentaires pour rendre le système plus robuste.
Un seul signal d’interruption devra être délivré pour indiquer que les 8 voies de mesure sont
disponibles. Ceci permettra d’être plus souple et réduira le temps global de récupération des
données puisque le code ne devra être chargé qu’une seule fois, le masquage/démasquage
ainsi que l’acquittement des interruptions ne se fera aussi qu’une fois. De plus lors d’une
interruption plusieurs autres actions sont effectuées comme la sauvegarde du contexte par
le processeur par exemple, chose qui ne sera faite plus qu’une fois avec cette nouvelle
méthode.
A titre de comparaison, nous avons effectué d’autres tests qui nous ont permis d’évaluer le
temps mis par le processeur pour effectuer la récupération des 8 voies de mesures en une
seule interruption. En moyenne, la durée totale d’une interruption dans ce cas-ci est
d’environ 70µs, contre plus de 120µs dans le cas présent si l’on met bout à bout tous les
temps.
PFE / Génie Electrique / Fabien AUBERT
48
CONCLUSION
Le but initial du projet qui était de développer une interface Ethernet pour la centrale
d’acquisition basses températures est atteint.
L’application multitâche développée durant ce stage, permet de traiter puis convertir en
température des échantillons tout en respectant les contraintes temporelles liées à l’arrivée
des mesures à une fréquence de 1kHz. Les tâches réseau fonctionnent en parallèle sans
toutefois perturber la fonction principale du système qui est la mesure de température.
Cette version de la centrale d’acquisition n’est cependant pas encore totalement terminée.
Certaines modifications doivent encore être réalisées pour avoir un système entièrement
fonctionnel. Un nouveau prototype dédié à cette version est en cours d’étude. Certaines
modifications vont y être apportées comme l’intégration sur la carte des composants
réalisant l’interface Ethernet, le remplacement de la mémoire SDR SDRAM par une LPDDR
DRAM, etc. Des modifications au niveau des composants VHDL permettant l’acquisition des
mesures doivent encore être apportées pour correspondre avec les nouvelles spécifications
de cette version.
D’un point de vue personnel, ce stage a été très instructif puisqu’il m’a permis d’utiliser les
connaissances apprises tout au long de mon cursus scolaire, de développer mes
connaissances sur les FPGA, sur les réseaux, les systèmes multitâches, etc.
Durant ce stage, j’ai pu me rendre compte de l’énorme potentiel des FPGA. Même si le
modèle utilisé dans ce projet, Spartan-6, est considéré comme un FPGA « low-cost » les
possibilités qu’il offre sont impressionnantes. Au vu du travail effectué durant ce stage, je
peux dire que des connaissances en VHDL ne sont pas forcément indispensables, suivant
l’application, pour réaliser un système relativement complexe en utilisant des FPGA.
PFE / Génie Electrique / Fabien AUBERT
49
LEXIQUE
Ce chapitre regroupe différents termes ou acronymes utilisés dans ce rapport
CEA : Acronyme de « Commissariat à l’Energie Atomique et aux énergies alternatives ».
INAC : Acronyme de « Institut Nanoscience et Cryogénie ».
DSM : Acronyme de « Direction des Sciences et de la Matière ».
GEA : Acronyme de « Groupe Electronique et Automatique ».
Flottant : Type de variable représentant les nombres réels en simple précision (32 bits).
Double : Type de variable représentant les nombres réels en double précision (64 bits).
Linéarisation : Nom du procédé de conversion permettant de passer d’une valeur de
résistance à une valeur de température.
Calibrage / Calibration : Synonyme d’étalonnage. Sert à compenser les différences
physiques entre les voies de mesure.
FPGA : Acronyme de « Field-Programmable Gate Array ». Circuit intégré faisant partie de la
famille des Composants à Logique Programmable. Ce composant est programmé à partir
d’un langage de programmation spécifique : le VHDL.
Processeur softcore : Processeur (CPU) implémenté sur un système reprogrammable comme
un FPGA.
Processeur hardcore : Processeur (CPU) intégré dans la puce d’un composant, comme un
FPGA, lors de sa création. C’est le contraire d’un processeur softcore car il ne provient pas
d’une programmation et ne peut pas être remplacé par un autre composant.
Microblaze : Cœur de processeur softcore 32 bits de la société Xilinx. Il est conçu pour être
implémenté sur les FPGA de ce fabricant.
OS : Acronyme de « Operating System ». Se traduit en Français par système d’exploitation.
Xilkernel : Mini système d’exploitation (OS) temps réel développé par Xilinx pour pouvoir
être implémenté sur Microblaze.
CABTR : Acronyme de « Centrale d’Acquisition Basse Température Rapide ». C’est le nom
donné par le SBT au système de mesure de température pour lequel est réalisé ce projet.
Modbus : Protocole de communication utilisé par des réseaux d'automates programmables.
PFE / Génie Electrique / Fabien AUBERT
50
FPU : Acronyme de « Floating Point Unit » (unité de calcul en virgule flottante). Partie d'un
processeur, spécialement conçu pour effectuer des opérations sur des nombres à virgule
flottante.
Socket : Peut se traduire par « connecteur réseau ». Il s’agit d’une interface logicielle avec
les services du système d’exploitation, grâce à laquelle un développeur exploitera facilement
et de manière uniforme les services d’un protocole réseau.
SDRAM : Acronyme de « Synchronous Dynamic Random Access Memory » (en français,
Mémoire Dynamique Synchrone à Accès Aléatoire). Type particulier de mémoire vive ayant
une interface de communication synchrone.
SDR SDRAM : Acronyme de « Single Data Rate » SDRAM. Mémoire de type synchrone avec
des échanges uniquement sur fronts montants d’horloge. L’amalgame est souvent fait entre
SDR SDRAM et SDRAM.
DDR SDRAM : Acronyme de « Double Data Rate » SDRAM. Mémoire de type synchrone avec
des échanges à la fois sur fronts montants et descendants d’horloge.
FIFO : Acronyme de « First In First Out » qui se traduit littéralement par « Premier arrivé,
premier sorti ». C’est un système de traitement des éléments d’une file suivant leur ordre
d’arrivé.
Thread : Peut se traduire en français par « processus léger ». Les threads se distinguent du
multiprocessus plus classique par le fait que deux processus sont typiquement indépendants
alors que les threads partagent des zones de mémoires ainsi que d'autres ressources.
Zone critique ou section critique : Portion de code dans laquelle il doit être garanti qu'il n'y
aura jamais plus d'un thread simultanément. Il est nécessaire d'utiliser des sections critiques
lorsqu'il y a accès à des ressources partagées par plusieurs threads.
PFE / Génie Electrique / Fabien AUBERT
51
BIBLIOGRAPHIE
Documentation Microblaze :
http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/mb_ref_guide.pdf
Documentation Xilkernel :
http://xlnx.lithium.com/xlnx/attachments/xlnx/EMBEDDED/4789/1/xilkernel_v5_00_a.pdf
Note d’application lwIP :
http://www.xilinx.com/support/documentation/application_notes/xapp1026.pdf
Documentation modèle TCP :
http://www.commentcamarche.net/contents/internet/tcpip.php3
Note d’application Nationnal Semiconducter sur l’implémentation de l'émetteur-récepteur :
http://www.national.com/an/AN/AN-1469.pdf
Explication et démonstration de l'algorithme de Cordic pour calculer le logarithme :
http://www.mlfmonde.org/IMG/pdf/31_40_ams62.pdf
PFE / Génie Electrique / Fabien AUBERT
52
Téléchargement