summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd/portserie/portserie.tex
blob: 453219fb3bb7de90a4a1711d789262e32b384e9f (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
\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). Les quartz qui sont utilisables
sont : 14.7456MHz, 29.4912MHz (14.7456*2), et 44.2368MHz (14.7456*3),

\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 & x & 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
\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 & 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 [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}