summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd/portserie/portserie.tex
diff options
context:
space:
mode:
authorprot2004-03-11 21:53:12 +0000
committerprot2004-03-11 21:53:12 +0000
commit0de72f95a5502dd157fd5f3b40f9b611940c2e75 (patch)
tree9d647bd7a58522b7ab00344abc855aca7453cb4b /2004/n/fpga/doc/dcd/portserie/portserie.tex
parentfe0e298c5b84e6b051fbc61fb826514f3da01c94 (diff)
.
Diffstat (limited to '2004/n/fpga/doc/dcd/portserie/portserie.tex')
-rw-r--r--2004/n/fpga/doc/dcd/portserie/portserie.tex392
1 files changed, 392 insertions, 0 deletions
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}
+
+