From f06dcad14cfce6f6ed9d2a985a7bfe67f4427f5f Mon Sep 17 00:00:00 2001 From: prot Date: Thu, 22 Apr 2004 07:09:43 +0000 Subject: Ajout remerciements Ajout listings port série --- 2004/n/fpga/doc/dcd/rapport.tex | 165 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 153 insertions(+), 12 deletions(-) (limited to '2004/n/fpga/doc/dcd/rapport.tex') 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 \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 \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} -- cgit v1.2.3