Sie sind auf Seite 1von 15

Initiation au langage VHDL par ltude dun metteur et

dun rcepteur Manchester.


Lobjectif de cette sance est dimplanter un metteur et un rcepteur de transmission dun signal
numrique cod Manchester au sein dun CPLD.
Nous utiliserons le logiciel Quartus II comme outils de synthse, logiciel avec lequel nous
supposerons une certaine familiarisation acquise lors de sances prcdentes.
Afin de simplifier les tests de lensemble, la sortie de lmetteur et lentre du rcepteur implants au
sein du mme CPLD seront relies. La partie lectronique pure sera occulte au profit de la partie
programmation. Il reste cependant possible de synthtiser lmetteur et le rcepteur au sein de deux
circuits diffrents (la carte de dveloppement DLP par exemple comprend un Max7000 et un
Flex10K), de raliser les circuits dinterface de lattaque de ligne etc...
Limplantation se fera dans un premier temps en utilisant des composants prdfinis, appels macrofonctions, fournies avec le logiciel. Dans un second temps, nous reprendrons les mmes fonctions,
mais en les dcrivant cette fois en VHDL.
Remarque : les solutions proposes lors de cette sance aboutissent parfois la violation de la rgle
de base des systmes synchrones, qui est quun tel systme ne doit avoir quune seule horloge. Notre
but ntait pas ici de faire un systme performant techniquement, mais un systme permettant un
passage simple dune description classique vers une description VHDL.

1 Transmissions numriques et codage Manchester


Le code utilis le plus couramment pour reprsenter une donne numrique est le code NRZ :
- un NL1 (niveau logique 1) est reprsent par 5 V par exemple
- un NL0 (niveau logique 0) par 0 V (codage NRZ unipolaire) ou -5 V (codage NRZ antipolaire).
Ce code simple est cependant inadapt pour des transmissions filaires sur des distances suprieures
quelques mtres.
En effet la boucle cre par les fils aller et retour entre metteur et rcepteur, et surtout celle cre
par le cble de transmission (ensemble des fils aller et retour) et la terre, ralisent une antenne
sensible aux variations du champ magntique ambiant. Il sensuit alors la superposition dun signal
parasite sur le signal utile rendant linterprtation de ce dernier impossible.
Une solution couramment envisage pour pallier ce problme consiste ouvrir ces boucles au moyen
de transformateurs lectromagntiques.
Ces derniers ne laissent cependant pas passer les signaux continus, et dans le cas dun signal NRZ,
une suite de niveaux logiques identiques introduira forcment la prsence dune composante
continue.
Lide du codage Manchester consiste reprsenter les informations logiques, non pas par des
niveaux (5 V et, 0 ou -5 V), mais par des transitions :
- une NL1 par un front montant au milieu de la priode dhorloge
- un NL0 par un front descendant au milieu de la priode dhorloge comme le montre la figure
suivante :

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDL avec Quartus II

page 1/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

Lutilisation dun codage Manchester antipolaire (5 V et -5 V par exemple) supprime alors toute
composante continue.
Remarque : le choix dun front montant pour coder le NL1 est purement arbitraire, et on trouvera
parfois le choix inverse.
Dans la suite ltude sera faite pour un CPLD aliment en 0/5 V ; le codage sera donc unipolaire et
nous supposerons un circuit dinterface (non tudi) tablissant la liaison la ligne de communication.
Ce circuit dinterface permettra la transition vers un codage antipolaire (pour lmetteur) ou depuis un
codage antipolaire (pour le rcepteur).

2 Prparation
2.1

Etude de lmetteur

Le schma synoptique de lmetteur est donn par la figure suivante :

oscillateur
de rfrence

diviseur

horloge
d'mission

gnrateur
pseudo-alatoire

donnes
NRZ
codeur
CPLD

ligne

circuit d'interface
(codage antipolaire,
filtrage, amplification)

sortie
manchester

A partir dun signal carr issu dun oscillateur quartz servant de rfrence temporelle stable, on
obtient le signal dhorloge de la transmission (note horloge dmission sur le schma) par une
division par 16 de la frquence.

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 2/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

