Vous êtes sur la page 1sur 7

Implémentation d’un UART sur FPGA

pour des Applications en Systèmes Embarqués

H.Bessalah, M.Issad, L.Mahiddine, K.Messaoudi, N.Anane, M.Anane (*)


Centre de Développement des Technologies Avancées CDTA
Cite 20 Août, Baba Hassen Alger, Algérie
(*)
Institut National d’Informatique, Oued Smar, Alger
Fax:+213 21.35.10.39, email : missad@cdta.dz

Résumé -. Dans cet article, nous présentons l’occurrence, le circuit XC2V1000-4FG456C.


l’implémentation sur un circuit FPGA de Xilinx L’utilisation d’un circuit FPGA sur cette carte, en
d’une interface de communication de type RS232 tant que cœur de traitement des données, exige la
qui permet le transfert bidirectionnel de données présence de cet UART qui joue le rôle
avec une application externe. Cet UART d’interface entre le port RS232 et la logique
(Universal Asynchronous Receiver/ Transmitter), interne implémentée sur le circuit FPGA. En
est développé sur la carte de prototypage effet, la carte V2MB1000 [1] est dédiée
V2MB1000 de Memec. originellement à la conception des systèmes on
Les résultats de l’implémentation de cet UART chip (SoC) à base du microprocesseur
ont révélé un débit maximum qui peut atteindre Microblaze [2]. Cependant, l’implémentation de
un débit de 5 Mbps et un taux d’occupation de tels systèmes sur le circuit XC2V1000-4FG456C
1%. Le fonctionnement réel de cet UART a été donne lieu souvent à un taux d’occupation de
vérifié par un test physique. surface plus ou moins élevé. A titre d’exemple, si
l’on désire implémenter sur ce circuit une
Mots clés : UART, Protocole RS232, FPGA, application, le majeur parti de la surface est
Viretx-II. consommé par le système pour les besoins de la
gestion des entrées/sorties de l’application. Ce
I. INTRODUCTION qui est insuffisant pour l’implémentation
d’applications complexes. En conséquence, nous
De nos jours, grâce aux spectaculaires présentons dans cet article, la conception et la
avancées qu’a connu la technologie de réalisation d’un IP1 sous forme d’interface UART
fabrication des circuits intégrés, et notamment destiné à résoudre le problème de l’occupation de
celle des FPGAs, de nombreuses applications surface engendré par l’utilisation du SoC. Un tel
complexes qui relèvent du domaine du traitement UART permet à l’application de gérer ses
de signal numérique ont pu voir le jour. Parmi entrées/sorties avec un processeur ou une
ces dernières, on peut citer : la téléphonie mobile, application externe à moindre coût en terme de
la sécurisation des données, etc. Dans leur ressources, puisque ces dernières ne sont pas
majorité, ces applications sont développées soit à utilisées par le SoC pour l’exécution de cette
base de microcontrôleurs, de microprocesseurs tâche (transfert de données). A titre d’exemple,
ou encore de circuits logiques complexes. une application d’addition de deux opérandes de
Cependant, l’utilisation de ces composants dans 8 bits récupérés à partir d’un ordinateur sur le
un système, quel qu’il soit, exige un protocole de port RS232 en utilisant notre UART consomme
communication. Les protocoles développés à ce seulement 1 % des ressources, alors que la même
jour sont divers et chacun est conçu pour une application, utilisant le processeur Microblaze
application bien définie. A titre d’exemple, les qui gère l’environnement SoC du FPGA, occupe
normes RS232 et I2C sont très recommandées 23 % de la surface du circuit.
pour des applications qui ne nécessitent pas un Cet UART est caractérisé par une indépendance
flot de données important, car ces dernières sont vis-à-vis de la taille des données et du débit de
des normes de type série. transfert, c'est-à-dire, un IP générique et
Dans cet article, on s’intéresse en particulier à la reconfigurable. Des UARTs équivalents ont aussi
norme RS232 en vue d’établir une liaison de été développés par de grands fabricants de
communication pour l’échange des données entre circuits FPGA, en l’occurrence Xilinx [3] et
un processeur externe et la carte de Altera [4].
développement de Memec V2MB1000 qui
comporte un circuit FPGA de Xilinx, en 1
Intellectual Property.
Cet article est organisé comme suit : dans la III. DESCRIPTION DE L’UART
section 2, un bref aperçu sur le protocole de
communication RS232 est donné. En section 3, L’UART est constitué principalement de
nous présentons la description de cet UART. La deux modules, à savoir :
section 4 présente le cycle de conception et les  Un émetteur de données qui reçoit ces
résultats obtenus de l’implémentation. dernières en parallèle et les transmet en série
vers l’extérieur. L’émetteur est souvent
II. LE PROTOCOLE RS232 ET LA LIAISON DE connecté au bus d’une architecture interne.
COMMUNICATION FPGA-DB9  Un récepteur qui n’est autre qu’un
convertisseur série–parallèle.
La liaison RS232 est de type série
L’émetteur et le récepteur partagent une même
asynchrone, c’est à dire qu’elle ne nécessite pas
horloge globale fclk, délivrée par un quartz de la
de signal d’horloge pour la synchronisation de
carte V2MB1000. Par ailleurs, pour atteindre un
deux systèmes en communication [5]. Il est donc
des débits que nous avons cité auparavant et qui
nécessaire que ces derniers soient configurés de
va correspondre aux horloges de transmission et
la même manière. Il est à noter que sur la carte de
de réception, nommées respectivement txclk et
prototypage V2MB1000, seulement trois pins du
rxclk, la fréquence fclk du quartz doit passer par
port série sont utilisés. Les pins en question
deux diviseurs de fréquence.
sont [1]:
Le premier est caractérisé par une constante C ;
 La pin 2 : c’est la pin par laquelle la
