summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd/rapport.tex
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/fpga/doc/dcd/rapport.tex')
-rw-r--r--2004/n/fpga/doc/dcd/rapport.tex165
1 files changed, 153 insertions, 12 deletions
diff --git a/2004/n/fpga/doc/dcd/rapport.tex b/2004/n/fpga/doc/dcd/rapport.tex
index dc1c2fb..4d8af0e 100644
--- a/2004/n/fpga/doc/dcd/rapport.tex
+++ b/2004/n/fpga/doc/dcd/rapport.tex
@@ -57,6 +57,30 @@ PC104}
\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.
+\item Olivier Desbrosses pour son soutient logistique.
+\item Messieurs Roger, Pelletier Joel et Rémy, pour leur aide sur le vhdl.
+\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), qui nous a offert de nombreuseuses facilités lors de la
+réalisation du PCB.
+\end{itemize}
+
+
+\vfill
+
+=======
% Todo :
% Remerciements ?
@@ -138,6 +162,70 @@ 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), IOR (IORead), et IOW
+(IOWrite). 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 IOR
+clk <= (IOR or IOW) 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]{./convbus.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 IOR/IOW 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.
+
+
\section{La gestion des interruptions}
\input{./interrupt/interrupt.tex}
\pagebreak
@@ -209,62 +297,67 @@ versions suivantes de ce dossier pour montrer le résultat final.
\section{Listing des modules vhdl}
-\subsection{nono\_const.vhd}
+\subsection{fichiers globaux}
+
+\subsubsection{nono\_const.vhd}
\label{sec:nono_const}
\lstinputlisting{../../src/packages/nono_const.vhd}
\pagebreak
-\subsection{isa\_const.vhd}
+\subsubsection{isa\_const.vhd}
\label{sec:isa_const}
\lstinputlisting{../../src/packages/isa_const.vhd}
\pagebreak
-\subsection{pwm\_const.vhd}
+\subsubsection{pwm\_const.vhd}
\label{sec:pwm_const}
\lstinputlisting{../../src/packages/pwm_const.vhd}
\pagebreak
-\subsection{or3.vhd}
+\subsubsection{or3.vhd}
\label{sec:or3}
\lstinputlisting{../../src/or/or3.vhd}
\pagebreak
-\subsection{or8.vhd}
+\subsubsection{or8.vhd}
\label{sec:or8}
\lstinputlisting{../../src/or/or8.vhd}
\pagebreak
-\subsection{reg\_rw.vhd}
+\subsubsection{reg\_rw.vhd}
\label{sec:reg_rw}
\lstinputlisting{../../src/registre/reg_rw.vhd}
\pagebreak
-\subsection{tristate.vhd}
+\subsubsection{tristate.vhd}
\label{sec:tristate}
\lstinputlisting{../../src/three-state/tristate.vhd}
\pagebreak
-\subsection{gpio\_direction.vhd}
+
+\subsection{Les GPIO}
+
+\subsubsection{gpio\_direction.vhd}
\label{sec:gpio_direction}
\lstinputlisting{../../src/gpio/gpio_direction.vhd}
\pagebreak
-\subsection{gpio\_it\_detect\_up.vhd}
+\subsubsection{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}
+\subsubsection{gpio\_it\_detect\_down.vhd}
\label{sec:gpio_it_detect_down}
\lstinputlisting{../../src/gpio/gpio_it_detect_down.vhd}
\pagebreak
-\subsection{interrupt.vhd}
+\subsubsection{interrupt.vhd}
\label{sec:interrupt}
\lstinputlisting{../../src/interrupt/interrupt.vhd}
\pagebreak
-\subsection{gpio.vhd}
+\subsubsection{gpio.vhd}
\label{sec:gpio}
\lstinputlisting{../../src/gpio/gpio.vhd}
\pagebreak
@@ -285,4 +378,52 @@ versions suivantes de ce dossier pour montrer le résultat final.
\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:}
+\lstinputlisting{../../src/portserie/portserie/txserie.vhd}
+\pagebreak
+
+\subsubsection{bch_txserie.vhd}
+\label{sec:}
+\lstinputlisting{../../src/portserie/portserie/bch_txserie.vhd}
+\pagebreak
+
+\subsubsection{rxserie.vhd}
+\label{sec:}
+\lstinputlisting{../../src/portserie/rxserie/rxserie.vhd}
+\pagebreak
+
+\subsubsection{bch_rxserie.vhd}
+\label{sec:}
+\lstinputlisting{../../src/portserie/rxserie/bch_rxserie.vhd}
+\pagebreak
+
+\subsubsection{clockgene.vhd}
+\label{sec:}
+\lstinputlisting{../../src/portserie/clockgene/clockgene.vhd}
+\pagebreak
+
+\subsubsection{fifodriver.vhd}
+\label{sec:}
+\lstinputlisting{../../src/portserie/fifo/fifodriver.vhd}
+\pagebreak
+
+\subsubsection{bch_fifodriver.vhd}
+\label{sec:}
+\lstinputlisting{../../src/portserie/fifo/bch_fifodriver.vhd}
+\pagebreak
+
+
+
+\subsection{Le reste (à compléter)}
+
+
\end{document}