From 0de72f95a5502dd157fd5f3b40f9b611940c2e75 Mon Sep 17 00:00:00 2001 From: prot Date: Thu, 11 Mar 2004 21:53:12 +0000 Subject: . --- 2004/n/fpga/doc/dcd/portserie/portserie.tex | 392 ++++++++++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 2004/n/fpga/doc/dcd/portserie/portserie.tex (limited to '2004/n/fpga/doc/dcd/portserie/portserie.tex') diff --git a/2004/n/fpga/doc/dcd/portserie/portserie.tex b/2004/n/fpga/doc/dcd/portserie/portserie.tex new file mode 100644 index 0000000..944ed60 --- /dev/null +++ b/2004/n/fpga/doc/dcd/portserie/portserie.tex @@ -0,0 +1,392 @@ +\section{Le TXserie} +\subsection{Cahier des charges} +Le cahier des charges du transmetteur série est le suivant : + +\begin{itemize} +\item Transmission série 8 bits, 1 start, 2 stop +\item Vitesse : paramétrable 9600 et 115200 bauds +\item Fifo de stockage avant transmision +\item Interruption activable signalant que la pile est pleine +\end{itemize} + + +\subsection{Schéma-bloc} + +\begin{figure}[htbp] +\caption{Schéma-bloc du TXserie} +\includegraphics[width=\textwidth]{images/txserie.pdf} +\label{schematxserie} +\end{figure} + +Le schéma modulaire est visible sur la figure \ref{schematxserie} page \pageref{schematxserie}. + +\subsection{Descritpion des modules} +\label{descriptmodules} + +\subsubsection{La fifo} + +C'est une fifo générée avec coregen. Elle contient des mots de 8 bits en +mémoire distribuée (car les BRAMs du FPGA seront utilisés à d'autres fins). + +Elle possède une entrée avec son horloge ckin, une sortie avec son horloge +ckout, et un pannel de flags en sortie. + +L'entrée ckin est la combinaison du csData et de la clock du bus. Ainsi, dès +qu'on écrit à son adresse mémoire, la fifo charge la donnée présente sur le +bus. + + +\subsubsection{Le TXcever} + +C'est un transmetteur série qui reçoit en entrée les données provenant de la +fifo. Dès qu'il est vide, il agit sur le signal ckout de la fifo, ce qui +dépile un élément, et le charge dans le transmetteur, qui peut alors le +transmettre. + +\subsubsection{Le générateur de clock} + +C'est un prédiviseur de la fréquence d'horloge du fpga. Il a pour but de +fournir l'horloge de référence pour le transmetteur (égale à 16 fois le +baudrate). + +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), + +\subsubsection{Registre config} + +C'est un registre de 8 bits branché sur le bus, en lecture/écriture, dans +lequel le PC vient déposer les bits de configuration du port série. +La sortie du registre controle le générateur de clock (pour fixer le +baudrate), et le gestionaire d'IRQ. + +\subsubsection{Registre flag} + +C'est un registre de 8 bits branché sur le bus en lecture seule dans lequel le +PC vient lire l'état des flags de la fifo. Son entrée est branchée sur les +sorties flag de la fifo. + +\subsubsection{IRQ} + +Le gestionaire d'IRQ est tout simplement un activateur d'interruptions. Il +déclenche des IRQ sur front montant, et ceci à condition que le signal IntEn +soit activé. + + +\subsection{Fonctionalités et utilisation} +Ce port série utilise 3 registres : TxData, Flag, et Config + +\subsubsection{Txdata} +Ce registre 8 bits sert à recevoir les données à envoyer. On les écrit +séquentiellement, et chaque écriture dans ce registre empile la donnée en haut +de la fifo. + +\subsubsection{Flag} +C'est le registre d'état. il donne essentiellement des informations sur l'état +de remplissage de la pile de transmision. + +Structure : +\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|} +\hline +bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 +\\ \hline +nom & x & x & x & x & Empty & Full/Int & FLI1 & FLI0 +\\ \hline +\end{tabular} + +\begin{description} +\item [FL1/FL0] : Fifo Level 1/0. Ces bits donnent le niveau de remplissage de +la fifo.\\ + \begin{tabular}{|c|c|c|} + \hline + FL1/FL0 & Tx de remplissage + \\ \hline + 00 & < 25\% + \\ \hline + 01 & 25\% < Tx < 50\% + \\ \hline + 10 & 20\% < Tx < 75\% + \\ \hline + 11 & 75\% < Tx + \\ \hline + \end{tabular} +\item [Full/Int] : indique que la pile est pleine, ce qui déclenche une +interruption +\item [Empty] : indique que la pile ET le transmetteur sont vides, que la +transmission est donc terminée. +\end{description} + +\subsubsection{Config} +Ce registre sert de configuration pour la transmission. + +Structure : +\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|} +\hline +bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 +\\ \hline +nom & x & x & x & On/Off & Purge & IntEn & BdR1 & BdR0 +\\ \hline +\end{tabular} + +\begin{description} +\item [BdR1/BdR0] : BaudRate1/0. Ces bits paramètrent la vitesse de +transmission. \\ + \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|} + \hline + BdR1/BdR0 & Vitessse + \\ \hline + 00 & 9600 + \\ \hline + 00 & 9600 + \\ \hline + 01 & 19200 + \\ \hline + 10 & 57600 + \\ \hline + 11 & 115200 + \\ \hline + \end{tabular} +\item [Int/En] : active ou non l'interruption de fifo pleine +\item [Purge] : vide la fifo de toutes ses données +\item [On/Off] : active ou non la transmission +\end{description} + +\subsection{Procédure d'utilisation} +Pour utiliser ce port série, on doit pouvoir effectuer les actions suivantes : + +\begin{itemize} +\item Mettre le bit On/Off à 1 pour activer la transmission +\item Paramétrer la vitesse à l'aide des bits BdR1/0 +\item Il est conseillé d'activer l'interruption de fifo pleine en mettant à 1 +le bit IntEn. +\item Ecriture dans txdata pour charger les données dans la fifo. Elles sont +alors automatiquement transférées, au plus tôt. Dès que le registre à décalage +est vide, il dépile le dernier élément de la fifo et le transmet à nouveau. +\item On peut lire en permanence l'état de la fifo grâce aux bits FL1/0. +\item Quand la fifo est pleine, le flag Full/Int passe à 1, et le front +montant de ce bit génère une interruption. +\item Il est possible de vider la fifo en mettant Purge à 1. Il faut le +remettre à 0 pour qu'il puisse être à nouveau actif, car la purge de la fifo +ne s'effectue que sur front montant de ce bit. +\end{itemize} + + +\subsection{Interfaçage vhdl} + +Voici le code vhdl de l'entité txserie : +\begin{verbatim} +entity txserie is +generic(adr : integer); +constant adr_w : integer :=10; +port( + databus: inout std_logic_vector(7 downto 0); + rw: in std_logic; + busck: in std_logic; + rst: in std_logic; + masterck: in std_logic; + txout: out std_logic; + intout: out std_logic; + csData: in std_logic; + csFlag: in std_logic; + csConfig: in std_logic; + ); +end txserie; +\end{verbatim} + +Voici une description de ces signaux : + +\begin{description} +\item [databus] : bus de données +\item [rw] : ligne Read/Write\_ +\item [busck] : horloge bus +\item [rst] : patte de reset +\item [masterck] : horloge générale du fpga +\item [txout] : patte de sortie série +\item [intout] : sortie d'interruption +\item [csData] : chip select du registre de data +\item [csFlag] : chip select du registre de flag +\item [csConfig] : chip select du registre de configuration +\end{description} + + + + + +% Deuxième partie : le RXserie + +\section{Le RXserie} +\subsection{Cahier des charges} +Le cahier des charges du récepteur série est le suivant : + +\begin{itemize} +\item Réception série 8 bits, 1 start, 2 stop +\item Vitesse : paramétrable 9600 et 115200 bauds +\item Fifo de stockage des données reçues +\item Interruption activable signalant que la fifo est pleine +\item Interruption activable signalant qu'on a reçu une donnée +\end{itemize} + + +\subsection{Schéma-bloc} + +Le schéma modulaire est visible sur la figure \ref{schemarxserie} page \pageref{schemarxserie}. + +\begin{figure}[htbp] +\caption{Schéma-bloc du RXserie} +\includegraphics[width=\textwidth]{images/rxserie.pdf} +\label{schemarxserie} +\end{figure} + + +\subsection{Descritpion des modules} +\subsubsection{Le RXcever} + +C'est un récepteur série qui présente ses données à l'entrée de la fifo +Dès qu'il a reçu un octet, il agit sur le signal fifockin de la fifo +ce qui empile l'octet reçu. + +\subsubsection{Autres modules} + +Les autres modules utilisés sont les mêmes que pour le transmetteur. Voir +chapitre \ref{descriptmodules}. + + +\subsection{Fonctionalités et utilisation} +Ce port série utilise 3 adresses mémoire : +\subsubsection{Rxdata} +Ce registre 8 bits permet de récupérer les données reçues. On les lit +séquentiellement, et chaque lecture dans ce registre dépile la donnée en bas +de la fifo. + +\subsubsection{Flag} +C'est le registre d'état. Il donne essentiellement des informations sur l'état +de remplissage de la pile de réception. + +Structure : +\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|} +\hline +bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 \\ +\hline +nom & x & x & x & x & DR & FFull & FL1 & FL0 \\ +\hline +\end{tabular} + +\begin{description} +\item [FL1/FL0] : Fifo Level 1/0. Ces bits donnent le niveau de remplissage de +la fifo. \\ + \begin{tabular}{|c|c|c|} + \hline + FL1/FL0 & Tx de remplissage + \\ \hline + 00 & < 25\% + \\ \hline + 01 & 25\% < Tx < 50\% + \\ \hline + 10 & 20\% < Tx < 75\% + \\ \hline + 11 & 75\% < Tx + \\ \hline + \end{tabular} +\item [FFull] : indique que la pile est pleine. Chaque front montant de ce +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 +\end{description} + +\subsubsection{Config} +Ce registre sert de configuration pour la transmission. + +Structure +\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|} +\hline +bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 +\\ \hline +nom & x & x & x & On/Off & DRIE & FFIE & BdR1 & BdR0 +\\ \hline +\end{tabular} + +\begin{description} +\item [BdR1/BdR0] : BaudRate1/0. Ces bits paramètrent la vitesse de +transmission. \\ + \begin{tabular}{|c|c|c|} + \hline + BdR1/BdR0 & Vitessse + \\ \hline + 00 & 9600 + \\ \hline + 01 & 19200 + \\ \hline + 10 & 57600 + \\ \hline + 11 & 115200 + \\ \hline + \end{tabular} +\item [FFIF] : FifoFull-Int-Enable. Active ou non l'interruption FifoFull +(actif à 1) +\item [DRIE] : DataReady-Int-Enable. Active ou non l'interruption +DataReady (actif à 1) +\item [On/Off] : active ou non la réception de données +\end{description} + +\subsection{Procédure d'utilisation} +Pour utiliser ce port série, on doit pouvoir effectuer les actions suivantes : +\begin{itemize} +\item Mettre le bit On/Off à 1 pour activer la réception des données. +\item Paramétrer la vitesse à l'aide des bits BdR1/0 +\item Il est conseillé d'activer l'interruption de fifo pleine (FFInt) en +mettant à 1 le bit FFIE. +\item On peut également activer l'interruption de donnée reçue DRInt en +mettant à 1 le bit DRIE. +\item Tester si une donnée est présente dans le buffer en testant le bit DR. +S'il est à 1, lire la donnée dans rxdata. La donnée est alors automatiquement +dépilée de la fifo. +\item On peut lire en permanence l'état de la fifo grâce aux bits FL1/0. +\item Quand la fifo est pleine, le flag FFI passe à 1, et le front +montant de ce bit génère une interruption. Il faut alors lire les 512 octets +de la fifo pour la vider. +\end{itemize} + + + +\subsection{Interfaçage vhdl} + +Voici le code vhdl de l'entité rxserie : +\begin{verbatim} +entity rxserie is +generic(adr : integer); +constant adr_w : integer :=10; +port( + databus: inout std_logic_vector(7 downto 0); + rw: in std_logic; + busck: in std_logic; + rst: in std_logic; + masterck: in std_logic; + rxin: in std_logic; + DRIout: out std_logic; + FFIout: out std_logic; + csData: in std_logic; + csFlag: in std_logic; + csConfig: in std_logic + ); +end rxserie; +\end{verbatim} + +\begin{description} +\item [databus] : bus de données +\item [rw] : ligne Read/Write\_ +\item [busck] : horloge bus +\item [rst] : patte de reset +\item [masterck] : horloge générale du fpga +\item [rxin] : patte de sortie série +\item [DRIout] : sortie d'interruption DRInt +\item [FFIout] : sortie d'interruption FFInt +\item [csData] : chip select du registre de data +\item [csFlag] : chip select du registre de flag +\item [csConfig] : chip select du registre de configuration +\end{description} + + -- cgit v1.2.3