Vous êtes sur la page 1sur 16

G R O U P E

Rapport TP VHDL

Mise en uvre dune
UART


I4SE-AE2


Avril 2005

Charles
Sbastien



I4SE-AE2 Rapport de VHDL Avril 2005
2





CmmMlMG


Introduction ................................................................................................................................ 3
I. Ralisation du module TX.................................................................................................... 3
A. Le protocole.................................................................................................................... 3
B. Les Compteurs................................................................................................................ 4
1. Le compteur modulo 325 ........................................................................................... 4
2. Le compteur modulo 16 ............................................................................................. 5
3. Le compteur de bit...................................................................................................... 6
C. Le module Dcalage....................................................................................................... 6
D. La partie Contrle........................................................................................................... 7
E. Regroupement ................................................................................................................ 9
F. Simulation ...................................................................................................................... 9
1. Le fichier TestBench .................................................................................................. 9
2. Lexcution gnrale ................................................................................................ 10
G. Lexcution relle......................................................................................................... 10
II. Envoie dun message prenregistr.................................................................................... 12
A. La mmoire ROM........................................................................................................ 12
B. Lincrmenteur dadresse............................................................................................. 12
III. Mise en uvre de lIP UART ............................................................................................ 14
Conclusion................................................................................................................................ 15


I4SE-AE2 Rapport de VHDL Avril 2005
3

MMPPCM7 LG 7P LlLL

mlG GM CGLLMG LLMG LMM7


Introduction

Lobjectif de ce TP est de raliser une liaison srie sur un FPGA. Egalement appele UART
(Universal Asynchronous Receiver/Transmitter), cette liaison srie est capable denvoyer une
donne parallle bit par bit sur un bus. Elle est compose de deux modules principaux : le
module mission TX et le module rception RX.

I. Ralisation du module TX
A. Le protocole

Le module TX permet de transmettre une donne sur 8 bits sur la liaison srie suivant un
protocole impos. Une trame srie est compose dun bit de start, un bit de stop, un bit de
parit et des bits de donnes. Le bit de parit permet deffectuer un contrle sur la donne
reue. Dans notre cas, nous ne lutiliserons pas. Lorsque aucune donne nest envoye, le bus
reste ltat haut.

Trame srie

La vitesse de transmission est de 9600 bauds (bits par secondes) pour une horloge du FPGA
de 50 Mhz.
Chaque bit prend donc 104 s pour tre transmit. La frquence de lhorloge tant de 50 Mhz,
la priode de lhorloge est de 20 ns, ce qui implique quil faut 5200 tops dhorloge pour
transmettre un bit. On utilisera pour cela deux compteurs : un compteur modulo 16 et un
compteur modulo 325. On obtient ainsi un compteur global de 16*325 = 5200. Une machine
dtat contrle le transfert en grant les diffrents modules, dont le module de dcalage qui
permet de transformer linformation parallle en information srie.

START D0 D1 D2 D3 D4 D5 D6 D7 STOP
I4SE-AE2 Rapport de VHDL Avril 2005
4

Schma global du FPGA

Les trois entits prsentes seront ensuite introduites dans un fichier global qui contiendra les
entits ainsi que les branchements entre les entits

B. Les Compteurs

Le module Compteurs est compos de 3 parties :
1 compteur modulo 16
1 compteur modulo 325
1 compteur modulo 10

1. Le compteur modulo 325

Voici le schma RTL du compteur :



Compteur module 325

Reg_div est une variable du compteur de type natural qui sincrmente chaque front
montant de lhorloge. Arriv 324, le compteur envoie un signal top_325 au compteur
modulo 16 pour lincrmenter et se remet zro grce un multiplexeur.



I4SE-AE2 Rapport de VHDL Avril 2005
5
Code :

-- Diviseur d'horloge (/325)
process(h,raz) is
variable reg_div : natural range 0 to 324;
begin
if raz = '1' then reg_div := 0;
elsif rising_edge(h) then
if reg_div = 324 then reg_div := 0; top_325 <= '1';
else reg_div := reg_div + 1; top_325 <= '0';
end if;
end if;
end process;

2. Le compteur modulo 16

Trs semblable au compteur prcdent, ce compteur sincrmente lorsque le signal top_325
est 1. Arriv 15, le processus envoie le signal fin_bit_tmp au compteur modulo 10 ainsi
qu la machine dtat du systme. Comme cette dernire ne fait pas partie de la mme entit,
il faut utiliser un signal interne fin_bit_tmp diffrent de la sortie fin_bit.


