\section{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}

\section{Architecture globale}
Voici le schéma modulaire du récepteur :

\section{Utilisation}
Ce port série utilise 3 adresses mémoire :
\subsection{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.

Adresse : \textit{adresse\_module} + 0

\subsection{Flag}
C'est le registre d'état. Il donne essentiellement des informations sur l'état
de remplissage de la pile de réception.

Adresse : \textit{adresse\_module} + 1

Structure :
\begin{tabular}
bit ! 7 ! 6 ! 5 ! 4 ! 3   ! 2     ! 1    ! 0
nom ! x ! x ! x ! x ! FNE ! FFull !  FL1 ! FL0 
\end{tabular}

Signification des bits :
\begin{description}
\item [FL1/FL0] : Fifo Level 1/0. Ces bits donnent le niveau de remplissage de
la fifo.
    \begin{tabular}
    FL1/FL0	! Tx de remplissage
    00	! < 25\%
    01	! 25\% < Tx < 50\%
    10	! 20\% < Tx < 75\%
    11	! 75\% < Tx
    \end{tabular}
\item  [FFull] : indique que la pile est pleine. Chaque front montant de ce
bit déclenche l'interruption FifoFullInt
\item [FNE] : FifoNonEmpty. Indique que la fifo n'est pas vide, et donc qu'une
donnée est arrivée dans le récepteur. Chaque front montant de ce bit déclenche
l'interruption FifiNonEmptyInt
\end{description}

\subsection{Config}
Ce registre sert de configuration pour la transmission.

Adresse : \textit{adresse\_module} + 2

Structure
\begin{tabular}
bit ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0
nom ! x ! x ! x ! On/Off ! FNEIE ! FFIE  ! BdR1 ! BdR0
\end{tabular}

Signification des bits :
\begin{description}
\item [BdR1/BdR0] : BaudRate1/0. Ces bits paramètrent la vitesse de
transmission.
    \begin{tabular}
    BdR1/BdR0	! Vitessse
    00		! 9600
    01		! 19200
    10		! 57600
    11		! 115200
    \end{tabular}
\item  [FFIF] : FifoFull-Int-Enable. Active ou non l'interruption FifoFull
(actif à 1) 
\item [FNEIE] : FifiNonEmpty-Int-Enable. Active ou non l'interruption
FifiNonEmpty (actif à 1)
\item [On/Off] : active ou non la réception de données
\end{description}

\subsection{Utilisation}
\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 FNEInt en
mettant à 1 le bit FNEIE.
\item Tester si une donnée est présente dans le buffer en testant le bit FNE.
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}


\section{Interfaçage}

Voici le schéma de l'entité txserie :

Voici le code vhdl de l'entité rxserie :
\begin{verbatim}
entity rxserie is
generic(adr : integer);
constant adr_w : integer :=10;
port(
    adrbus: 	in std_logic_vector((adr_w - 1) downto 0);
    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;
    FNEIout:	out std_logic;
    FFIout:	out std_logic;
    );
end rxserie;
\end{verbatim}

\begin{description}
\item [adr : integer] : paramètre générique entier définissant l'adresse du
module (notée \textit{adress\_module})
\item [adr\_w] : largeur du bus d'adresse. le code peut ainsi être modifié
pour s'adapter à plusieurs largeurs de bus d'adresse.
\item [adrbus] : bus d'adresse
\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 [FNEIout] : sortie d'interruption FNEInt
\item [FFIout] : sortie d'interruption FFInt
\end{description}


\section{Conclusion}
Ce récepteur est polyvalent, il intègre les fonctions les plus utilisées,
et permet de les utiliser facilement.