Dans notre cas de figure, nous ne disposons pas dun systme numrique ayant rellement des
donnes transmettre, aussi nous le simulerons par un gnrateur pseudo-alatoire.
Un gnrateur pseudo-alatoire gnre partir de lhorloge une squence code NRZ. Cette dernire
permettra de tester la fois lmetteur et le rcepteur avec un signal plus proche de la ralit quune
suite de niveaux identiques ou quune alternance de 1 et de 0.
A partir de ce signal et de lhorloge de transmission, le codeur ralise la translation du code NRZ vers
le code manchester.
Le circuit dinterface (non tudi) permet ensuite dattaquer la ligne.
2.1.1

Le codeur

Donner la fonction implanter dans cette partie pour obtenir le fonctionnement dsir.
2.1.2

Le gnrateur pseudo-alatoire.

Ce bloc permet de gnrer partir de N bascules montes en registre dcalage une suite
priodique de 2N-1 bits cods NRZ. Plus le nombre de bascules est important et plus la suite
numrique parat alatoire. Cette suite tant cependant priodique, elle est dite pseudo-alatoire.
Lentre du registre dcalage est une combinaison par un ou exclusif (complment ou non) de la
sortie du registre et dune ou plusieurs bascules intermdiaires dont le rang dpend de N (voir dtails
des connexions en fonction du nombre de bascules en annexe).

Reprsenter les chronogrammes des diffrents signaux de sortie des bascules en fonction de
lhorloge dentre (on supposera que toutes les bascules ont leur sortie 0 lorigine des temps).
Vrifier que nous avons bien une suite pseudo-alatoire de 2N-1 bits quelle que soit la sortie choisie.
Dans ce type de gnrateur il existe toujours au moins un tat de sortie qui bloque le systme. Que se
passe t-il dans notre exemple si toutes les sorties de bascules sont au NL1 ?
2.1.3

Le diviseur

Nous utiliserons une fonction pr-dfinie par le logiciel pour raliser ce diviseur.
Dans le cas o nous aurions le raliser laide de bascules D, proposer un schma structurel.

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 3/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

3 Etude du rcepteur
Pour dcoder le signal reu, nous allons utiliser le fait quau milieu de chaque priode de lhorloge
dmission, un front montant (pour un NL1 de la donne NRZ) ou descendant (pour un NL0 de la
donne NRZ) reprsente la valeur cherche.
Il suffira donc daller lire le signal reu aprs ce front pour avoir la valeur NRZ, aux trois quarts de la
priode de lhorloge dmission par exemple.
Cependant, rcepteur connat la frquence de lhorloge dmission, mais pas sa phase (il ne peut
prdire quel endroit se trouve le milieu et les trois quarts de la priode).
Il va donc falloir retrouver cette information partir du signal reu. Pour cela on peut remarquer que
celui-ci comporte systmatiquement un front en milieu de priode, et alatoirement un front en dbut
(ou fin) de priode (lorsque le signal NRZ ne change pas).
Un dtecteur de front va dans un premier temps fournir une brve impulsion chaque front montant
ou descendant.

En sortie de celui-ci nous aurons donc des impulsions systmatiques et des impulsions
alatoires .
une priode d'horloge
horloge
de l'metteur
(non connue
du rcepteur)
t
signal
reu
en VE
t
signal
en VI
t
impulsions
systmatiques
en milieu de priode
d'horloge

impulsions
alatoires

Nous allons liminer ces dernires au moyen dun monostable M1 front montant, non
redclenchable qui fournira un NL1 pendant une dure correspondant 75% de la priode de
lhorloge dmission.
Aprs un tat transitoire, les fronts montants de la sortie de ce monostable seront cals sur la moiti
de la priode de lhorloge dmission. Nous avons donc retrouv linformation phase de cette dernire.
Pour nous placer aux trois quarts de la priode de lhorloge dmission, nous utilisons un monostable
M2 front montant plac en sortie du premier (de manire ne plus voir les impulsions alatoires) qui
Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 4/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

