Université des Sciences et Techniques de Lille
Rapport de mini projet : Initialisation au langage VHDL par étude d’un émetteur Manchester
Réalisé par : Bouras Farid BekangbaGracia
Supervisé par : Bourzgui
Sommaire
1. Introduction 2. Transmissions numériques et codage Manchester 3. Préparation : Etude de l’émetteur 4. Le codeur 5. Le générateur pseudo-aléatoire 6. Le diviseur 7. Synthèse par macro-fonctions simulation de l’Emetteur 8. Synthèse en VHDL et simulation de l’Emetteur 8.1. Diviseur de fréquence 8.2. Générateur pseudo-aléatoire 8.3. Codeur 8.4. Ensemble émetteur
1. Introduction
L’évolution des circuits intégrés numériques, en particuliers les circuits programmables (CPLD, FPGA), conduit le concepteur à réaliser des systèmes de plus en plus complexe. Notre mini projet a pour but de nous familiariser avec le langage VHDL par l’étude d’un émetteur Manchester. Nous allons segmenter notre travail en quatre(4) grandes parties : • présentation du problème et justification de l’utilisation du code Manchester • fonctions à implanter. • synthèse de l’émetteur. • reprendre la synthèse en langage VHDL.
2. Transmissions numériques et codage Manchester
La transmission numérique consiste à faire transiter les informations sur le support physique de communication sous forme de signaux numériques. Ainsi, des données analogiques devront préalablement être numérisées avant d’être transmises. Toutefois, les informations numériques ne peuvent pas circuler sous forme de 0 et de 1 directement, il s’agit donc de les coder sous forme d’un signal possédant deux états, par exemple : -deux niveaux de tension par rapport à la masse -la différence de tension entre deux fils -la présence/absence de courant dans un fil Pour que la transmission soit optimale, il est nécessaire que le signal soit codé de façon à faciliter la transmission sur le support physique. Il existe pour cela différents systèmes de codage pouvant se classer en deux catégories : -le codage à deux niveaux : le signal peut prendre uniquement une valeur strictement négative ou strictement positive. -le codage à trois niveaux : le signal peut prendre une valeur strictement négative, nulle ou strictement positive. Le codage NRZ Le codage NRZ (non Return to zéro) est le premier système de codage, car le plus simple. Il consiste à transformer les 0 en –X et les 1 en +X, de cette façon on a un codage bipolaire dans lequel le signal n’est jamais nul. Par conséquent, le récepteur peut déterminer la présence ou non d’un signal.
Il note aussi un codage NRZI qui est sensiblement différent du codage NRZ. Avec ce codage, lorsque le bit est à 1, le signal change d’état après le top d’horloge. Lorsque le bit est à 0, le signal ne subit aucun changement d’état. Le codage NRZI possèdes de nombreux avantages, dont : -la détection de la présence ou non du signal -la nécessité d’un faible courant de transmission du signal Par contre, il possède un défaut : la présence d’un courant continu lors d’une suite de 0, gênant la synchronisation entre émetteur et récepteur. Le codage Manchester
Le codage Manchester, également appelé codage biphasé introduit une transition au milieu de chaque intervalle. Il consiste en fait à faire un OU exclusif (XOR) entre le signal et le signal d’horloge, ce qui se traduit par un front montant lorsque le bit est à 0, un front descendant dans le cas contraire. L’utilisation de ce codage supprime alors la composante continue.
3. Préparation : étude de l’émetteur
oscillateur de référence
diviseur
horloge d'émission
générateur pseudo-aléatoire
données NRZ codeur CPLD
ligne
circuit d'interface (codage antipolaire, filtrage, amplification)
sortie manchester
Nous avons ci-dessus le schéma synoptique de l’émetteur. Le signal d’horloge d’émission par une division par 16 de la fréquence est obtenu à partir d’un signal carré issu d’un oscillateur à quartz servant de référence temporelle stable. Dans notre cas de figure, nous ne disposons pas d’un système numérique ayant réellement des données à transmettre, aussi nous le simulerons par un générateur pseudo-aléatoire. Ce type de générateur permet de générer à partir de l’horloge d’émission une séquence codée NRZ. Cette dernière permettra de tester à la fois l’émetteur et le récepteur avec un signal plus proche de la réalité qu’une suite de niveaux identiques ou qu’une alternance de 1 et de 0. A partir de ce signal et de l’horloge d’émission, le codeur réalise la translation du code NRZ vers le code Manchester. Le circuit d’interface (non étudié) permet ensuite d’attaquer la ligne.
4. Le codeur NRZ MAN
H
En observant le chronogramme ci-dessus, on remarque que l’entrée H est recopiée quand l’entrée du signal NRZ est à « 0 ». Par contre on a l’inverse de H en sortie quand le signal NRZ égal « 1 ».
NRZ =0→MAN =H
NRZ =1→ MAN = H MAN = NRZ ⋅H + NRZ ⋅H On reconnait ainsi la fonction « ou exclusif »
MAN = NRZ ⊕ H Ainsi la sortie MAN ne dépend pas d’un état précédent, on a donc une fonction combinatoire. 5. Le générateur pseudo-aléatoire Le générateur pseudo-aléatoire génère une suite périodique de (2 -1) bits codés NRZ à partir de N bascules D montées en registre à décalage. L’on remarque que plus on augmente le nombre de bascules plus la suite numérique paraît aléatoire L’entré du registre à décalage est une combinaison par un ou exclusif (complémenté ou non) de la sortie du registre et d’une ou plusieurs bascules intermédiaires dont le rang dépend de N. N
Après réalisation du générateur pseudo-aléatoire à l’aide du logiciel Max +plus II 10.2 BASELINE en créons un fichier qu’on a appelé gene_alea.gdf, nous avons pu faire une simulation (voir chronogramme ci-dessous) en tenant compte que toutes les bascules ont leur sortie à 0 à l’origine des temps.
On a bien une succession de niveau aléatoire sur 15bits que l’on a ensuite periodisée, c’est ainsi que l’on peut parler de suite pseudo-aléatoire. Le générateur pseudo-aléatoire présente un état de sortie qui bloque le système. En effet on fonctionne ici sur une logique inversée donc le NL1 correspond au niveau « 0 ». La sortie de la porte étant rebouclée en entrée du registre a décalage, si toutes les sorties de bascules sont au NL1 alors l’état « 0 » sera recopié en entrée du registre ainsi se forme une boucle de niveau « 0 ». D’après le schéma du générateur on réalise la fonction pseudo-aléatoire grâce à une porte XNOR dont la table de vérité est la suivante : A 0 0 1
B 0 1 0
Q (XOR) 1 0 0
/Q (XNOR) 0 1 1
1
1
1
0
6. Le Diviseur A l’aide du logiciel nous avons crée un fichier divlogiciel.gdf dont le schéma est représenté ci-dessous.
Ainsi nous avons effectué une simulation du diviseur 16 dont le chronogramme est représenté ci-dessous :
Afin de pouvoir proposer un schéma structurel, il est important de rappeler le fonctionnement de la bascule D.
Bascule D sur front montant
Table de vérité : D Ck
Qn+1
0
0
1
1
1
0
X 0
Qn
n+1
n
C’est une bascule qui a deux entrées (entrée D et l’horloge) et une sortie. A chaque front montant d’horloge, Q recopie l’entrée D. sa fonction est donc une mémoire puisque l’information en entrée se retrouve en sortie après chaque coup d’horloge. Cette bascule peut réaliser une division par 2 en réinjectant la sortie a l’entrée D. c’est ainsi qu’on obtient le diviseur par 16 ci dessous en mettant 4bascules
Q en cascades.
7. Synthèse par macro-fonctions et simulation de l’émetteur Par le biais du logiciel MAX+plus les fonctions précédemment crées sont implantées dans des composants qui nous permettent ainsi de simuler l’ensemble du montage.
On voit sur les chronogrammes des impulsions parasites qui sont dues à un décalage entre les données NRZ et l’horloge d’émission. Ces impulsions parasites n’ont en générale aucune incidence sur un système réel car elles seraient supprimées par les filtres de sortie. Dans notre simulation la solution proposée pour ce problème consiste à resynchroniser la sortie du codeur en utilisant un montage mémoire utilisant une bascule D (schéma cidessous).
Simulation
Signal parasités Nous observons bien que le fait de resynchroniser la sortie du codeur avec un montage mémoire (bascule D) entraîne bien une disparition des impulsions parasites.
8. Synthèse en VHDL et simulation de l’Emetteur. L’ensemble émetteur récepteur va maintenant être décrit en langage VHDL, description à partir de laquelle le logiciel établira les liaisons entre les différentes portes et bascules à l’intérieur du CPLD. 8.1. Diviseur de fréquence Nous avons écris un programme qui décrit un diviseur de fréquence permettant d’obtenir en sortie deux signaux de fréquence 8 fois et 16 fois plus faible que celle du signal d’entrée.
Programme :
Nous avons effectué une simulation du programme afin de vérifier son fonctionnement. Le chronogramme est représenté ci-dessous.
Simulation
On a bien pour le signal S8 une période 8 fois plus grande que le signal H Idem pour le signal S16 avec une période 16 fois plus grande.
8.2 Générateur pseudo-aleatoire : Nous avons réalisé ici un programme décrivant un générateur à 4 bascules
Simulation :
Le chronogramme de NRZ montre bien une séquence aléatoire e niveau logique recopiée tout les 16 fronts d’horloge.
Ce programme peut être décris de plusieurs façons ici on remplace la boucle « for » par l’opérateur de concaténation « & ».
8.3 - Le codeur Le codeur est en fait une porte xor et nous avons décris son fonctionnement grâce a un programme VHDL
H
H
NRZ =0→MAN =H
NRZ =1→ MAN = H MAN = NRZ ⋅H + NRZ ⋅H Le chronogramme du signal MAN présente des impulsions parasites appelées glitchs Pour supprimer les parasites on va utiliser une bascule D comme précédemment décrite mais par le programme VHDL ci dessous
Ce programme est utilisé dans une macro fonction « BASCULED1 »
8.4 Ensemble émetteur : Après avoir décri par VHDL touts les macro-fonctions de l’émetteur nous les avons assemblés pour donner le montage suivant.
Simulation :
L’émetteur Manchester est bien généré par le montage. Sur les chronogrammes précédent on peut vérifier sont fonctionnement et aussi les différente étapes de traitement du signal notamment le diviseur de fréquence, le générateur aléatoire, le codeur et enfin la suppression des glitchs.