Compteur modulo 16

Pour brancher le signal sur la sortie, on utilise une instruction concurrente du process :
fin_bit<=fin_bit_tmp;

Code :

-- Diviseur de diviseur d'horloge (/16)
process(h,raz) is
variable reg_div_16 : natural range 0 to 15;
begin
if raz = '1' then reg_div_16 := 0;
elsif rising_edge(h) then
if top_325 = '1' then
if reg_div_16 = 15 then reg_div_16 := 0; fin_bit_tmp <=
'1';
else reg_div_16 := reg_div_16 + 1; fin_bit_tmp <= '0';
end if;
else reg_div_16 := reg_div_16; fin_bit_tmp <= '0';
end if;
end if;
end process;

fin_bit<=fin_bit_tmp;
I4SE-AE2 Rapport de VHDL Avril 2005
6
3. Le compteur de bit

Contrairement aux compteurs prcdents, ce compteur possde une remise zro synchrone
contrle par la machine dtat du systme via le signal rst_cpt_bit. Lorsque rst_cpt_bit est
ltat bas, le compteur sincrmente lorsque fin_bit_tmp est gal 1.


Compteur de trame

Code :

-- Compte le nombre de bit's
process(h,raz) is
variable cpt_bit : natural range 0 to 10;
begin
if raz = '1' then cpt_bit := 0;
elsif rising_edge(h) then
if rst_cpt_bit = '1' then
cpt_bit := 0;
elsif fin_bit_tmp = '1' then
if cpt_bit = 9 then cpt_bit := 0; fin_transmit <= '1';
else cpt_bit := cpt_bit + 1; fin_transmit <= '0';
end if;
else cpt_bit := cpt_bit; fin_transmit <= '0';
end if;
end if;
end process;
C. Le module Dcalage

Lentit Dcalage permet deffectuer 4 actions sur la donne en fonction du signal de
commande cmd envoye par la partie contrle du systme.


Cmd Action
00 Dcalage du registre de sortie
01 Mmorisation de la valeur sur la sortie
10 Chargement de la donne entrante
11 Remise un du registre
Tableau des commandes

La donne parallle a envoyer se trouve sur le bus din compos de 8 bits. Pour pouvoir
mettre une premire valeur, il faut en premier lieu charger la valeur de din en rajoutant les
bits de Start et de Stop propres la liaison srie dans un registre que nous appellerons reg. La
valeur de sortie sera le bit 0 du registre. Comme la valeur doit rester sur le fil pendant un
I4SE-AE2 Rapport de VHDL Avril 2005
7
temps dpendant de la vitesse de communication, une mmorisation est effectue lorsque la
commande cmd est 01.



Module Dcalage


Code du process:

--Decalage
process (h,raz) is
begin
if raz = '1' then reg <= (others => '1');
elsif rising_edge(h) then
case cmd is
when "00" => reg <= '1'& reg(9 downto 1); -- Decalage
when "10" => reg <= '1'& din & '0'; -- Formatage -> Bits
de Start et de Stop
when "01" => reg <= reg; -- Ne fait rien. -> Continu la
transmission
when "11" => reg <= (others => '1');
when others => reg <= (others => '1');
end case;
end if;
end process;

D. La partie Contrle

La partie contrle seffectue grce une machine dtats. Voici son diagramme :


I4SE-AE2 Rapport de VHDL Avril 2005
8


Machine dtats

Attente : Durant cet tat, la sortie sout est ltat haut. Le module attend le signal
go pour passer ltat suivant
Attd_bit : Cet tat effectue un reset du compteur de bit modulo 10. Le module
attend ensuite que le compteur modulo 16 soit revenu zro (indiqu par le signal
fin_bit) pour passer ltat suivant et pour librer le compteur.
Chargement : Une fois le systme prt, lentit dcalage charge la valeur de la
donne parallle din dans le registre reg grce la commande cmd 10. Une fois
la valeur charge, la machine dtat rentre dans une boucle jusqu' ce que les 10
bits de linformation soient transmis.
Mmorisation : Ltat attend que la valeur mise sur sout soit finie de transmettre.
Ceci est indiqu par le signal fin_bit.
Dcalage : Le dcalage de la donne parallle est effectu grce la commande
00. Si tous les bits sont transmis, la machine dtat retourne dans ltat Attente
sinon, elle recommence la boucle Mmorisation/Dcalage.