celle-ci nous permet de passer de la fréquence
carte envoie des données.
fclk à une fréquence d’une horloge intermédiaire
 La pin 3 : c’est la pin par laquelle la
nommée mxclk. Cette dernière, considérée
carte reçoit des données.
comme étant une horloge globale du système, est
 La pin 5 : masse commune.
introduite dans le but de concevoir un UART
Pour assurer une meilleure synchronisation entre normalisé [1], [2], [6]. Le second diviseur est
les deux systèmes, leurs configurations doivent défini par une autre constante égale à 16. Cette
être identiques. Cette configuration est basée sur: dernière correspond au passage de l’horloge
le débit du transfert, la taille de la donnée et mxclk aux horloges rxclk et txclk. De ce fait,
quelques bits de contrôle. Les débits de l’expression correspondante au débit de l’UART
transmission les plus courants sont : 300, 600, est donnée par la formule suivante [7]:
1200, 4800, 9600,19200, 38400, 57600 et
BR = fclk / (C x 16) bps.
115200 bps (bits par second). Le transfert de
l’extérieur vers la carte ou vice-versa se fait par Pour un débit de 115200 bps et pour une
l’envoi d’un paquet de 5, 6, 7 ou 8 bits en série et fréquence du quartz de 100 Mhz, le calcul de la
auxquels sont rajoutés quelques bits de contrôle. constante C se fait comme suit :
La totalité de ces bits constituent une trame de C = fclk / (BR x 16) = 100 x 106/(115200 x 16) =
donnée. Au repos, la ligne de transmission est 54,253.
mise à l’état haut. Lorsque l’un des deux Celle-ci peut être approximée à C= 54. D’après
systèmes veut commencer à communiquer, il la valeur finale de C, le débit de l’UART ne
prévient l’autre par un premier bit à zéro : c’est le correspond pas directement à la valeur du débit
bit start. Viennent ensuite les bits de données. Un réel, mais avec une certaine erreur. L’influence
second bit de contrôle peut être rajouté, il s’agit de cette erreur sur le temps d’exécution d’une
du bit de parité. Après le bit de parité, suivent un trame peut être décrit comme suit :
ou deux bits stop qui, à travers lesquels, Pour C=54, le débit de l’UART est de :
l’émetteur indique au récepteur que la trame est BR = 100 x 106/ (54 x 16)= 115740,74 bps.
terminée. Dans ce travail, le bit stop est Il en résulte une période de 8,64 µ s. Ainsi, le
représenté avec un seul bit. Un schéma délai d’une trame sera de : 11 bits x 8,64 = 95, 04
significatif d’une trame est montré sur la figure µ s (11 bits correspond à la taille d’une trame
1. avec un bit stop).
De ce fait, le délai des 11 bits associé au débit
réel est : 11 bits x 8,68 = 95, 48 µ s. Soit une
erreur de 0,44 µ s. Cette dernière n’affectera en
aucun cas les 8 bits de données puisque c’est le
Fig.1 : Trame de donnée bit stop qui sera perturbé.
A. Architecture de l’UART : dans le premier registre et d’une unité de
Le schéma synoptique de l’UART développé contrôle.
dans ce travail est montré sur la figure 2. Celui-ci Ce module reçoit en entrée sur l’entrée Rx du
est composé de : premier registre, les données en série et fournit
i -Un module de réception qui fait la conversion ces dernières en parallèle sur le bus Dout. Son
série-parallèle des données provenant du port fonctionnement peut se résumer en les points
RS232. suivants :
ii -Un module de transmission dont la tâche est  Initialisation: ce module est au repos

