summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd/portserie/portserie.tex
blob: f2be82caca07cb6998c0ed55402186ff8aad3917 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
\subsection{Le TXserie}
\subsubsection{Cahier des charges}
Le cahier des charges du transmetteur s�rie est le suivant :

\begin{itemize}
\item Transmission s�rie 8 bits, 1 start, 2 stop
\item Vitesse : param�trable 9600 et 115200 bauds 
\item Fifo de stockage avant transmision
\item Interruption activable signalant que la pile est pleine
\end{itemize}


\subsubsection{Sch�ma-bloc}

\begin{figure}[htbp]
\caption{Sch�ma-bloc du TXserie}
\includegraphics[width=\textwidth]{./portserie/images/txserie.pdf}
\label{schematxserie}
\end{figure}

Le sch�ma modulaire est visible sur la figure \ref{schematxserie} page \pageref{schematxserie}.

\subsubsection{Description des modules}
\label{descriptmodules}

\paragraph{La fifo}

C'est une fifo g�n�r�e avec coregen. Elle contient des mots de 8 bits en
m�moire distribu�e (car les BRAMs du FPGA seront utilis�s � d'autres fins).

Elle poss�de une entr�e avec son horloge ckin, une sortie avec son horloge
ckout, et un pannel de flags en sortie.

L'entr�e ckin est la combinaison du csData et de la clock du bus. Ainsi, d�s
qu'on �crit � son adresse m�moire, la fifo charge la donn�e pr�sente sur le
bus.


\paragraph{Le TXcever}

C'est un transmetteur s�rie qui re�oit en entr�e les donn�es provenant de la
fifo. D�s qu'il est vide, il agit sur le signal ckout de la fifo, ce qui
d�pile un �l�ment, et le charge dans le transmetteur, qui peut alors le
transmettre.

\paragraph{Le g�n�rateur de clock}

C'est un pr�diviseur de la fr�quence d'horloge du fpga. Il a pour but de
fournir l'horloge de r�f�rence pour le transmetteur (�gale � 16 fois le
baudrate).

Il est param�trable, pour pouvoir choisir la fr�quence utilis�e parmis les 4
baudrates disponibles.

Pour avoir la bonne fr�quence en sortie, on doit avoir en entr�e une fr�quence
multiple de 16 fois 115200 (le baudrate maxi), soit 1,8432MHz.
Le quartz utilis� pour la r�f�rence de vitesse est un 24MHz. On le divise par
13, pour obtenir 1,8462MHz, ce qui fait une erreur de 0.16\%, parfaitement
acceptable sur une liaison s�rie RS232.

\paragraph{Registre config}

C'est un registre de 8 bits branch� sur le bus, en lecture/�criture, dans
lequel le PC vient d�poser les bits de configuration du port s�rie.
La sortie du registre controle le g�n�rateur de clock (pour fixer le
baudrate), et le gestionaire d'IRQ.

\paragraph{Registre flag}

C'est un registre de 8 bits branch� sur le bus en lecture seule dans lequel le
PC vient lire l'�tat des flags de la fifo. Son entr�e est branch�e sur les
sorties flag de la fifo.

\paragraph{IRQ}

Le gestionaire d'IRQ est tout simplement un activateur d'interruptions. Il
d�clenche des IRQ sur front montant, et ceci � condition que le signal IntEn
soit activ�.


\subsubsection{Fonctionnalit�s et utilisation}
Ce port s�rie utilise 3 registres : TxData, Flag, et Config

\paragraph{Txdata} 
Ce registre 8 bits sert � recevoir les donn�es � envoyer. On les �crit
s�quentiellement, et chaque �criture dans ce registre empile la donn�e en haut
de la fifo.

\paragraph{Flag}
C'est le registre d'�tat. il donne essentiellement des informations sur l'�tat
de remplissage de la pile de transmision.

Structure :
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0
\\ \hline
nom & x & x & x & x & Empty & Full/Int & FLI1 & FLI0
\\ \hline
\end{tabular}

\begin{description}
\item [FL1/FL0] : Fifo Level 1/0. Ces bits donnent le niveau de remplissage de
la fifo.
\begin{center}
	\begin{tabular}{|c|c|c|}
	\hline
	FL1/FL0	& Tx de remplissage
	\\ \hline
	00	& < 25\%
	\\ \hline
	01	& 25\% < Tx < 50\%
	\\ \hline
	10	& 20\% < Tx < 75\%
	\\ \hline
	11	& 75\% < Tx
	\\ \hline
	\end{tabular}
\end{center}
\item  [Full/Int] : indique que la pile est pleine, ce qui d�clenche une
interruption
\item [Empty] : indique que la pile ET le transmetteur sont vides, que la
transmission est donc termin�e.
\end{description}

\paragraph{Config}
Ce registre sert de configuration pour la transmission.

