summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd/rapport.tex
blob: c475d085df8ba11f6efcb3cf29696f398476a25e (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
\documentclass[a4paper,dvips,pdftex,titlepage]{article} 

% Inclusion de packages :
%{{{1
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\usepackage{fancyhdr}
\usepackage[dvips]{graphicx,color}
%\usepackage[pdftex]{graphicx,color}
%\usepackage{verbatim}
\usepackage{times}
% Pour inclure les listings VHDL
\usepackage{listings}
\lstset{language=VHDL,extendedchars=true,inputencoding=latin1,breaklines}
\lstset{language=vhdl,
        basicstyle=\footnotesize, %diminue la taille de listings
        numbers=left, % nombre � gauche
        numberstyle=\tiny,
        stepnumber=5,
        xleftmargin=30pt
%	extendedchars=true,
%	inputencoding=latin1,
%	breaklines
        }

% Pour les maths :
%\usepackage{amssymb}
%\usepackage{amsfonts}
%\usepackage{amsmath,amsthm}
%}}}1

% Mise en page du document :
%{{{1
\pagestyle{fancy}
\parskip=10pt
\baselineskip=11pt
\parindent=0pt		% alin�a

\addtolength{\textwidth}{0.6cm}

% Ent�te de page :
\lhead{\small{Thomas Burg - Pierre-Andre Galmes \\ Fid�le Gafan - Pierre
Prot}}
\rhead{I2 ET\\ F�vrier 2004}

% Structure du document :
\begin{document}

\title{Pr�-projet de VHDL : \\ R�alisation d'un p�riph�rique ISA pour
PC104}
\author{Thomas Burg - Pierre-Andre Galmes - Fid�le Gafan - Pierre Prot\\ EFREI - Ing�nieur
2$^{\textrm{i�me}}$ ann�e}
\date{F�vrier 2004}
\maketitle
\tableofcontents
\pagebreak
%1}}}

\vfill

\section*{Remerciements}

Avant toute chose, nous tenons, avec tous les membres d'EFREI Robotique, �
remercier les personnes qui nous ont aid� dans la r�alisation de cette carte,
particuli�rement :

\begin{itemize}
\item Monsieur Villedieu, pour ses sch�mas, ses conseis avis�s, et surtout le
temps et la disponibilit� qu'il a bien voulu nous consacrer aussi bien pour la
conception hardware que pour le code vhdl de cette carte. Son soutient nous a
�t� vital.
\item Messieurs Roger, Pelletier Joel et R�my, pour leur aide sur le vhdl.
\item Olivier Desbrosses pour son soutient logistique.
\item Nicolas Bouquet, et ses coll�gues pour la validation du PCB
\item Enfin, n'oublions pas Yvan Bourne de la soci�t� YBDesign (ing�nierie
�lectronique : http://www.ybdesign.fr/), qui nous a offert de nombreuseuses
facilit�s lors de la r�alisation du PCB.
\end{itemize} 


\vfill

% Todo :

% Remerciements ?


\section{Introduction}

Suite au cahier des charges, �crit pr�c�dement, voici un rapport d�taillant
l'impl�mentation de la solution pour laquelle nous avons opt� : la r�alisation
d'une carte FPGA. 

En effet, les avantages de ce type de carte sont nombreux. Tout d'abord, une
fois le routage et la fabrication effectu�e, cette carte peut-�tre
reprogramm�e � "volont�". En effet, cela est tr�s utile autant lors de la
phase de mise au point des diff�rents modules que plus tard, si le besoin
d'apporter des modification se fait sentir.

On pourrait par exemple remplacer un module inutilis� (bus $I^2C$, gpio...)
pour impl�menter un autre module plus utile � ce moment. Pour cela, il
suffirait de r�-affecter les pattes (fichier de contrainte) associ�es au
module inutilis� et de modifier l�g�rement le code VHDL.

Ensuite, cette carte a �t� faite dans une optique de r�utilisation. En effet,
pour gagner du temps de d�veloppement, il devient important que nos
pr�d�cesseurs puissent reprendre ce que nous avons d�velopp�. Ainsi, nous
avons par exemple d�cider de choisir d'utiliser une carte PC104 pour la
r�alisation de ce robot. 

Ce type de carte a en effet l'avantage d'�tre standardis�e. Il est donc facile
de trouver des fournisseurs, crit�re tr�s important pour la p�rennit� du
syst�me con�u !

Le pr�sent dossier a pour but de pr�senter la carte FPGA. Nous pr�senterons
une premi�re vision globale de cette carte dans laquelle nous donnerons ses
principales caract�ristiques, � savoir, � quoi servira cette carte, de quels
modules elle sera compos�e et les informations relatives au routage de cette
carte.

Nous expliquerons aussi le fonctionnement des diff�rents modules et en
particulier comment piloter ceux-ci � partir de la carte PC104. Pour chaque
module, nous avons d�taill� son fonctionnement interne ou architecture
physique et list� le code VHDL cr��.

\pagebreak

% Ici, explication sur la carte dans son ensemble ?
\section{Architecture globale}

Cette premi�re vision a pour but de donner un aper�u des fonctionnalit�s que
nous souhaitons impl�menter. On se reportera au sch�ma de l'architecture
globale, figure \ref{archiglobale} page \pageref{archiglobale} pour plus de
facilit�es � comprendre cette carte.

\begin{figure}[htbp]
\caption{Architecture globale de la carte FPGA}
\begin{center}
\includegraphics[width=1.4\textwidth,angle=90]{./images/carte_globale.pdf}
\end{center}
\label{archiglobale}
\end{figure}

La carte FPGA est compos�e de diff�rents blocs : bus $I^2C$, ports s�rie, bloc
de gestion cam�ra, g�n�ration de signaux modul�s en largeur d'impulsion ou
Pulse Width Modulation (pwm) pour la commande de servomoteurs et blocs
d'entr�es / sorties ou General Purpose Input / Output (gpio).

Comme cela a �t� sp�cifi� dans le cahier des charges, pour la r�alisation de
notre robot, nous utiliserons une carte PC104. Cette carte est un ordinateur
avec les entr�es standard (port s�rie, PS2...). Cette carte n'ayant pas tous
le n�cessaire pour le contr�le d'un robot, il nous faut d�velopper une carte
annexe permettant d'avoir ce qu'il nous manque.

Pour les branchements, la carte FPGA est destin�e � �tre connect�e � la PC104
via un bus ISA. Tous les blocs pr�c�dement enonc�s sont connect�s sur le bus
ISA et sont accessibles directement par le PC104. Le fpga g�re les
interruptions g�n�r�es par ses blocs et les transmet au PC104 � l'aide des
IRQ.

\pagebreak

% Les diff�rents modules de la carte
\section{Le d�codage du bus ISA} 
\subsection{Role} 
 
Le premier module en entr�e du FPGA est le d�codeur du bus ISA. Il effectue
deux t�ches :

\subsubsection{Le d�codage de l'adresse} 

D�coder l'adresse ISA du FPGA, et si celle-�i est valide, l'adresse de
sous-r�seau du registre s�lectionn�. En effet, nous avons d�coup� l'adresse
des registres comme suit :
\begin{tabular}{|c|c|c|}
\hline
Adresse FPGA & Sous-adresse registre
\\ \hline
16 bits & 8 bits
\\ \hline
\end{tabular}

\subsubsection{La conversion des signaux de contr�le} 

Les signaux de contr�le de bus sont AEN (Address ENable), MEMR (MEMRead), et MEMW
(MEMWrite). Nos registres, quand � eux, utilisent des signaux CS (Chip Select),
RW, et clk (la clock ne sert que pour �crire dans le registre). La conversion
de ces signaux est effectu�e par le d�codeur de bus.

Pour cela l'algorithme est tr�s simple :
RW <= not MEMR
clk <= (MEMR or MEMW) and not AEN
CS prend la sortie du d�codeur de la sous-adresse registre correspondant au registre voulu.

\begin{figure}[htbp]
\caption{Conversion des signaux de contr�le de bus}
\begin{center}
\includegraphics[width=1\textwidth,angle=90]{images/timespec.pdf}
\end{center}
\label{convbus}
\end{figure}


\subsection{Impl�mentation}

Pour impl�menter ce module, nous avons utilis� un d�codeur g�n�r� par coregen.
Il poss�de 256 sorties, ce qui laisse des possibilit�s suffisantes pour le
fpga (256 sous-adresses). Chacune de ses sorties est � relier au registre
correspondant. On obtient donc un mappage des registres. 

L'adresse du fpga est quand � elle d�cod�e par un simple comparateur binaire.
Elle est valid�e par le signal AEM, qui doit �tre � 0 pour que la comparaison puisse s'effectuer.
En entrant sur l'enable du d�codeur de sous-adresse, la sortie de ce
comparateur active ou non tous les CS d'un coup pourvu que AEN soit � 0.

La conversion des signaux est faite par table de v�rit�.


\subsection{Testbench} 

Sur ce testbench, nous avons mis l'adresse du FPGA � 000100, ce qui signifie que l'espace adressable pour les registres s'�tend de 0000100 � 0001FF. Dans le testbench, l'adresse balaye l'intervale 000000-000300. En m�me temps, les signaux de contr�le de bus varient al�atoirement.

On remarque que la conversion des signaux MEMR/MEMW en RW/clk s'effectue comme voulu.

On voit �galement tr�s bien le moment o� les CS commencent � �tre actifs (� partir de l'adresse 000100), ainsi que le moment o� ils sont inhib�s par la remont� du signal AEN.

\begin{figure}[htbp]
\caption{Conversion des signaux de contr�le de bus}
\begin{center}
\includegraphics[width=1\textwidth,angle=90]{images/decod.png}
\end{center}
\label{benchdecod}
\end{figure}


\subsection{Synthese}

Voici le rapport de synth�se. On voit que le d�codeur de 256 sorties prend
vraiment beaucoup de place ( 16 � 18\% du fpga), mais cela semble �tre le prix � payer.

\begin{verbatim}

Release 6.1.03i - xst G.26
Copyright (c) 1995-2003 Xilinx, Inc.  All rights reserved.
--> Reading design: decodisa.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
RTL Top Level Output File Name     : decodisa.ngr
Top Level Output File Name         : decodisa
Output Format                      : NGC
Optimization Goal                  : Speed
Keep Hierarchy                     : NO

Design Statistics
# IOs                              : 285

Cell Usage :
# BELS                             : 774
#      GND                         : 1
#      LUT3                        : 3
#      LUT4                        : 770
# IO Buffers                       : 277
#      IBUF                        : 19
#      OBUF                        : 258
=========================================================================

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

Selected Device : 2s200fg456-6 

 Number of Slices:                     445  out of   2352    18%  
 Number of 4 input LUTs:               773  out of   4704    16%  
 Number of bonded IOBs:                277  out of    288    96%  


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

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

   Minimum period: No path found
   Minimum input arrival time before clock: No path found
   Maximum output required time after clock: No path found
   Maximum combinational path delay: 19.457ns
\end{verbatim}


\section{La gestion des interruptions}
\input{./interrupt/interrupt.tex}
\pagebreak

\section{Le bloc d'entr�es / sorties}
\input{./gpio/gpio.tex}
\pagebreak

\section{Le bloc port s�rie}
\input{./portserie/portserie.tex}
\pagebreak

\section{Le bloc PWM}
\input{./pwm/pwm.tex}
\pagebreak

\section{Le bloc de gestion de la cam�ra}
\input{./ovcam/ovcam.tex}
\pagebreak

\section{La carte}
\input{./carte/carte.tex}
\pagebreak


\section {Conclusion}

% L� ou on en est
Pour situer le niveau de finition de notre projet, voici une liste de ce qui a
�t� r�alis� jusqu'� maintenant. Tout d'abord, nous avons pass� une grande
partie de notre temps � concevoir les architectures physiques des diff�rents
modules.

Ce projet �tant le premier sur lequel nous �tions totalement libre de toute la
r�alisation. En effet, nous avons d� choisir le type de bus et �tudier le
fonctionnement de celui-ci, �tudier la r�alisations des divers modules que
nous impl�mentons (bus $I^2C$, port s�rie...).

Ensuite, nous avons d�couvert toute la cha�ne de r�alisation d'une carte FPGA.
En effet, nous nous sommes rendu compte des diff�rentes �tapes allant de
l'id�e premi�re d'une carte annexe, jusqu'� la fabrication et la programmation
de celle-ci.

Pour r�aliser cette carte, nous aurons donc d� nous ateler � la d�couverte des
�tapes telles que le routage de carte � l'aide du logiciel Protel. Cette
d�couverte aura �t� longue et douloureuse, mais nous aura permi de r�aliser
une carte parfaitement adapt�e � nos besoins.

L'une des autres �tape que nous avons d� g�rer est la fabri�ation de la carte.
Nous avons donc d� effectuer des recherches de fabriquant et �tudier les
diff�rents offres propos�es. Une fois cela fait, nous avons pris l'initiative
de n�gocier les prix et de nous faire sponsoriser par la soci�t� r�alisant la
carte.

A l'heure actuelle, nous avons envoy� la carte au fabriquant, r�alis� une
bonne partie des modules et test� la majorit� de ces modules sur carte.
Malheureusement, nous n'avons pas r�ussi � tenir le planning initial et nous
ne sommes donc pas actuellement � la fin du travail.

Nous allons de ce fait continuer le d�veloppement et esp�rons que ceux-ci
seront achev�s pour mi-Mai. Si vous le d�sirez, nous pourrons vous fournir les
versions suivantes de ce dossier pour montrer le r�sultat final.

\pagebreak


% TODO : Annexes
\appendix

\section{Listing des modules vhdl}

\subsection{fichiers globaux}

\subsubsection{nono\_const.vhd}
\label{sec:nono_const}
\lstinputlisting{../../src/packages/nono_const.vhd}
\pagebreak

\subsubsection{isa\_const.vhd}
\label{sec:isa_const}
\lstinputlisting{../../src/packages/isa_const.vhd}
\pagebreak

\subsubsection{pwm\_const.vhd}
\label{sec:pwm_const}
\lstinputlisting{../../src/packages/pwm_const.vhd}
\pagebreak

\subsubsection{or3.vhd}
\label{sec:or3}
\lstinputlisting{../../src/or/or3.vhd}
\pagebreak

\subsubsection{or8.vhd}
\label{sec:or8}
\lstinputlisting{../../src/or/or8.vhd}
\pagebreak

\subsubsection{reg\_rw.vhd}
\label{sec:reg_rw}
\lstinputlisting{../../src/registre/reg_rw.vhd}
\pagebreak

\subsubsection{tristate.vhd}
\label{sec:tristate}
\lstinputlisting{../../src/three-state/tristate.vhd}
\pagebreak


\subsection{Les GPIO}

\subsubsection{gpio\_direction.vhd}
\label{sec:gpio_direction}
\lstinputlisting{../../src/gpio/gpio_direction.vhd}
\pagebreak

\subsubsection{gpio\_it\_detect\_up.vhd}
\label{sec:gpio_it_detect_up}
\lstinputlisting{../../src/gpio/gpio_it_detect_up.vhd}
\pagebreak

\subsubsection{gpio\_it\_detect\_down.vhd}
\label{sec:gpio_it_detect_down}
\lstinputlisting{../../src/gpio/gpio_it_detect_down.vhd}
\pagebreak

\subsubsection{interrupt.vhd}
\label{sec:interrupt}
\lstinputlisting{../../src/interrupt/interrupt.vhd}
\pagebreak

\subsubsection{gpio.vhd}
\label{sec:gpio}
\lstinputlisting{../../src/gpio/gpio.vhd}
\pagebreak

\subsection{clk1us.vhd}
\label{sec:clk1us}
\lstinputlisting{../../src/pwm/clk1us.vhd}
\pagebreak

\subsection{convert\_pwm.vhd}
\label{sec:convert_pwm}
\lstinputlisting{../../src/pwm/convert_pwm.vhd}
\pagebreak

\subsection{pwm\_generator.vhd}
\label{sec:pwm_generator}
\lstinputlisting{../../src/pwm/pwm_generator.vhd}
\pagebreak


\subsection{Le port s�rie}

\subsubsection{fpga.vhd}
Le fichier qui inclut le TX et le RX pour le testbench des deux
\label{sec:fpga}
\lstinputlisting{../../src/fpga/fpga.vhd}
\pagebreak

\subsubsection{txserie.vhd}
\label{sec:txserie}
\lstinputlisting{../../src/portserie/portserie/txserie.vhd}
\pagebreak

\subsubsection{bch\_txserie.vhd}
\label{sec:bch_txserie}
\lstinputlisting{../../src/portserie/portserie/bch_txserie.vhd}
\pagebreak

\subsubsection{rxserie.vhd}
\label{sec:rxserie}
\lstinputlisting{../../src/portserie/rxserie/rxserie.vhd}
\pagebreak

\subsubsection{bch\_rxserie.vhd}
\label{sec:bch_rxserie}
\lstinputlisting{../../src/portserie/rxserie/bch_rxserie.vhd}
\pagebreak

\subsubsection{clockgene.vhd}
\label{sec:clockgene}
\lstinputlisting{../../src/portserie/clockgene/clockgene.vhd}
\pagebreak

\subsubsection{fifodriver.vhd}
\label{sec:fifodriver}
\lstinputlisting{../../src/portserie/fifo/fifodriver.vhd}
\pagebreak

\subsubsection{bch\_fifodriver.vhd}
\label{sec:bch_fifodriver}
\lstinputlisting{../../src/portserie/fifo/bch_fifodriver.vhd}
\pagebreak



\subsection{Le reste (� compl�ter)}


\end{document}