de réaliser l’opération inverse, c'est-à-dire le quand le signal GRS est à l’état bas.
transfert série vers le port RS232 d’un résultat  Détection du front descendant du bit

issu d’une application en mode parallèle. start.


 Validation du bit start à son milieu
iii -Un diviseur de fréquence, qui assure la
génération de l’horloge mxclk à partir de la après huit tops de l’horloge mxclk et
fréquence fclk. génération de l’horloge rxclk.
 Décalage à droite des bits en entrée.
La description des signaux d’entrées/sorties de  Détection du bit de parité et transfert
cet UART peut se résumer en les points de la donnée en parallèle vers le
suivants : registre rh_registre.
GRS : signal d’initialisation système.  Détection du bit stop, remise du
clk : l’horloge fournie par le quartz. module au mode d’initialisation et
Rx : l’entrée série des données. Ce signal est attente d’un prochain bit start d’une
forcé à ‘1’ quand il n’y a pas de transmission. nouvelle donnée. La transmission
Write : active à l’état bas, utilisé pour valider le interne sur le bus Dout d’une donnée
chargement parallèle d’une donnée dans le est suivie parallèlement par une
module de transmission. impulsion sur la sortie nommé
Din : bus de données, de taille 8 bits. Les rxdone.
données provenant de l’architecture d’une R x
application sont transmises sur ce bus. r s _ r e g
N
i s t r e
8
_ r s r

rxdone : ce signal par son état haut, permet de R e s e t

valider la fin de la réception d’une donnée.

rh_registre
C E D o u t
Dout : bus de données, de taille 8 bits. Ce bus 8
u n i t é d r ex d o n e
transmet les données en mode parallèle vers une c o n t r ô l e
application. m x c lk s t o p _ b it

Tx : signal de transmission série des données vers G S R


R e s e t

la sortie de la carte. Ce signal est forcé à ‘1’