Structure :
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0
\\ \hline
nom & x & x & x & On/Off & Purge & IntEn & BdR1 & BdR0
\\ \hline
\end{tabular}

\begin{description}
\item [BdR1/BdR0] : BaudRate1/0. Ces bits param�trent la vitesse de
transmission. \\
\begin{center}
	\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
	\hline
	BdR1/BdR0	& Vitessse
	\\ \hline
	00		& 9600
	\\ \hline
	00		& 9600
	\\ \hline
	01		& 19200
	\\ \hline
	10		& 57600
	\\ \hline
	11		& 115200
	\\ \hline
	\end{tabular}
\end{center}
\item [Int/En] : active ou non l'interruption de fifo pleine
\item [Purge] : vide la fifo de toutes ses donn�es
\item [On/Off] : active ou non la transmission
\end{description}

\subsubsection{Proc�dure d'utilisation}
Pour utiliser ce port s�rie, on doit pouvoir effectuer les actions suivantes :

\begin{itemize}
\item Mettre le bit On/Off � 1 pour activer la transmission
\item Param�trer la vitesse � l'aide des bits BdR1/0
\item Il est conseill� d'activer l'interruption de fifo pleine en mettant � 1
le bit IntEn.
\item Ecriture dans txdata pour charger les donn�es dans la fifo. Elles sont
alors automatiquement transf�r�es, au plus t�t. D�s que le registre � d�calage
est vide, il d�pile le dernier �l�ment de la fifo et le transmet � nouveau.
\item On peut lire en permanence l'�tat de la fifo gr�ce aux bits FL1/0.
\item Quand la fifo est pleine, le flag Full/Int passe � 1, et le front
montant de ce bit g�n�re une interruption.
\item Il est possible de vider la fifo en mettant Purge � 1. Il faut le
remettre � 0 pour qu'il puisse �tre � nouveau actif, car la purge de la fifo
ne s'effectue que sur front montant de ce bit.
\end{itemize}


\subsubsection{Interfacage vhdl}

Voici le code vhdl de l'entit� txserie :
\begin{verbatim}
entity txserie is
generic(adr : integer);
constant adr_w : integer :=10;
port(
    databus: 	inout std_logic_vector(7 downto 0);
    rw:		in std_logic;
    busck:	in std_logic;
    rst:	in std_logic;
    masterck:	in std_logic;
    txout:	out std_logic;
    intout:	out std_logic;
    csData:	in std_logic;
    csFlag:	in std_logic;
    csConfig:	in std_logic;
    );
end txserie;
\end{verbatim}

Voici une description de ces signaux :

\begin{description}
\item [databus] : bus de donn�es
\item [rw] : ligne Read/Write\_
\item [busck] : horloge bus
\item [rst] : patte de reset
\item [masterck] : horloge g�n�rale du fpga
\item [txout] : patte de sortie s�rie
\item [intout] : sortie d'interruption
\item [csData] : chip select du registre de data
\item [csFlag] : chip select du registre de flag
\item [csConfig] : chip select du registre de configuration
\end{description}





% Deuxi�me partie : le RXserie

\subsection{Le RXserie}
\subsubsection{Cahier des charges}
Le cahier des charges du r�cepteur s�rie est le suivant :

\begin{itemize}
\item R�ception s�rie 8 bits, 1 start, 2 stop
\item Vitesse : param�trable 9600 et 115200 bauds 
\item Fifo de stockage des donn�es re�ues
\item Interruption activable signalant que la fifo est pleine
\item Interruption activable signalant qu'on a re�u une donn�e
\end{itemize}


\subsubsection{Sch�ma-bloc}

Le sch�ma modulaire est visible sur la figure \ref{schemarxserie} page \pageref{schemarxserie}.

\begin{figure}[htbp]
\caption{Sch�ma-bloc du RXserie}
\includegraphics[width=\textwidth]{./portserie/images/rxserie.pdf}
\label{schemarxserie}
\end{figure}


\subsubsection{Description des modules}
\paragraph{Le RXcever}

C'est un r�cepteur s�rie qui pr�sente ses donn�es � l'entr�e de la fifo
D�s qu'il a re�u un octet, il agit sur le signal fifockin de la fifo
ce qui empile l'octet re�u.

\paragraph{Autres modules}

Les autres modules utilis�s sont les m�mes que pour le transmetteur. Voir
chapitre \ref{descriptmodules}.


\subsubsection{Fonctionnalit�s et utilisation}
Ce port s�rie utilise 3 adresses m�moire :
\paragraph{Rxdata} 
Ce registre 8 bits permet de r�cup�rer les donn�es re�ues. On les lit
s�quentiellement, et chaque lecture dans ce registre d�pile la donn�e en bas
de la fifo.

\paragraph{Flag}
C'est le registre d'�tat. Il donne essentiellement des informations sur l'�tat
de remplissage de la pile de r�ception.

Structure :
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
bit & 7 & 6 & 5 & 4 & 3   & 2     & 1    & 0   \\
\hline
nom & x & x & x & ORErr & DR & FFull &  FL1 & FL0 \\
\hline
\end{tabular}

\begin{description}
\item [FL1/FL0] : Fifo Level 1/0. Ces bits donnent le niveau de remplissage de
la fifo. \\
\begin{center}
    \begin{tabular}{|c|c|c|}
	\hline
    FL1/FL0	& Tx de remplissage
    \\ \hline
    00	& < 25\% 
    \\ \hline
    01	& 25\% < Tx < 50\% 
    \\ \hline
    10	& 20\% < Tx < 75\% 
    \\ \hline
    11	& 75\% < Tx
    \\ \hline
    \end{tabular}
\end{center}
\item  [FFull] : indique que la pile est pleine. Chaque front montant de ce
bit d�clenche l'interruption FifoFullInt
\item [DR] : DataReady. Indique que la fifo n'est plus vide, et donc qu'une
donn�e est arriv�e dans le r�cepteur. Chaque front montant de ce bit d�clenche
l'interruption DRInt
\item  [ORErr] : indique qu'il y a eu un overrun sur la r�ception, c'est � dire
que le bit de stop n'a pas �t� re�u correctement.

\end{description}

\paragraph{Config}
Ce registre sert de configuration pour la transmission.

Structure
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0
\\ \hline
nom & x & x & OErrIE & On/Off & DRIE & FFIE  & BdR1 & BdR0
\\ \hline
\end{tabular}

\begin{description}
\item [BdR1/BdR0] : BaudRate1/0. Ces bits param�trent la vitesse de
transmission. \\
\begin{center}
    \begin{tabular}{|c|c|c|}
	\hline
    BdR1/BdR0	& Vitessse
    \\ \hline
    00		& 9600
    \\ \hline
    01		& 19200
    \\ \hline
    10		& 57600
    \\ \hline
    11		& 115200
    \\ \hline
    \end{tabular}
\end{center}
\item  [FFIF] : FifoFull-Int-Enable. Active ou non l'interruption FifoFull
(actif � 1) 
\item [DRIE] : DataReady-Int-Enable. Active ou non l'interruption
DataReady (actif � 1)
\item  [OErrIF] : Error-Int-Enable. Active ou non l'interruption OverRun
\item [On/Off] : active ou non la r�ception de donn�es
\end{description}

\subsubsection{Proc�dure d'utilisation}
Pour utiliser ce port s�rie, on doit pouvoir effectuer les actions suivantes :
\begin{itemize}
\item Mettre le bit On/Off � 1 pour activer la r�ception des donn�es.
\item Param�trer la vitesse � l'aide des bits BdR1/0
\item Il est conseill� d'activer l'interruption de fifo pleine (FFInt) en
mettant � 1 le bit FFIE.
\item On peut �galement activer l'interruption de donn�e re�ue DRInt en
mettant � 1 le bit DRIE.
\item Tester si une donn�e est pr�sente dans le buffer en testant le bit DR.
S'il est � 1, lire la donn�e dans rxdata. La donn�e est alors automatiquement
d�pil�e de la fifo.
\item On peut lire en permanence l'�tat de la fifo gr�ce aux bits FL1/0.
\item Quand la fifo est pleine, le flag FFI passe � 1, et le front
montant de ce bit g�n�re une interruption. Il faut alors lire les 512 octets
de la fifo pour la vider.
\end{itemize}



\subsubsection{Interfacage vhdl}

Voici le code vhdl de l'entit� rxserie :
\begin{verbatim}
entity rxserie is
generic(adr : integer);
constant adr_w : integer :=10;
port(
    databus: 	inout std_logic_vector(7 downto 0);
    rw:		in std_logic;
    busck:	in std_logic;
    rst:	in std_logic;
    masterck:	in std_logic;
    rxin:	in std_logic;
    DRIout:	out std_logic;
    FFIout:	out std_logic;
    csData:	in std_logic;
    csFlag:	in std_logic;
    csConfig:	in std_logic
    );
end rxserie;
\end{verbatim}

\begin{description}
\item [databus] : bus de donn�es
\item [rw] : ligne Read/Write\_
\item [busck] : horloge bus
\item [rst] : patte de reset
\item [masterck] : horloge g�n�rale du fpga
\item [rxin] : patte de sortie s�rie
\item [DRIout] : sortie d'interruption DRInt
\item [FFIout] : sortie d'interruption FFInt
\item [csData] : chip select du registre de data
\item [csFlag] : chip select du registre de flag
\item [csConfig] : chip select du registre de configuration
\end{description}


\subsection{Tests}
\subsection{Principe du bench}
Le testbench qui a �t� utilis� incorpore un �metteur et un r�cepteur, et les
fait fonctionner ensemble en les bouclant l'un sur l'autre. Ainsi, on peut
v�rifier le bon fonctionnement de l'�mission/r�ception.

On voit les signaux de contr�le de l'�metteur, ainsi que ceux du r�cepteur.

\subsubsection{Waveforms}

Le premier waveform concerne l'�metteur. Il montre la succession des signaux �
envoyer et des �critures de bus � affectuer pour envoyer une donn�e par le
transmetteur. (Cf "pilotage du port s�rie" page \pageref{pilot})
Ici, tout d'abord, on �crit dans le registre de configuration (adresse 258)
pour param�trer l'ensemble, puis on le lit, pour v�rifier la donn�e. Ensuite,
on �crit 3 octets � l'adresse 260 (entr�e de la fifo).

\begin{figure}[htbp]
\begin{center}
\includegraphics[width=\textwidth]{./portserie/images/txrx1.pdf}
\end{center}
\label{pilot}
\end{figure}


Le second waveform concerne le bouclage de l'�metteur sur le r�cepteur. Il est
donc pris sur une plus grande p�riode de temps. (Cf "Test du port s�rie" page
\pageref{testportserie}) 

\begin{figure}[htbp]
\begin{center}
\includegraphics[width=\textwidth]{./portserie/images/txrx2.pdf}
\end{center}
\label{testportserie}
\end{figure}

\subsubsection{Synth�se}

Voici le rapport de synth�se.

On voit que le d�codeur + le TX + le RX prennent � peu pr�s 25\% des
ressources, ce qui fait 8\% pour le port s�rie.

La fr�quence maximum de fonctionnement est de 56MHz.

\begin{verbatim}

Release 6.1.03i - xst G.26
Copyright (c) 1995-2003 Xilinx, Inc.  All rights reserved.
--> Reading design: fpga.prj

TABLE OF CONTENTS
  1) Synthesis Options Summary
  2) HDL Compilation
  3) HDL Analysis
  4) HDL Synthesis
     4.1) HDL Synthesis Report
  5) Advanced HDL Synthesis
  6) Low Level Synthesis
  7) Final Report
     7.1) Device utilization summary
     7.2) TIMING REPORT




