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/portserie/portserie.tex | 33 +++++- 2004/n/fpga/doc/dcd/rapport.tex | 165 ++++++++++++++++++++++++++-- 2 files changed, 182 insertions(+), 16 deletions(-) (limited to '2004/n/fpga') diff --git a/2004/n/fpga/doc/dcd/portserie/portserie.tex b/2004/n/fpga/doc/dcd/portserie/portserie.tex index 453219f..41ebe9a 100644 --- a/2004/n/fpga/doc/dcd/portserie/portserie.tex +++ b/2004/n/fpga/doc/dcd/portserie/portserie.tex @@ -53,8 +53,10 @@ Il est param 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), +multiple de 16 fois 115200 (le baudrate maxi), soit 1,8432MHz. +Le quartz utilisé pour la référence de vitesse est un 24MHz. On le divise par +13, pour obtenir 1,8462MHz, ce qui fait une erreur de 0.16\%, parfaitement +acceptable sur une liaison série RS232. \paragraph{Registre config} @@ -274,7 +276,7 @@ Structure : \hline bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 \\ \hline -nom & x & x & x & x & DR & FFull & FL1 & FL0 \\ +nom & x & x & x & ORErr & DR & FFull & FL1 & FL0 \\ \hline \end{tabular} @@ -301,6 +303,9 @@ bit d \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 +\item [ORErr] : indique qu'il y a eu un overrun sur la réception, c'est à dire +que le bit de stop n'a pas été reçu correctement. + \end{description} \paragraph{Config} @@ -311,7 +316,7 @@ Structure \hline bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 \\ \hline -nom & x & x & x & On/Off & DRIE & FFIE & BdR1 & BdR0 +nom & x & x & OErrIE & On/Off & DRIE & FFIE & BdR1 & BdR0 \\ \hline \end{tabular} @@ -337,6 +342,7 @@ transmission. \\ (actif à 1) \item [DRIE] : DataReady-Int-Enable. Active ou non l'interruption DataReady (actif à 1) +\item [OErrIF] : Error-Int-Enable. Active ou non l'interruption OverRun \item [On/Off] : active ou non la réception de données \end{description} @@ -398,3 +404,22 @@ end rxserie; \end{description} +\subsection{Tests} +\subsection{Principe du bench} +Le testbench qui a été utilisé incorpore un émetteur et un récepteur, et les +fait fonctionner ensemble en les bouclant l'un sur l'autre. Ainsi, on peut +vérifier le bon fonctionnement de l'émission/réception. + +On voit les signaux de contrôle de l'émetteur, ainsi que ceux du récepteur. + +\subsubsection{Waveforms} + + + +\subsection{Conclusion} + +Ce port série est polyvalent, grâce à ses quatre baudrates sélectionables. Il +est aussi performant grâce à sa FIFO, et très paramétrable grâce aux +interruptions variées et masquables individuellement. + + 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