quand il n’y a pas de transmission.
D o u t
Fig.3 : Schéma bloc du module de réception
R x
8
m o d u l e d e r é c e r px td i oo nn e
R e s e t C. Unité de contrôle de la réception :
L’unité de contrôle permet de générer
T x D i n
m o d u l e d e 8 l’horloge rxclk, la validation du transfert de la
w r i t e
R
t r a n s m i s s i o n
e s e t donnée au registre rh_registre et la détection du
bit de parité et du bit stop. La circuiterie interne
c l k
m x c l k
g e n e r a t e u r de cette unité est montrée sur la figure 4. Cette
d e m x c l k dernière est composée de :
G R S
R e s e t Deux compteurs (1 et 2) de quatre bits
chacun, d’un registre de contrôle de taille 9 bits
Fig.2 : Architecture de l’UART et d’un troisième compteur sensible au front
montant de l’horloge mxclk. Le premier
B. Module de réception : compteur assure la détection du milieu du bit
Le schéma bloc de ce module est montré sur start par la génération d’un signal nommé
la figure 3. Ce dernier est constitué d’un registre detection. Ce signal est à l’état bas durant
à entrée série et sortie parallèle sensible au front l’initialisation et passe à l’état haut dès que le
montant de l’horloge rxclk, d’un registre à entrée milieu du bit start est détecté. Le second
et sortie parallèles qui permet de recevoir la compteur permet la génération de l’horloge rxclk
donnée une fois qu’elle est complètement reçue
quand le signal detection bascule vers l’état haut.  Vérification interne du transfert de la
Le registre de contrôle se comporte de la même donnée de l’application vers le module
manière que le registre rs_registre sauf que de transmission.
celui-ci, au repos, est initialisé par la valeur  Génération de l’horloge de transmission
‘011111111’. Ainsi, pendant que le registre txclk.
rs_registre décale les bits de la donnée, le  Chargement interne de la donnée.
registre de contrôle fait décaler des ‘1’ logiques.  Sélection du bit start.
Son rôle réside dans la génération du signal  Décalage à gauche de la donnée et
rxdone qui passe à l’état haut quand le ‘0’ sélection du bit de parité.
logique qui se trouve dans son bit du poids fort  Sélection du bit stop et initialisation
arrive au poids faible. Il est à signaler que ce ’0’ interne.
est synchronisé avec le bit start. La détection en
Le schéma synoptique de ce module est montré
question est effectuée par l’utilisation d’une porte
sur la figure 5. Ce dernier est composé d’une
xor. Le compteur (3) de taille 8 bits permet
unité de chargement, d’une unité de transmission
d’indiquer la présence du bit stop par la
et d’une unité de contrôle qui assure la
génération d’une impulsion. Cette dernière est
synchronisation de ce module.
obtenue sur un signal nommé stop_bit.
La première unité permet d’effectuer le
'1 '
r e g i s t r e d e c o n t ô l e chargement parallèle d’une donnée issue d’une
R e s e t
0 1 1 1 1 1 1 1 1 application. Celle-ci est composée de deux
'1 ' registres parallèles et d’un comparateur. Ces
r x d o n e
registres sont sensibles au front montant de
r x c l k l’horloge mxclk. Le premier reçoit la donnée sur
c o m p t e u c r o1 m p t e u cr 2o m p
s t o p _ b
t e u r 3
i t l’entrée Din du module. Ensuite, cette dernière
R x C E est transférée au second registre au prochain
detectoin

m x c l k front montant de l’horloge mxclk. Le transfert en


G S R R e s e t R e s e t R e s e t
question est effectué dans le but de comparer le
contenu des deux registres pour une éventuelle
Fig.4: L’unité de contrôle de la réception détection des bruits. Ainsi, à chaque fois qu’une
nouvelle donnée se présente sur l’entrée du
D. Module de transmission : module de transmission, une impulsion est
Ce module possède un bus d’entrée Din de générée sur la sortie du comparateur qui est
taille 8 bits, sur lequel le bus de donnée de véhiculée sur un signal nommé txdatardy.
l’application est connecté et une sortie Tx qui La tâche de l’unité de transmission est de
assure la transmission série des données. Le constituer une trame de donnée et sa transmission
module en question exige un certain contrôle de série en sortie. Cette unité est constituée d’un
la part de l’application pour indiquer la présence registre ts_registre à entrée parallèle et sortie
d’un résultat. Pour ce faire, une impulsion doit série et d’un multiplexeur. Ce dernier permet
être générée par cette dernière à chaque fois grâce aux bits de sélection sel (3 :0), générés par
qu’une nouvelle donnée est délivrée sur sa sortie. l’unité de contrôle, d’arranger une trame de
L’impulsion en question est envoyée vers ce donnée. Le registre ts_registre est sensible au
module sur un l’entrée write. Comme pour la front montant de l’horloge txclk. Le chargement
réception, la transmission doit respecter le parallèle de la donnée dans ce registre est
protocole de communication ; c’est à dire, avant commandé par un signal txdone actif à l’état
le transfert de la donnée en série la trame doit haut. Ce signal est généré aussi par l’unité de
commencer par un bit start et se terminer par un contrôle. Ainsi, une fois le chargement de la
bit de parité et un bit stop. donnée dans ce registre est terminé, cette
D’une manière générale, le fonctionnement du dernière sera décalée vers la gauche à chaque
module de transmission peut se résumer en les front montant de l’horloge txclk.
points suivants : N _ t h r
 L’initialisation du module. Celui-ci est 8