A la fin de lexcution, la machine dtat fait un dernier dcalage avant de retourner dans
ltat attente. Cependant, ce dcalage ne gnre aucune erreur sur le signal de sortie car ce
niveau tous les bits de reg sont 1.
On observe sur le chronogramme de simulation suivant le passage de ltat decal ltat
attente.

I4SE-AE2 Rapport de VHDL Avril 2005
9

Chronogramme de simulation

E. Regroupement

Pour regrouper les diffrentes entits ainsi cres, il suffit dajouter un nouveau fichier VHDL
dans le projet et de les dclarer lintrieur de larchitecture selon la syntaxe.
Par exemple, pour insrer la machine dtat :

PC : entity work.StateMachine
port map(
--IN
h => h, -- horloge
raz => raz, -- RAZ actif haut
go => go, -- Demande Debut de transmission
fin_bit => fin_bit, -- Indique la fin d'un bit
fin_transmit => fin_transmit, -- Indique la fin de la transmission
totale

--OUT
cmd => cmd, -- Selectionne le mode de fonctionnement
rst_cpt_bit => rst_cpt_bit); -- remet le compteur de bits a ZERO);

Pour faire la liaison entre les entits, il est ncessaire de crer des signaux intermdiaires.

signal fin_bit,fin_transmit,rst_cpt_bit : std_logic;
signal cmd : std_logic_vector(1 downto 0);

F. Simulation

1. Le fichier TestBench

Pour effectuer une simulation du code VHDL, il faut crire un fichier de type test bench qui
permet de simuler une activit extrieure au module de transmission.
Le test bench est en fait une entit dans laquelle est inclus le module TX. On gnre ensuite
les signaux raz et h, puis les entres din et go.



I4SE-AE2 Rapport de VHDL Avril 2005
10
2. Lexcution gnrale

Lexcution de la simulation donne ce chronogramme. Avec une valeur pour din de 01100010
et aprs avoir fait un crneau avec le signal go, on obtient sur sout les valeurs attendues.



Le module semble donc tre correcte. En observant lensemble des signaux du systme, on
peut contrler le droulement de la machine dtat ainsi celui des compteur. Il y a bien 10
mmorisations de la valeur, ce qui signifie quil y a bien eu 10 dcalages. Une fois termin, le
systme retourne bien dans ltat attente.



En zoomant sur le dmarrage, on saperoit que tous les signaux sont dfinit ds le premier
front montant de lhorloge. Le systme dmarre bien dans ltat initial voulu. Le raz na pas
daction visible, mais il remet notamment zro tous les compteurs.



G. Lexcution relle

Avant deffectuer la programmation, il faut tablir un fichier de contraintes qui permet de
relier chaque signal dentre/sortie avec une broche du FPGA. Ainsi, la donne din sera relie
I4SE-AE2 Rapport de VHDL Avril 2005
11
aux switchs de la carte dexprimentation et deux autres boutons serviront faire le raz ainsi
que le go.


Dfinition des pattes du composant

Lexcution observe correspond bien aux attentes. En ouvrant le logiciel HyperTerminal,
on peut observer les donnes reus par le port srie de lordinateur. A chaque fois que le
bouton go est appuy, le logiciel reoit un ensemble de caractres. Cet ensemble correspond
au nombre de fois que la donne est envoye par le FPGA. Comme nous neffectuons pas de
dtection de front, la boucle de la machine dtat a le temps de sexcuter plusieurs fois
pendant que le bouton reste appuy.


Rception srie sous HyperTerminal

I4SE-AE2 Rapport de VHDL Avril 2005
12
II. Envoie dun message prenregistr

Lobjectif de cet exercice est de mettre en uvre le programme dvelopp prcdemment
pour quil envoie un message prenregistr dans une mmoire ROM. Lenvoie du message est
dclench par le bouton go.

A. La mmoire ROM

Pour crer une zone mmoire dans le FPGA, il est possible de crer un tableau de valeurs.
Voici un exemple de mmoire compos de 16 valeurs de 8 bits :

type tableau is array (0 to 15) of std_logic_vector(7 downto 0);

Les valeurs sont ensuite dfinit dans un tableau de constante.

