\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}}}

% 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{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{nono\_const.vhd}
\label{sec:nono_const}
\lstinputlisting{../../src/packages/nono_const.vhd}
\pagebreak

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

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

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

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

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

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

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

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

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

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

\subsection{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


\end{document}