unité de chargement

T x
au repos quand le signal write est à l’état u n i t é d e t r a n s m i s s i o n D
8
in
lo a d R e s e t
bas. 4
 Chargement parallèle de la donnée dans
s e l
le transmetteur au front montant du t x c lk u
m x c l k
n i t é d me x c l k
signal write. t x d o n ec o n t r ô l e t x d a t a r d y

R e s e t R e s e t
w r it e
G R S
IV. CYCLE DE CONCEPTION ET RÉSULTATS
D’IMPLÉMENTATION

L’UART développé dans ce travail a été


Fig.5: Schéma bloc du module de la transmission. conçu d’une manière générique et paramétrable
afin qu’il soit réutilisable. Cette option a été
E. Unité de contrôle de la transmission : rendue possible grâce à l’utilisation du langage
Cette unité assure la génération de l’horloge VHDL qui offre l’avantage de la description
de transmission txclk, la synchronisation de la hardware. L’utilisation et l’exploitation du FPGA
trame et la sélection des bits qui la constituent. nécessitent un ensemble d’outils pour générer le
En effet, les tâches en question sont effectuées fichier de configuration (le bitstream).
séparément par deux compteurs différents (1) et Cependant, avant de parvenir à ce dernier, toute
(2). Cette unité reçoit sur ses entrées le signal implémentation sur ce type de circuit nécessite le
Write, dont la tâche est l’initialisation des deux passage par un flot de conception complet. Ce
compteurs, et l’horloge mxclk. flot qui est montré sur la figure 7 incluant : la
Le schéma synoptique de cette unité est montré description de l’architecture, la synthèse, le
sur la figure 6. placement et routage et un ensemble de
t x c l k simulations.

s e l ( 3 : 0 )
compteur

compteur

4
(2)

(1)

t x d o n e m x c l k

R e s e t
w r i t e

Fig.6 : L’unité de contrôle de la transmission

Son fonctionnement peut être décrit comme suit :


Quand le signal Write est à l’état bas, cette unité
est mise au repos. Au front montant de ce signal, Fig.7 : Flot de conception sur FPGA
le premier compteur devient actif et entame la
génération de l’horloge txclk (txclk= 16 mxclk). L‘application de ce flot sur cet UART peut
Le second compteur, quant à lui, est sensible au être décrite comme suit : après une description
front montant de l’horloge txclk. Donc, grâce à comportementale en VHDL de chaque unité et
ses sorties sel(3 :0), le bit start, la donnée, le bit module, une synthèse est exécutée sur
de parité et le bit stop seront sélectionnés l’architecture globale. Cette étape n’est autre
respectivement en série sur le signal Tx. La qu’une transformation de l’UART pour chaque
sélection des bits d’une trame en fonction des cycle d’horloge en un ensemble d’équations
sorties du compteur (2) est montrée sur le tableau booléennes. On parle ainsi du niveau RTL
1. (Register Transfert Level). Le résultat obtenu de
la synthèse sous forme d’une netlist est optimisé
Tab.1 : Table de vérité de la sélection des bits d’une trame et transformé en une autre netlist de blocs
Sel (3:0) Tx = bit sélectionné logiques qui sera placée/routée sur le circuit
0000 Bit stop utilisé : le XC2V1000-4FG456C.
0001 Bit start Par ailleurs, vu l’emplacement précis de quelques
0010 D(0)
signaux d’entrée/sortie, en l’occurrence le reset
0011 D(1)
0100 D(2) système, l’horloge et les signaux de
0101 D(3) communication Tx et Rx, nous avons défini un
0110 D(4) fichier de contrainte (*.ucf) qui porte leurs
0111 D(5) emplacements conformément au datasheet de la
1000 D(6) carte V2MB1000 [1].
1001 D(7) Le développement de cet UART suivant ce flot
1010 Bit de parité de conception a été réalisé sur l’environnement
ISE 7.1i de Xilinx. Ce dernier inclut l’outil XST
qui permet d’effectuer la synthèse, le placement
et le routage de l’architecture globale. Les
résultats concernant les surfaces occupées en Fig.9 : Simulation temporelle de l’UART
terme de slices de cette implémentation sont
donnés dans le tableau 2. Un test physique de notre UART a été effectué
Le layout de notre UART sur le circuit concernant le fonctionnement réel. C'est-à-dire
XC2V1000-4FG 456C est montrée sur la figure après l’avoir chargé sur carte. Ce test a donné des
8. résultats satisfaisants. L’application qui a servi
pour effectuer ce test est une addition modulaire
Tab.2 : Surface occupée qui consiste à additionner deux opérandes de 64
Nombre de slices Taux d’occupation bits. Ces opérandes sont récupérés d’un PC
Récepteu 33 1% externe via l’UART développé.
r
Emetteur 28 1%
UART 62 1% V. CONCLUSION