constant rom:tableau :=
(X"48",X"41",X"50",X"50",X"59",X"20",X"4E",X"45",X"57",X"20",X"59",X"45",X"
41",X"52",X"20",X"20");

rom possde ladresse dbut du tableau et rom(integer var) pointe vers lindex var du tableau.

Ainsi, lorsque lon fait :

din <= rom(to_integer(unsigned(adr)));

La valeur du tableau lindex adr est mise sur le bus din.

B. Lincrmenteur dadresse

Pour effectuer lenvoie du message, il faut incrmenter la valeur de lindex du tableau aprs
chaque envoi. Il faut donc insrer un compteur qui sincrmente chaque fois que le signal
fin_transmit est ltat haut.

Code du compteur :
--Incremente l'adresse
process (h,raz) is
begin
if raz = '1' then adr <= (others => '0');
elsif rising_edge(h) then
if fin_transmit = '1' then adr <=
std_logic_vector(unsigned(adr)+1);
else adr <= adr;
end if;
end if;
end process;

Le signal adr contient lindex du tableau. Comme ce dernier ne contient que 16 valeurs, adr
na besoin que de 4 bits. Le retour zro se fait automatiquement car adr est un
std_logic_vector.
I4SE-AE2 Rapport de VHDL Avril 2005
13
On transforme ensuite la valeur du tableau pour la mettre sur le bus din. Contrairement
larchitecture prcdente, din nest plus un port dentre, mais un signal interne qui entre
directement dans lentit de dcalage.


Schma global de larchitecture

En simulation, on observe le comportement thorique de larchitecture, c'est--dire lenvoi en
continu de valeurs sur sout, tant que go est ltat haut.


Simulation

Lorsque go retombe ltat bas, loctet qui tait en train dtre transmis se termine et lenvoi
sarrte comme on peut le voir sur la simulation suivante.

Simulation
I4SE-AE2 Rapport de VHDL Avril 2005
14
III. Mise en uvre de lIP UART

Lobjectif de cet exercice est dutiliser une application dj faite : une IP (Intellectual
Property). LIP propose ralise les modules RX et TX dune liaison srie. Nous allons donc
lutiliser pour effectuer un affichage de la valeur des switchs de la carte dexprimentation sur
lordinateur en utilisant la partie TX ainsi qu dafficher sur les leds, la valeur que lon envoie
sur la carte partir du logiciel HyperTerminal du PC.

Lintrt dutiliser une IP est multiple. Premirement, elle permet de gagner du temps car il
existe des IPs trs complexes, payantes ou gratuites et deuximement, elles garantissent une
certaines fiabilit ainsi quune trs bonne portabilit par rapport un code dvelopp
personnellement. Cependant, il est plus difficile doptimiser une IP car certains modules
internes peuvent tre inutile pour lapplication dvelopper.

LIP UART possde un ensemble de paramtres gnriques qui permettent de dfinir la
vitesse de transmission ainsi que la prsence de bits de stop, de parit ou autres.

Voici le schma de larchitecture ralise.

Schma global de larchitecture avec IP

Pour cela il suffit dinsrer lentit de lIP dans larchitecture de notre projet puis de brancher
les entres et les sorties aux ports correspondants.

Lorsque lon simule larchitecture avec une rception et une mission, lmission seffectue
correctement mais, par contre, pendant la rception, la sortie leds nest pas stable. La fin de la
rception est indique par un crneau du signal update. Pour avoir une sortie stable il faut
donc rajouter un tat squentiel qui mmorise la valeur lorsque update passe 1.
I4SE-AE2 Rapport de VHDL Avril 2005
15

Simulation avec leds instables

Cependant, la vitesse de changement des valeurs est tellement rapide que, pour des leds,
lutilisateur ne voit pas la phase dinstabilit.


Etage de mmorisation de dout -> leds

Sur le chronogramme suivant, on peut voir que la sortie leds prend sa valeur quand update
passe ltat haut.


Simulation avec leds stables


Conclusion

Ce TP nous a permis de mettre en uvre les connaissances acquises en VHDL depuis la
deuxime anne de lESIEE. Nous avons ralis un module de transmission UART de
manire peu modulaire, mais correspondant au cahier des charges impos. Lutilisation dune
IP nous a appris utiliser un code que nous navons pas programm et limplanter dans une
architecture en se referant la documentation et lobservation de lexcution.
I4SE-AE2 Rapport de VHDL Avril 2005
16










ANNEXES






Code de :

Entit Principale du module TX avec switchs
Entit Compteurs
Entit Dcalage
Entit Machine dtats
Entit Principale du module TX avec ROM
Entit Principale du module avec IP UART
Test Bench de lentit principale du module avec IP UART

Vous aimerez peut-être aussi