=========================================================================
*                            Final Report                               *
=========================================================================
Final Results

Design Statistics
# IOs                              : 45

Macro Statistics :
# Registers                        : 53
#      1-bit register              : 48
#      3-bit register              : 3
#      8-bit register              : 2
# Multiplexers                     : 14
#      2-to-1 multiplexer          : 14
# Tristates                        : 5
#      8-bit tristate buffer       : 5
# Adders/Subtractors               : 1
#      4-bit adder                 : 1

Cell Usage :
# BELS                             : 1111
#      GND                         : 4
#      LUT1                        : 38
#      LUT2                        : 44
#      LUT3                        : 43
#      LUT4                        : 891
#      MUXCY                       : 47
#      VCC                         : 3
#      XORCY                       : 41
# FlipFlops/Latches                : 179
#      FD                          : 2
#      FDC                         : 25
#      FDC_1                       : 4
#      FDCE                        : 18
#      FDCP                        : 20
#      FDCPE                       : 27
#      FDE_1                       : 14
#      FDP                         : 20
#      FDPE                        : 1
#      FDR                         : 1
#      FDRE                        : 27
#      FDS                         : 1
#      FDSE                        : 18
#      LD_1                        : 1
# Shifters                         : 16
#      SRL16E                      : 16
# Tri-States                       : 40
#      BUFT                        : 40
# Clock Buffers                    : 3
#      BUFGP                       : 3
# IO Buffers                       : 33
#      IBUF                        : 20
#      IOBUF                       : 8
#      OBUF                        : 5
=========================================================================

Device utilization summary:
---------------------------

Selected Device : 2s200pq208-6 

 Number of Slices:                     601  out of   2352    25%  
 Number of Slice Flip Flops:           179  out of   4704     3%  
 Number of 4 input LUTs:              1032  out of   4704    21%  
 Number of bonded IOBs:                 33  out of    144    22%  
 Number of TBUFs:                       40  out of   2352     1%  
 Number of GCLKs:                        3  out of      4    75%  


=========================================================================
TIMING REPORT


Timing Summary:
---------------
Speed Grade: -6

   Minimum period: 17.604ns (Maximum Frequency: 56.805MHz)
   Minimum input arrival time before clock: 19.485ns
   Maximum output required time after clock: 12.296ns
   Maximum combinational path delay: 24.555ns

\end{verbatim}

\subsection{Conclusion}

Ce port s�rie est polyvalent, gr�ce � ses quatre baudrates s�lectionables. Il
est aussi performant gr�ce � sa FIFO, et tr�s param�trable gr�ce aux
interruptions vari�es et masquables individuellement.