Dans cet article, nous avons présenté un


UART dédié à l’acquisition des données en
temps réel entre le port RS232 d’un ordinateur et
le circuit FPGA XC2V1000-4FG456C de la carte
V2MB1000. L’architecture développée et son
implémentation sur le circuit FPGA ont été
détaillées. Nous avons aussi présenté toute la
méthodologie utilisée pour l’implémentation de
ce composant et les différents résultats obtenus.
Afin de vérifier son fonctionnement, notre
UART été validé par des simulations
Fig.8: Layout de l’UART sur FPGA
fonctionnelles et temporelles et par un test
physique. En terme de performance, l’analyse
A la fin de l’implémentation, une analyse temporelle a révélé que notre UART peut
temporelle a été effectuée afin de déterminer les fonctionner avec une fréquence maximum de 5
performances temporelles de cet UART. A cet Mhz. L’application pour laquelle cet IP a été
effet, l’outil timing analyser a révélé une horloge développé est un système embarqué
mxclk d’utilisation minimum qui est de 11 ns. Ce d’authentification qui nécessite un transfert de
qui correspond à une fréquence fmxclk= 90 Mhz. données sécurisé, sur un port RS232, d’une carte
De ce fait, le débit maximum que peut atteindre à puce vers la carte V2MB1000 via un PC
cet UART est limité à 5 Mbps. Pour compléter ce embarqué. L’application associée à ce module
flot de conception, le fonctionnement correct de sur le circuit FPGA, renvoie des données de
cet UART a été validé par des simulations à calcul (cryptage, arithmétique modulaire) à
différents niveaux d’abstraction. Cette opération travers cet IP vers l’ordinateur externe.
a été effectuée à partir d’un fichier de test que
l’on nommera test-bench et a été réalisée par BIBLIOGRAPHIE
l’utilisation de l’outil de simulation Modelsim PE
6.0. Les résultats de simulation temporelle sont [1] “Virtex-II, V2MB1000 Development board
montrés sur la figure 9. user guide”, Memec Design, Version 3.0,
December 2002.
s t a r t _ b i t d e s l at a r t _ b i t d e
t r a m e r e ç u et r a m e r e ç u e
l a
[2] Embedded magazine, “Configure and Build
m x c l k
the Embedded Nucleus PLUS RTOS Using
R x
Xilinx EDK” P 27-28. March 2005.
G R S
[3] Xilinx Application Note: CoolRunner CPLD,
r x d o n e “IrDA and UART Design in a CoolRunner
w r i t e CPLD” ,XAPP345 (v1.3), December 23, 2003.
T x [4] Altera, “UART Core”, Quartus II Handbook,
t x c l k Volume 5, October 2007.
[5]Http://www.tavernier-c.com/serie.htm.

s t a r t _ b i t d e s lt aa r t _ b i t d e l a
t r a m e t r a n s t mr a i me e t r a n s m i e
[6] Thomas Oelsner, QAN20 “Digital UART
Design in HDL”, Quick Logic Europe.
[7] M.Delvai, U.Eisenmann, W.Elmenreich
“Intelligent UART Module for Real-Time
Applications”, First Workshop on Intelligent
Solutions in Embedded Systeme (WISES),
Vienna University of Technology, Austria, June
2003.