LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 1 -
Nous tenons à remercier M. MEGHDADI pour la disponibilité et l’intérêt qu’il nous a
témoignés tout au long de la réalisation de ce projet.
Nous tenons également à souligner l’importance de la confiance dont il a fait preuve à
notre égard. Ainsi, nous avons pu bénéficier d’une réelle autonomie sans laquelle l’avancement
de ce projet n’aurait pas été le même.
Nous adressons également nos remerciements à Mme Marie-Sandrine DENIS pour nous
avoir permis d’avoir accès à tout le matériel nécessaire à la réalisation de ce projet ainsi que pour
sa disponibilité.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 2 -
The purpose of the project we were in charge of this year was to realize a wireless mouse
and keyboard. Thus, we were led to use the description language VHDL so as to program two
FPGA circuits.
Indeed, since this project can be divided in two parts that are the emission on the one
hand and the reception on the other hand, two FPGA circuits had to be programmed. The FPGAs
we have worked on were those of a Spartan 3 board.
The Spartan 3 board includes a PS/2 port that can be used to connect either a mouse or a
keyboard. The connector used is the standard 6-pin mini-DIN one. That is why the first target
was to understand the working of such a connector.
It was then necessary to focus on the working of the two peripheral devices used namely
the mouse and the keyboard. It was especially important to notice that the length of data is not
the same for both of them.
The next target that consisted in defining a viable transmission protocol constitute the
main point of this project as it sets the way the two FPGAs will be able to communicate among
themselves.
Once those points have been understood, the programming work can be started. It was
chosen to carry out all the work considering only the mouse, then to do the same with the
keyboard and finally to combine these two solutions in a single program so as to manage at once
the mouse and the keyboard.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 3 -
INTRODUCTION……………………………………………………………………….. p4
I) PRESENTATION DE LA CARTE SPARTAN 3 DE XINLINX…………………… p5
II) PRESENTATION DU LOGICIEL………………………………………………….. p8
III) LE PROTOCOLE PS/2……………………………………………………………… p15
1. Le connecteur PS/2……………………………………………………………. P15
2. La transmission d’octets………………………………………………………. P16
IV) PRESENTATION DU MODE DE FONCTIONNEMENT DE LA SOURIS……… p17
1. Principe……………………………………………………………………….. p17
2. Initialisation de la transmission de données………………....…………….….. p18
3. Fonctionnement courant…………………………………………….………… p19
V) PRESENTATION DU MODE DE FONCTIONNEMENT DU CLAVIER…........... p21
1. Principe………………………………………………………………………... p21
2. Fonctionnement courant………………………………………………………. p21
VII) FONCTIONNEMENT DU PROGRAMME GERANT LA SOURIS…………….. p24
1. Préliminaires………………………………………………………………….. p24
2. Programme concernant l’émission……………………………………………. p26
3. Programme concernant la réception.…………………………………………. p28
CONCLUSION………………………………………………………………………….. p30
TABLE DES FIGURES…………………………………………………………………. p32
REFERENCES BIBLIOGRAPHIQUES………………………………………………… p33
ANNEXES…………………………………………………………………………………. p34
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 4 -
INTRODUCTION
Le projet qu’il nous a été proposé de réaliser au cours de cette deuxième année à l’ENSIL
a pour but la réalisation d’un clavier et d’une souris sans fils. Il a donc été nécessaire de
programmer en VHDL deux circuits FPGA, d’une part côté émission et d’autre part côté
réception.
Le langage VHDL (Very high speed integrated circuit Hardware Description Language)
est un langage de description de haut niveau pouvant être utilisé pour programmer des
composants programmables, en particulier de type FPGA. Un langage de description est dit de
haut niveau s’il fait le plus possible abstraction de l’objet pour lequel il est écrit.
Un circuit FPGA (Field-Programmable Gate Array) est un circuit intégré qui peut être
reprogrammé après sa fabrication.
La chaîne de transmission à réaliser dans le cadre de ce projet peut se modéliser comme
présenté ci-dessous.
FIGURE 0 : CHAINE DE TRANSMISSION A REALISER
Une première étape dans l’avancement de ce projet a été de s’intéresser au matériel utilisé
c’est-à-dire aux caractéristiques de la nouvelle carte Spartan 3 sur laquelle a été réalisé le travail.
De plus, il s’est également avéré utile de connaître le fonctionnement d’une souris et d’un
clavier. Pour ce faire, il a été indispensable de connaître protocole PS/2, protocole utilisé par les
deux périphériques étudiés pour transmettre leurs données.
Les objectifs fixés par ce projet ont été de réaliser dans un premier temps une liaison sans
fil pour permettre la transmission des données de la souris. Ainsi, il a fallu tout d’abord organiser
l’émission des informations fournies par la souris, c’est-à-dire récupérer les données
correctement et les envoyer à l’émetteur. Ensuite, dans un deuxième temps, il a fallu s’intéresser
à la récupération des données côté réception pour compléter la chaîne de transmission.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 5 -
Le cahier des charges peut se résumer de la façon suivante :
Réaliser un circuit interface souris
Générer une trame suivant les informations envoyées par la souris en proposant un
protocole pour la liaison
Attaquer l’émetteur
Récupérer les informations au niveau du récepteur
Générer les signaux à envoyer à l’unité centrale
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 6 -
I) PRESENTATION DE LA CARTE SPARTAN 3 DE XILINX
La carte Spartan 3 de Xilinx sur laquelle nous avons eu l’occasion de travailler au cours de
la réalisation de ce projet se présente sous la forme suivante.
FIGURE 1 : XILINX SPARTAN 3 VUE DE DESSUS
FIGURE 2 : XILINX SPARTAN 3 VUE DE DESSOUS
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 7 -
Le FPGA utilisé pour la programmation en VHDL lors de ce projet est cadencé par une
horloge de 50 Mhz. Au niveau de la connectique, le port PS/2 a assuré la connexion entre la
souris ou le clavier et le circuit FPGA. Le port JTAG permet de connecter la carte à l’unité
centrale de l’ordinateur utilisé pour la programmation.
FIGURE 3 : CARTE XILINX SPARTAN 3 UTILISEE
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 8 -
II) PRESENTATION DU LOGICIEL
Le logiciel utilisé pour la programmation au niveau du PC est la version 6.2i de Xilinx
Integrated Software Environment (ISE).
Une fois le logiciel lancé, il faut, avant de commencer à programmer, créer un nouveau
projet. Pour cela, il faut sélectionner NEW PROJECT dans le menu FICHIER. La fenêtre
présentée ci-dessous apparaît. On complète les champs PROJECT NAME et PROJECT
LOCATION puis on sélectionne HDL pour une programmation en VHDL.
FIGURE 4 : ETAPE 1 POUR CREER UN PROJET
Après cette première étape, on définit les caractéristiques du projet. La fenêtre ci-dessous
apparaît. Il faut alors spécifier que le travail effectué est fait sur des cartes Spartan3 (dans le
champ DEVICE FAMILY). Les champs DEVICE et PACKAGE sont remplis conformément aux
inscriptions présentes sur la carte Spartan3 utilisée. Ces données sont caractéristiques du type de
carte utilisée.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 9 -
FIGURE 5 : ETAPE 2 POUR CREER UN PROJET
Puis lorsque la fenêtre suivante apparaît, il est alors possible de créer un fichier source en
cliquant sur « New Source ».
FIGURE 6 : ETAPE 3 POUR CREER UN PROJET
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 10 -
Il est ensuite demandé le nom du fichier que l’on souhaite créer ainsi que sa localisation.
Il est encore nécessaire de spécifier que la programmation sera faite en VHDL en sélectionnant
VHDL Module.
FIGURE 7 : ETAPE 4 POUR CREER UN PROJET
Enfin, la dernière étape avant la création du projet consiste à définir le nom de l’entité
ainsi que de l’architecture souhaitées. Il est ici possible de spécifier les entrées et sorties
considérées dans le programme.
FIGURE 8 : ETAPE 5 POUR CREER UN PROJET
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 11 -
Une fenêtre d’information indique alors que le projet va être créé en résumant les
principales caractéristiques spécifiées.
FIGURE 9 : ETAPE 6 POUR CREER UN PROJET
La fenêtre ci-dessous nous demande la confirmation de la création du nouveau projet.
FIGURE 10 : ETAPE 7 POUR CREER UN PROJET
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 12 -
Enfin, avant de terminer la création du Projet il est alors possible d’ajouter des fichiers
source déjà existants au projet en les spécifiant dans la fenêtre suivante.
FIGURE 11 : ETAPE 8 POUR CREER UN PROJET
Pour finir, une dernière fenêtre résume l’ensemble des caractéristiques du nouveau projet.
FIGURE 12 : ETAPE 9 POUR CREER UN PROJET
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 13 -
La programmation à proprement parler peut être commencée dans la fenêtre située dans la
partie droite de l’écran. La partie gauche située en haut de l’écran résume la composition du
projet dans le quel on travaille.
FIGURE 13 : ETAPE 10 POUR CREER UN PROJET
La partie gauche située plus en bas est réservée au traitement postérieur une fois la
programmation terminée.
FIGURE 14 : ETAPE 11 POUR CREER UN PROJET
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 14 -
Ainsi, une fois la programmation terminée, on sélectionne Programming File Generation
Report. Cette action permet d’effectuer les vérifications prévues dans les menus Synthesize-XST
et Implement Design présentés dans la fenêtre ci-avant. Ces deux menus prévoient la vérification
de la syntaxe du programme et, si celle-ci est correcte, le mapping, c’est-à-dire l’attribution des
entrés/sorties, est à son tour vérifié. Enfin, un fichier est généré à partir du programme dans un
format « *.bit » pouvant être implanté dans le FPGA.
Il est ensuite possible de sélectionner Generate PROM, ACE, or JTAG File pour générer
un fichier pouvant être implanté dans la mémoire Flash associée au FPGA. Une fois le
programme dans la mémoire Flash, il sera possible de charger ce programme dans le FPGA en
appuyant sur un bouton situé sur la carte et qui est présenté ci-dessous.
Une fois ces étapes effectuées, la sélection de Configure Device (iMPACT) lance le
logiciel permettant d’implanter effectivement le programme dans le FPGA (ou dans la PROM),
comme il est possible de l’observer ci-dessous.
Ainsi, dans la capture d’écran ci-dessous, il est possible de voir deux « blocs » Xilinx. Le
premier correspond au FPGA, le deuxième à la mémoire Flash. Ici, il a été attribué le fichier
pilote_souris.bit au FPGA et il a été choisi de ne rien charger dans la mémoire Flash, c’est
pourquoi on lui a attribué BYPASS. En effet, le fait de sélectionner BYPASS (de l’anglais court-
circuiter) permet de considérer la mémoire Flash comme un court-circuit
FIGURE 15 : IMPLANTATION DU PROGRAMME SUR LA CARTE
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 15 -
III) LE PROTOCOLE PS/2
Le protocole PS/2 permet une communication synchrone et bidirectionnelle. Elle a pour
particularité d’être une liaison série entre un système (l’ordinateur) et un périphérique
(classiquement un clavier ou une souris). Une telle liaison n’est assurée que par un seul fil. Ainsi,
si le caractère bidirectionnel de la communication permet aux deux côtés (i.e. au système ou au
périphérique) d’envoyer des données, il n’y a qu’un seul des deux côtés qui ne peut transmettre à
la fois.
1. LE CONNECTEUR PS/2
Le connecteur PS/2 est un connecteur mini-DIN-6 qui comporte 6 broches. Il s’agit de la
masse, l’alimentation 5V, l’horloge et des données. Les deux broches restantes sont non utilisées.
FIGURE 16 : CONNECTEUR MALE PS/2
Les signaux Data et Clock fournis par le système maître au périphérique PS/2 sont à l’état
haut par défaut. Ceci s’explique par le fait qu’une résistance de 10 kΩ environ est placée entre
ces deux signaux et l’alimentation.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 16 -
2. LA TRANSMISSION D’OCTETS
La transmission d’octet se fait de façon synchrone et série par trame de 11 bits. Chaque
trame se compose de 8 bits d’information, le LSB étant positionné en premier, précédés d’un bit
de start à 0 et suivis d’un bit de parité et d’un bit de stop à 1. Si le nombre total de ‘1’ dans
l’octet est pair, le bit de parité vaut ‘1’.
FIGURE 17 : EXEMPLE D’OCTET
Le signal d’horloge qui permet de cadencer la transmission est fourni par le périphérique.
La fréquence d’horloge est couramment de 15 kHz (elle varie cependant selon les modèles de
souris et peut valoir jusqu’à 33 kHz).
Entre les transmissions de données, le bus peut être dans l’état Idle (CLK et DATA sont
tous les deux au niveau haut, il n’y a pas d’activité) ou encore Request to send (le système maître
maintient DATA au niveau bas et laisse le signal CLK flotter, il est alors prêt à émettre.
Pour les transmissions de données dans le sens périphérique vers système maître, le bus
doit au préalable se trouver dans l’état Idle. Le périphérique transmet les données au rythme de
son horloge dont la période varie selon les systèmes de 60 à 100 µs. Il change les données sur
front montant de l’horloge, le système doit les lire sur front descendant.
Pour ce qui concerne les transmissions dans le sens système maître vers périphérique, le
système maître indique au périphérique qu’il souhaite émettre une commande en maintenant le
signal d’horloge au niveau bas pendant 100 µs puis place le bus en état Request To Send en
forçant Data à 0 et en libérant laissant le signal d’horloge. Dès que le périphérique reconnaît
l’état Request To Send du bus, il se tient prêt à recevoir une commande et émet son signal
d’horloge. Cette étape se fait en moins de 10ms. Le système maître change les données sur front
descendant, le périphérique échantillonne caque bit sur front montant de l’horloge.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 17 -
IV) PRESENTATION DU MODE DE FONCTIONNEMENT DE LA
SOURIS
1. PRINCIPE
On distingue deux types de souris à savoir les souris mécaniques qui sont plus anciennes
et les souris optiques qui tendent à se généraliser.
Les souris mécaniques contiennent une boule qui roule sur deux axes de roues. Ces roues
sont en fait des codeurs optiques qui traduisent les mouvement en X ou en Y par nombre de
comptage d’impulsions. On peut observer ce mécanisme sur la figure ci-dessous.
Y
X
FIGURE 18 : PRINCIPE D’UNE SOURIS MECANIQUE
Ce type de souris fonctionne par défaut avec une résolution de 200 CPI (Counts Per Inch)
ce qui correspond à un pas de 125 µm environ. La souris contient aussi deux ou trois boutons
poussoirs gérés par un microcontrôleur interne. Ce dernier gère la transmission des déplacements
gauche/droite (suivant X) et bas/haut (suivant Y), l’état des boutons ainsi que l’interprétation des
commandes reçues par le système maître.
Les souris optiques La souris optique possède un fonctionnement basé sur l'analyse de
la surface sur laquelle elle se déplace. Ainsi une souris optique est constituée d'une LED, d'un
système d´acquisition d´images (IAS) et d'un processeur de signaux numériques (DSP).
La LED est chargée d'éclairer la surface afin de permettre au système IAS d'acquérir
l'image de la surface. Le DSP, par analyse des caractéristiques microscopiques de la surface,
détermine le mouvement horizontal et vertical.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 18 -
Les souris optiques fonctionnent sur toutes surfaces non parfaitement lisses ou bien
possédant des dégradés de couleur. Les avantages principaux de ce type de dispositif de pointage
par rapport aux souris mécaniques sont notamment une précision accrue ainsi qu'un salissement
moindre.
2. INITIALISATION DE LA TRANSMISSION DE DONNEES
Il faut, pour établir la communication entre la souris et l’ordinateur, envoyer à la souris la
commande F4. Cette action permet de valider le mode de transmission en continu.
La souris répond à cette commande en envoyant un octet d’acquittement (OxFA). C’est
seulement après avoir envoyé cet octet d’acquittement que la souris émet ensuite les données par
paquet de trois octets.
Outre les envois de données, souris et ordinateur peuvent communiquer grâce à une liste
pré-établie de commandes de la souris et de messages renvoyés par celle-ci.
FIGURE 19 : COMMANDE D’UNE SOURIS PS/2
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 19 -
FIGURE 20 : MESSAGES D’UNE SOURIS PS/2
3. FONCTIONNEMENT COURANT
La souris envoie les données au système à l’aide d’une trame de trois octets. Le premier
octet contient entre autres des informations relatives aux boutons de la souris. Ainsi, l’état des
boutons gauche, du bouton droit et éventuellement du bouton central sont contenus dans cet octet
au niveau des bits 0, 1 et 2. Cet octet contient également les informations de dépassement (ou
overflow) et de sens de déplacement au niveau des axes X et Y. Le sens de déplacement se
traduit par deux bits de signe présents aux bits 4 et 5 de ce premier octet. Ces bits sont mis à 0
pour un déplacement dans le sens positif de référence et à 1 pour un déplacement dans le sens
négatif.
FIGURE 21 : AXES DE LA SOURIS
Le deuxième octet contient les données renseignant sur les déplacements suivant l’axe X.
Le dernier octet contient quant à lui les informations sur les déplacements verticaux. En fait, la
souris possède des compteurs de mouvements qui traduisent des déplacements à l’aide de mots
de 9 bits. Ces mots sont chacun composés d’un bit de signe présent au niveau des bits 4 et 5 du
premier octet suivi de 8 bits traduisant les déplacements en eux-mêmes.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 20 -
Les compteurs de mouvements fournissent donc des mots de 9 bits en complément à 2. A
chaque nouvel envoi de trame vers le système, la souris met à jour ces compteurs. Ainsi,
l’information fournie contient la somme de tous les mouvements effectués depuis le dernier
envoi de trame. Les valeurs limites de ces deux octets sont -256 du côté négatif et +255 du côté
positif. Si ces limites sont franchies, les bits d’overflow situés au niveau du premier octet sont
placés à l’état haut. Si un dépassement est détecté, aucun incrément ni décrément ne se fait au
niveau des compteurs de mouvements. Ainsi, il faut attendre que la trame indiquant le
dépassement soit envoyé au système. Ce n’est qu’après l’envoi de cette trame que les compteurs
de mouvements sont remis à zéro. Ils peuvent dès lors comptabiliser les mouvements effectués
par la souris.
Le tableau présenté ci-dessous permet de visualiser l’organisation de chaque trame
envoyée par la souris.
FIGURE 22 : COMPOSITION DES TRAMES ENVOYEES PAR LA SOURIS
Au niveau de l’émission, entre l’envoi de deux octets, il s’écoule 350µs. L’envoi d’une
trame prend 3,6ms. De plus, entre l’envoi de deux trames, il faut compter 6,4 ms. Bien sûr, toutes
ces données peuvent varier en pratique d’un dispositif à l’autre. On peut cependant noter que l’on
observe en général un envoi de 100 trames par secondes.
Sur l’écran la souris se matérialise par un curseur. Ce curseur est placé par défaut au
cantre de l’écran qui correspond donc à l’origine du repère de la souris. A chaque fois que la
souris émet une trame, le système doit décoder le déplacement du curseur correspondant et le
rajouter à sa position courante.
La résolution de la souris traduit le plus petit déplacement possible du curseur. L’idéal est
que cette résolution soit égale à la résolution de l’écran, résolution qui correspond à un pixel.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 21 -
V) PRESENTATION DU MODE DE FONCTIONNEMENT DU CLAVIER
1. PRINCIPE
Le clavier, tout comme la souris, envoie ses données au système via une connexion série
bidirectionnelle. Outre la masse, cette liaison est constituée de deux fils, l’un véhicule le signal
d’horloge fourni par le clavier, l’autre sert au transport des données. La liaison étant, comme
dans le cas de la souris bidirectionnelle, le clavier pourra non seulement envoyer des données au
système mais aussi recevoir des commandes de celui-ci.
Chaque système étant conçu pour pouvoir recevoir plusieurs types de clavier suivant le
pays de commercialisation, un mécanisme de standardisation des touches est utilisé. A chaque
appui sur une touche, le clavier envoie au système un code géographique appelé scan code qui est
uniquement lié à l’emplacement de la touche sur le clavier.
Le clavier peut stocker jusqu’à 10 scan codes. De plus, pour permettre la détection de
l’appui simultané sur plusieurs touches (par exemple pour écrire une lettre majuscule), il existe
deux types de scan codes. En effet, un scan code appelé make code est envoyé au système lors de
l’enfoncement d’une touche et un autre appelé break code est envoyé lors de son relâchement.
Ainsi, lorsque l’on appuie sur la touche shift toutes les lettres tapées après l’envoi du make code
de shift et avant l’envoi de son break code seront écrites en majuscule.
2. FONCTIONNEMENT COURANT
Il faut maintenant s’intéresser à la structure même du clavier. En effet, pour détecter
l’enfoncement d’une touche, un réseau de câbles est placé sous le clavier de l'ordinateur. Chaque
touche est installée sur une intersection de câbles et ferme un contact si elle est enfoncée. Le
microprocesseur du clavier utilise un courant qui balaie chaque rangée en séquence, des milliers
de fois par seconde, que le clavier soit utilisé ou non.
FIGURE 23: STRUCTURE D’UN CLAVIER
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 22 -
Quand une touche est enfoncée, le microprocesseur détecte une rangée comprenant un
circuit fermé et entame le balayage des colonnes. L'identité de la touche est transmise sous la
forme d'un code de touche qui est ensuite décodé et envoyé à l'écran sous forme d'un caractère
dactylographié ou d'une instruction.
Chaque touche correspond donc à un code appelé code ASCII (American Standard Code
for Information Interchange). Il permet le codage de caractères sur 8 bits, soit 256 caractères
possibles.
Les codes 0 à 31 ne sont pas des caractères. On les appelle caractères de contrôle car ils
permettent de faire des actions telles que le retour à la ligne ou l’émission d’un bip sonore.
Les codes 65 à 90 représentent les majuscules. Les codes 97 à 122 représentent les
minuscules. Ainsi, il suffit de modifier le 6ème
bit pour passer de majuscules à minuscules, c'est-
à-dire ajouter 32 au code ASCII en base décimale.
Tous ces codes peuvent être retrouvés dans la table ci-dessous.
FIGURE 24 : TABLE DES CARACTERES ASCII DE BASE
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 23 -
FIGURE 25: TABLE DES CARACTERES ASCII ETENDUE
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 24 -
VI) FONCTIONNEMENT DU PROGRAMME GERANT LA SOURIS
1. PRELIMINAIRES
Avant tout travail de programmation il a fallu tout d’abord s’intéresser aux modules
d’émission et de réception mis à notre disposition. On peut donc remarquer sur les datasheets
fournis (Annexe 1et 2) que la bande passante du module d’émission peut aller jusqu’à 10 KHz
alors que celle du module de réception ne peut supporter une fréquence de plus de 5KHz. Il s’est
donc avéré nécessaire de transmettre les données à une fréquence inférieure à 5KHz. La
fréquence choisie a donc été fixée aux alentours de 4 KHz.
De plus, en pratique il est apparu que la transmission au niveau de ces modules faisait
intervenir du bruit au repos. Pour y remédier il a été nécessaire de rajouter une résistance de
pull-up qui fixe un état haut au repos au niveau de l’émission car les sorties sont à collecteur
ouvert. Cette résistance a été placée entre la sortie du FPGA et +Vcc. Ceci a permis de réduire
significativement le bruit de transmission.
Le montage réalisé au niveau de l’émission est donc le suivant :
FIGURE 26: MONTAGE DU MODULE EMETTEUR
Le montage réalisé au niveau de la réception conformément aux instructions des
datasheets est le suivant :
FIGURE 27: MONTAGE DU MODULE RECEPTEUR
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 25 -
Il est important de noter que la transmission au niveau des modules émetteur-récepteur est
unidirectionnelle. Ainsi, l’ordinateur présent en bout de chaîne ne peut envoyer de commande à
la souris. Il nous appartient donc d’envoyer la commande F4 à la souris nécessaire à son
initialisation puis de détecter l’octet d’acquittement envoyé par cette dernière.
D’une manière analogue, il est utile d’envoyer cet octet d’acquittement à l’ordinateur
pour le prévenir du bon déroulement de cette initialisation.
De plus, seules les données pouvant être envoyées par les modules, il a été à notre charge
de réaliser une récupération d’horloge au niveau de la réception. C’est ainsi qu’il a fallu générer
un signal d’horloge semblable à celui de l’émission, prenant en compte les délais de transmission
et actif uniquement lorsqu’un évènement est détecté.
Une fois ces observations prises en compte, il a été possible de passer à la programmation
proprement dite. Dans un soucis de clarté, cette programmation est présentée de façon
schématique dans les points suivants. Les programmes détaillés sont donnés en annexe 3 et 4.
2. PROGRAMME CONCERNANT L’EMISSION
2.1. SCHEMATIQUE D’ENSEMBLE
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 26 -
Le programme côté émission est organisé de la façon suivante :
FIGURE 28: SCHEMATIQUE D’ENSEMBLE COTE EMISSION
2.2. DETAILS DU SEQUENCEUR
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 27 -
Le séquenceur évoqué figure 28 fonctionne de la façon suivante :
FIGURE 29: ORGANISATION DU SEQUENCEUR D’EMISSION
3. PROGRAMME CONCERNANT LA RECEPTION
3.1. SCHEMATIQUE D’ENSEMBLE
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 28 -
Le programme est organisé de la façon suivante :
FIGURE 30: SCHEMATIQUE D’ENSEMBLE COTE RECEPTION
3.2. DETAILS DU SEQUENCEUR
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 29 -
Le séquenceur évoqué figure 30 fonctionne de la façon suivante :
FIGURE 31: ORGANISATION DU SEQUENCEUR DE RECEPTION
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 30 -
CONCLUSION
Ce projet a eu pour avantage de nous apprendre à mieux appréhender la programmation
en VHDL de circuit FPGA. On a pu ainsi se familiariser avec le fonctionnement de la carte
Spartan-3 de Xilinx à travers un exemple concret, à savoir la réalisation de bout en bout d’une
souris sans fil.
Les difficultés rencontrées nous ont permis d’étudier le fonctionnement précis d’une
souris mais aussi de connaître de façon détaillée le protocole PS/2. La principale difficulté a
résidé dans le fait que la documentation sur ce protocole reste très limitée et se cantonne souvent
à de simples observations expérimentales et non à des généralités. Ainsi, la vérification de toutes
les étapes du protocole PS/2 a été à notre charge.
Plusieurs perspectives pourraient donner suite à ce projet. Il serait notamment possible
d’intégrer un clavier sans fil. Pour cela, il est nécessaire de définir un protocole de
communication. Pour établir ce protocole, il faudra prendre en compte le fait que la souris envoie
ses informations par trames de 33 bits alors que le clavier utilise des trames de 11 bits.
De plus, côté émission, il faudra définir comment organiser non seulement la réception
des données d’une part de la souris et d’autre part du clavier mais aussi l’envoi des données de
ces deux périphériques au niveau de l’émetteur.
Côté réception, il faudra récupérer les données puis les organiser en fonction du protocole
de transmission adopté pour pouvoir envoyer des signaux décodables par le système.
Compte tenu des contraintes imposées par le problème, il faudrait commencer par
effectuer l’initialisation de la souris en envoyant la commande F4 puis en détectant l’octet
d’acquittement FA.
La première trame provenant de la souris serait ensuite récupérée. Ainsi, ces 33 bits
pourraient être stockés dans un registre A.
Une deuxième opération consisterait à stocker la première trame provenant du clavier, à
savoir 11 bits, dans un registre B.
On pourrait ensuite accoler les données contenues dans A et B dans un registre C de 44
bits. Ce sont les données contenues dans le registre C qui seraient envoyées à l’émetteur comme
présenté ci-après.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 31 -
FIGURE 32 : COMPOSITION DU REGISTRE C
Cette opération pourrait être répétée à l’infini. Ainsi, les données seraient envoyées à
chaque événement de la souris ou du clavier ou des deux.
Côté réception, c’est ce registre C qui serait récupéré. Il faudrait alors séparer les 33 bits
de plus fort poids correspondant aux données envoyées par la souris des 11 bits de plus faible
poids correspondant aux informations liées au clavier.
Ces informations devraient ensuite être traitées par le programme de réception dans le but
d’envoyer au système des informations sous une forme qu’il peut interpréter.
Il faut cependant noter qu’une telle solution ne serait possible qu’en prenant un récepteur
de bande passante plus élevée afin d’avoir le temps de transmettre correctement ces 44 bits. En
effet, à la fréquence de 4 KHz à laquelle on travaille il faudrait 11 ms pour transmettre le registre
C ; ce qui risque d’être trop juste. Ceci s’explique par le fait que la différence de temps entre le
dernier bit d’une trame de souris et le dernier bit de la trame suivante est de 11,6 ms en théorie.
Cependant ce temps peut varier et peut donc entraîner des erreurs de transmissions.
Une autre alternative, en gardant le module à notre disposition, serait de transmettre à
tour de rôle les données de la souris puis celles du clavier. L’inconvénient d’une telle méthode
est la prise en compte d’un nombre moindre de trames par secondes. Ainsi les temps de
traitement des informations des deux périphériques seraient augmentés. Ceci se ressentirait
essentiellement au niveau du déplacement du curseur de la souris.
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 32 -
TABLE DES FIGURES
FIGURE 0 : CHAINE DE TRANSMISSION A REALISER………………………………………. P 4
FIGURE 1 : XILINX SPARTAN 3 VUE DE DESSUS…………………………………………… P 6
FIGURE 2 : XILINX SPARTAN 3 VUE DE DESSOUS…….......................................................... P 6
FIGURE 3 : CARTE XILINX SPARTAN 3 UTILISEE………………………………………….. P 7
FIGURE 4 : ETAPE 1 POUR CREER UN PROJET……………………………………………… P 8
FIGURE 5 : ETAPE 2 POUR CREER UN PROJET……………………………………………… P 9
FIGURE 6 : ETAPE 3 POUR CREER UN PROJET…………………………………………….... P 9
FIGURE 7 : ETAPE 4 POUR CREER UN PROJET ……………………………………………… P10
FIGURE 8 : ETAPE 5 POUR CREER UN PROJET………………………………………………. P10
FIGURE 9 : ETAPE 6 POUR CREER UN PROJET ……………………………………………… P11
FIGURE 10 : ETAPE 7 POUR CREER UN PROJET …………………………………………….. P11
FIGURE 11 : ETAPE 8 POUR CREER UN PROJET …………………………………………….. P12
FIGURE 12 : ETAPE 9 POUR CREER UN PROJET……………………………………………... P12
FIGURE 13 : ETAPE 10 POUR CREER UN PROJET …………………………………………… P13
FIGURE 14 : ETAPE 11 POUR CREER UN PROJET …………………………………………… P13
FIGURE 15 : IMPLANTATION DU PROGRAMME SUR LA CARTE…………………………….. P14
FIGURE 16 : CONNECTEUR MALE PS/2…………………………………………………….. P15
FIGURE 17 : EXEMPLE D’OCTET…………………………………………………………… P16
FIGURE 18 : PRINCIPE D’UNE SOURIS MECANIQUE………………………………………... P17
FIGURE 19 : COMMANDES D’UNE SOURIS PS/2……………………………………………. P18
FIGURE 20 : MESSAGES D’UNE SOURIS PS/2……………………………………………….P19
FIGURE 21 : AXES DE LA SOURIS…………………………………………………………... P19
FIGURE 22 : COMPOSITION DES TRAMES ENVOYEES PAR LA SOURIS……………………….. P20
FIGURE 23: STRUCTURE D’UN CLAVIER …………………………………………………... P21
FIGURE 24 : TABLE DES CARACTERES ASCII DE BASE ……………………………………... P22
FIGURE 25: TABLE DES CARACTERES ASCII ETENDUE……………………………………... P23
FIGURE 26: MONTAGE DU MODULE EMETTEUR……………………………………............ P24
FIGURE 27: MONTAGE DU MODULE RECEPTEUR…………………………………………... P24
FIGURE 28: SCHEMATIQUE D’ENSEMBLE COTE EMISSION…..……………………………... P26
FIGURE 29: ORGANISATION DU SEQUENCEUR D’EMISSION....……………………………... P27
FIGURE 30: SCHEMATIQUE D’ENSEMBLE COTE RECEPTION...……………………………... P28
FIGURE 31: ORGANISATION DU SEQUENCEUR DE RECEPTION……………………………... P29
FIGURE 32 : COMPOSITION DU REGISTRE…………………………………………………...P31
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 33 -
REFERENCES BIBLIOGRAPHIQUES
Spartan-3 Starter Kit Board User Guide, Xilinx, ref. UG130 (v1.0), Avril 2004
Site officiel de Xilinx, http://www.xilinx.com
Page de M Weiss sur les ports PS/2 de souris, Docteur de l'Université de Rennes I,
http://www.rennes.supelec.fr/ren/fi/elec/docs/mouse_ps2/souris_ps2.htm
Cours de M Anceau, http://lmi17.cnam.fr/~anceau/Documents/clavier.pdf
http://www.farnell.com/datasheets/260.pdf
http://www.farnell.com/datasheets/258.pdf
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 34 -
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 35 -
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 36 -
LAHRICHI Karim DARTIAILH Karine
___________________________________________________________________________
Programmation en VHDL sur circuit FPGA d’un clavier et d’une souris sans fils
- 37 -