fournit sa propre sortie un NL0 pendant une dure correspondant 25% de la priode dhorloge.
Cette sortie nous donne donc un front montant aux trois quarts de la priode dhorloge dmission.
Lchantillonneur numrique recopie alors sur sa sortie la valeur du signal reu par le rcepteur au
moment de ce front montant.
On dispose dun oscillateur de rfrence dlivrant une frquence 16 fois suprieure la frquence
dmission des donnes. Le choix dun rapport 16 identique celui de lmetteur simplifiera le
schma ; ce nest cependant pas une ncessit.
Donner les chronogrammes aux diffrents endroits du schma structurel lorsque la suite NRZ code
par lmetteur est 0111010 .
Vrifier quon retrouve bien cette suite en sortie du dcodeur aprs un certain retard. Justifier ce
retard.
3.1.1

Dtecteur de front

Le schma structurel de celui-ci est donn ci-aprs :

Le signal dhorloge de la bascule D est suppos de frquence trs suprieure tous les autres
signaux et sans relation de phase avec le signal reu par le rcepteur.
Dans la pratique nous utiliserons le signal issu de loscillateur quartz dont la frquence est 16 fois
suprieure celle de lhorloge dmission.
On rappelle que sur une bascule D, pour tre prise en compte, la donne lentre D doit tre
prsente un temps, dit temps de pr positionnement (set up time), de quelques ns avant le front
dhorloge.
Donner les chronogrammes des diffrents signaux du dtecteur et vrifier que lon a bien la fonction
souhaite.
3.1.2

Monostables

Sur un circuit purement numrique (ne faisant pas intervenir de circuits RC) une telle fonction peut
tre ralise par un compteur. Lhorloge de ce compteur sera attaque par le signal dhorloge de
rfrence, de frquence 16 fois suprieure la frquence dmission. Lors de lapparition dune
impulsion de dclenchement (fournie par le dtecteur de front), la sortie M1 du monostable doit passer
au NL1 pendant 12 coups dhorloge (soit 75 % de 16), tandis que la sortie M2 doit rester au NL0
pendant 4 coups dhorloge (soit 25 % de 16). Tant que M1 nest pas repass au NL0, lentre de
dclenchement reste sans effet.
Proposer un schma associant quelques portes logiques et un compteur binaire 4 bits, quip dune
entre dhorloge (clock), dune remise 0 synchrone (sclr) active au NL1 et dune autorisation de
comptage (cnt_en) active au NL1.
3.1.3

Echantillonneur numrique

Proposer un schma structurel de cet chantillonneur en utilisant une bascule D.

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 5/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

4 Synthse par macro-fonctions et simulation


Nous allons maintenant implanter ces diffrentes fonctions dans un CPLD laide du logiciel
Quartus II
On pourra placer une sortie sur chaque signal que lon souhaite visualiser sur le simulateur afin de
pouvoir les reprer facilement dans la liste des signaux proposs par le logiciel.

4.1

Emetteur

