summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/fpga/doc/dcd')
-rw-r--r--2004/n/fpga/doc/dcd/portserie/portserie.tex33
-rw-r--r--2004/n/fpga/doc/dcd/rapport.tex165
2 files changed, 182 insertions, 16 deletions
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étrable, pour pouvoir choisir la fréquence utilisée parmis les 4
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éclenche l'interruption FifoFullInt
\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é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}