Dans le logiciel Quartus II ouvrir un nouveau projet que lon nommera par exemple Manchester.qdf.
Ouvrir ensuite une feuille graphique que lon nommera par exemple EMETTEUR.bdf.
Implanter le diviseur de frquence par 16 ; son nom est Freqdiv et il se trouve dans la bibliothque
altera / 72 / quartus / librairies / others / maxplus2 .
Par un clic droit sur le symbole, accder au menu contextuel Open Design File (ou par un double
clic sur le composant),qui ouvre le schma interne du diviseur ; comparer avec la solution tablie lors
de la prparation, dduire le niveau logique placer sur les entres G et CLR (les niveaux logiques
par dfaut sont prciss sur le coin bas droit de chaque sortie).
Imposer une entre pour lhorloge, et une sortie sur DIV16 qui sera alors lhorloge de transmission,
que lon nommera par exemple H_TX.
Tester le bon fonctionnement (on se limitera une simulation fonctionnelle).
Ajouter le gnrateur pseudo-alatoire en imposant une borne de sortie pour le signal NRZ et tester le
fonctionnement. On trouvera les bascules D (appeles DFF2 pour Data Flip Flop) dans
altera / 72 / quartus / librairies / others / maxplus2 ainsi que les diffrentes portes logiques
dans altera / 72 / quartus / librairies / primitives / logic .
Placer maintenant le codeur et tester de nouveau.
Effectuer maintenant une compilation complte puis raliser une simulation temporelle.
On peut remarquer la prsence sur le signal cod Manchester dimpulsions parasites (glitch) lorsque
le signal NRZ change de niveau. Ces impulsions sont dues lasynchronisme de notre description,
matrialis par un dcalage entre les donnes NRZ et lhorloge dmission (temps de propagation des
bascules D du gnrateur pseudo-alatoire). Dans un systme rel elles seraient supprimes par les
filtres de sortie et resteraient sans incidence. Dans notre application, nous allons devoir re
synchroniser la sortie du codeur en modifiant le schma structurel de celui-ci de la manire suivante :

Tester cette solution.


Crer un symbole graphique pour lensemble de lmetteur.

4.2

Rcepteur

Ouvrir une nouvelle feuille graphique et la sauvegarder sous le nom de RECEPTEUR.bdf.


Implanter et tester le monostable laide du circuit lpm_counter que lon trouvera dans
altera / 72 / quartus / librairies / megafunctions / arithmetic .
Implanter et tester le dtecteur de front. Pour le test on prendra comme signal dentre une tension
susceptible de correspondre un signal Manchester en respectant les priodes dhorloge.
Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 6/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

Implanter lchantillonneur numrique et vrifier le fonctionnement.


Crer un symbole graphique pour lensemble de fonction du rcepteur.

4.3

Ensemble metteur rcepteur

Ouvrir une nouvelle feuille graphique, la nommer EMET_RECEPT, y placer lmetteur et le rcepteur
puis vrifier le bon fonctionnement de lensemble.

5 Synthse en VHDL et simulation


Lensemble metteur rcepteur va maintenant tre dcrit en langage VHDL, description partir de
laquelle le logiciel tablira les liaisons entre les diffrentes portes et bascules lintrieur du CPLD.
Ouvrir laide de lassistant
MANCHEST_VHDL.bdf.

un

nouveau

projet

que

lon

nommera

par

exemple

5.1 Emetteur
Diviseur de frquence
En vous inspirant des programmes VHDL tudis lors de sances prcdentes, proposer et tester une
description du diviseur. Crer un symbole graphique.
Gnrateur pseudo-alatoire
Le programme suivant dcrit un gnrateur 6 bascules. Il utilise une instruction de boucle ; il est
important de comprendre que ce type dinstruction dcrit une redondance de la structure matrielle, il
sagit dune boucle spatiale et non temporelle.
Remarque : le programme suivant utilise linstruction xnor (ou exclusif complment) qui nest
dfinie quen VHDL 93. Au moment de la compilation, il faudra donc vrifier que le VHDL 93 est bien
le
langage
choisi
dans
le
menu

Assingnments / Settings : Analysis & Synthesis Settings / VHDL Input .


---------------------------------------------------------------------------------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
--le paquetage std_logic_1164 de la bibliothque ieee
--permet l'utilisation du type std_logic
entity gene_alea is
port ( HOR
SORTIE_NRZ
end gene_alea;

: in std_logic;
: out std_logic);

architecture arch of gene_alea is


signal X
: std_logic_vector (5 downto 0);
begin
process (HOR)
begin
if HOR'event and HOR='1' then
X(0)<=X(4) xnor X(2);
for i in 0 to 3 loop
X(i+1)<=X(i);
end loop;
Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 7/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

end if;
end process;
SORTIE_NRZ<=X(4);
end arch;
---------------------------------------------------------------------------------------------------------------------------------------Modifier le programme pour obtenir un gnrateur 4 bascules ; tester le fonctionnement.
Crer un symbole graphique.
Modifier de nouveau le programme pour remplacer la boucle par lutilisation de loprateur de
concatnation & ; tester le fonctionnement.
Codeur
Proposer un programme dcrivant le codeur, sans tenir compte dans un premier temps des
impulsions parasites ; tester le fonctionnement.
Crer un symbole graphique.
Proposer maintenant un programme permettant de supprimer les impulsions parasites, bas sur le
mme principe que celui utilis prcdemment ; compiler et vrifier.
Crer un symbole graphique.
Ensemble metteur
Ouvrir une description graphique, la nommer RECEPT_VHDL.bdf et y assembler les symboles des
diffrents lments dcrit prcdemment. Tester le fonctionnement de lensemble. Crer un symbole
graphique

5.2 Rcepteur
Dtecteur de front
Proposer une description VHDL du dtecteur de front et la tester.
Crer un symbole graphique.
Monostable
Le programme suivant dcrit les deux monostables dans le cas o un rapport 64 existerait entre les
frquences de lhorloge de rfrence et celle dmission :
---------------------------------------------------------------------------------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
--les paquetages std_logic_1164 et std_logic_unsigned de la bibliothque ieee
--permettent respectivement l'utilisation du type std_logic et l'addition avec ce type
entity MONO is
port ( FRONT, H
S25
end MONO;

: in std_logic;
: out std_logic);

architecture arch of MONO is


SIGNAL X
: std_logic_vector (5 downto 0);
SIGNAL S75 : std_logic;
Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 8/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

begin
--le front descendant de S75 est plac 75% de la priode
S75 <='1' when X<=47 else '0';
--le front montant de S25 est plac 25% de la priode
S25 <='0' when X<=15 else '1';
process (H, FRONT)
begin
if (H'event and H = '1') then
--autorisation de comptage pendant 75% du temps aprs l'impulsion de front
if S75='1' then X <= X + 1 ;
--inhibition de l'entre de dclenchement pour les impulsions alatoires
elsif FRONT='1' then X <= "000000";
end if;
end if;
end process;
end arch;
---------------------------------------------------------------------------------------------------------------------------------------Modifier le programme pour ladapter notre cas. Tester.
Crer un symbole graphique.
Echantillonneur numrique
Proposer une description VHDL ralisant la fonction dsire. Tester. Crer un symbole graphique.
Ensemble rcepteur
Ouvrir une description graphique et la nommer RECEPT_VHDL.bdf et y assembler les symboles des
diffrents lments du rcepteur. Tester lensemble. Crer un symbole graphique

5.3 Ensemble metteur rcepteur


Ouvrir une description graphique et la nommer EMET_RECEPT_VHDL.bdf et y assembler les
symboles de lmetteur et du rcepteur et tester le fonctionnement.
On remarquera quen cas de simulation temporelle, on se retrouve confront un problme de temps
de propagation des signaux dhorloge, du lasynchronisme de notre conception.

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 9/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

Annexe : exemples de solutions


Synthse par mgafonctions
Lmetteur

Simulation fonctionnelle

Simulation temporelle

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 10/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

Le rcepteur

Simulation de lensemble

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 11/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

Synthse VHDL
Le diviseur

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY div_freq IS
port ( H
S16
END div_freq;

: IN STD_LOGIC;
: OUT STD_LOGIC);

ARCHITECTURE archdiv OF div_freq IS


--pour compter jusqu'a (16 -1) il faut 4 bits
SIGNAL X
: STD_LOGIC_VECTOR (3 downto 0);
BEGIN
PROCESS (H)
BEGIN
--compteur modulo 16
IF (H'EVENT AND H = '1') THEN
IF X >= 15
THEN X <= "0000";
ELSE X <= X + 1 ;
END IF;
END IF;
END PROCESS;
S16<='1' when X>=7 else '0';
END archdiv;

Le gnrateur alatoire

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY gene_alea IS
port ( HOR
SORTIE_NRZ
END gene_alea;

: IN STD_LOGIC;
: OUT STD_LOGIC);

ARCHITECTURE arch OF gene_alea IS


SIGNAL X
: STD_LOGIC_VECTOR (3 downto 0);
BEGIN
PROCESS (HOR)
BEGIN
if HOR'event and HOR='1' then
X(0)<=X(3) XNOR X(2);
for i in 0 to 2 loop
X(i+1)<=X(i);
end loop;
end if;
END PROCESS;
SORTIE_NRZ<=X(3);
END arch;
Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 12/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY alea IS
port ( HOR

: IN STD_LOGIC;
: OUT STD_LOGIC);

SORTIE_NRZ
END alea;

ARCHITECTURE arch OF alea IS


SIGNAL X
: STD_LOGIC_VECTOR (3 downto 0);
BEGIN
PROCESS (HOR)
BEGIN
if HOR'event and HOR='1' then
X<=X(2)&X(1)&X(0)& (X(3)XNOR X(2)) ;
end if;
END PROCESS;
SORTIE_NRZ<=X(3);
END arch;

Le codeur

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY modulateur IS
port ( HOR, DATA_NRZ
S_MOD
END modulateur;

: IN STD_LOGIC;
: OUT STD_LOGIC);

ARCHITECTURE arch OF modulateur IS


begin
S_MOD <= HOR XOR DATA_NRZ;
END arch;

Le dglitcheur

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY deglitch IS
port ( ENTREE_glitch, H
: IN STD_LOGIC;
SORTIE_MANCHEST
: OUT STD_LOGIC);
END deglitch;
ARCHITECTURE arch OF deglitch IS
BEGIN

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 13/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

PROCESS (H)
BEGIN
if H'event and H='1' then
SORTIE_MANCHEST<= ENTREE_GLITCH;
end if;
END PROCESS;
END arch;

Le dtecteur de front

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY detect_front IS
port ( ENTREE_MOD, H
SORTIE_FRONT
END detect_front;

: IN STD_LOGIC;
: OUT STD_LOGIC);

ARCHITECTURE arch OF detect_front IS


SIGNAL X
: STD_LOGIC;
BEGIN
PROCESS (H)
BEGIN
if H'event and H='1' then
X<= ENTREE_MOD;
end if;
END PROCESS;
SORTIE_FRONT<=X XOR ENTREE_MOD;
END arch;

Le monostable

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY MONO IS
port ( FRONT, H
S25
END MONO;

: IN STD_LOGIC;
: OUT STD_LOGIC);

ARCHITECTURE arch OF MONO IS


SIGNAL X
: STD_LOGIC_VECTOR (3 downto 0);
SIGNAL S75 : STD_LOGIC;
BEGIN
--le front descendant de S75 est plac 75% de la priode
S75 <='1' WHEN X<=11 else '0';
--le front montant de S25 est plac 25% de la priode
S25 <='0' WHEN X<=3 else '1';
Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 14/15

initiation au langage VHDL par ltude dun metteur rcepteur Manchester

PROCESS (H, FRONT)


BEGIN
IF (H'EVENT AND H = '1') THEN
--autorisation de comptage pendant 75% du temps aprs l'impulsion de front
IF S75='1' THEN X <= X + 1 ;
--inhibition de l'entre de dclenchement pour les impulsions de "singularit
ELSIF FRONT='1' THEN X <= "0000";
END IF;
END IF;
END PROCESS;
END arch;

Lchantillonneur

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY demod IS
port ( ENTREE_FRONT, ENTREE_manchest
SORTIE_DEMOD
END demod;

: IN STD_LOGIC;
: OUT STD_LOGIC);

ARCHITECTURE arch OF demod IS


BEGIN
PROCESS (ENTREE_FRONT)
BEGIN
if ENTREE_FRONT'event and ENTREE_FRONT='1' then
SORTIE_DEMOD<= ENTREE_manchest;
end if;
END PROCESS;
END arch;

Denis Rabast
IUFM dAix Marseille

programmation des CPLD et FPGA en VHDLavec Quartus II

page 15/15