\subsection{Cahier des charges}

Voici les contraintes du bloc de gestion des interruptions :

\begin{itemize}
\item{Gestion de 24 interruptions différentes}
\item{Transmission des interruptions par bloc de 8 bits}
\item{Un signal de RAZ}
\end{itemize}


% en gros c'est comment est vu le module côté userland.
\subsection{Vue comportementale}

Le bloc de gestion des interruptions a pour but de permettre aux différents
modules de la carte de prévenir l'ordinateur qu'ils ont des informations à
lui transmettre. On pourra voir la figure \ref{entity_interrupt} page
\pageref{entity_interrupt}.

\begin{figure}[htbp]
\caption{Entity du bloc de gestion des interruptions}
\begin{center}
\scalebox{0.7}{
\includegraphics {./interrupt/images/entity.pdf}
%\includegraphics[width=\textwidth]{./interrupt/images/entity.pdf}
}
\end{center}
\label{entity_interrupt}
\end{figure}

Du point de vue comportemental, son fonctionnement est le suivant. Dans le
fonctionnement d'un robot, nombre d'évênements sont asynchrones. Pour signaler
qu'un évênement s'est produit, le module génêre ce que l'on appel une
interruption. Le gestionnaire d'interruption aura pour but de prévenir qu'une
ou plusieurs interruptions se sont produitent et de permettre à l'ordinateur
d'identifier les modules ayant généré cette ou ces interruptions.

Chaque bloc ayant un fil d'interruption le relie au gestionnaire
d'interruption. Lorsqu'un bloc génère une interruption, celle-ci arrive au
gestionnaire d'interruption. Pour la générer, le bloc aura mis une ligne à
l'état haut et conservera cet état haut, tant que l'ordinateur n'aura pas
traité la dite interruption.

Lorsqu'une interruption est émise par un bloc, notre module la détecte et
transmet le signal IRQ sur le bus ISA. Dès que l'ordinateur est prêt à traiter
l'interruption, il demande à accéder au gestionnaire. 

Pour cela, il va lire successivement trois registres. Chaque registre est
représenté par une addresse différente. Chacun de ces registres contient un
masque. Les bits de ces masques signalent si un bloc a généré une interruption
ou non. En retour à chaque demande du PC, le gestionnaire placera sur le bus de
données le masque correspondant. 

Une fois les trois masques obtenus, l'ordinateur pourra alors déterminer quels
sont les différents modules a avoir émis des interruptions et choisir qui il
voudra traiter de manière prioritaire.

% Ici, on détail l'intérieur du bloc
\subsection{Architecture physique}

Voici donc une explication du fonctionnement de ce gestionnaire. On pourra
consulter l'architecture physique sur la figure \ref{archi_interrupt} page
\pageref{archi_interrupt}. 

\begin{figure}[htbp]
\caption{Architecture physique du bloc de gestion des interruptions}
\begin{center}
%\scalebox{0.7}{\includegraphics {./interrupt/images/archi_phy.pdf}}
\includegraphics[width=\textwidth]{./interrupt/images/archi_phy.pdf}
\end{center}
\label{archi_interrupt}
\end{figure}

%

% Fonctionnement du bloc d'interface ISA
Lorsque ce signal arrive, le séquenceur prévient le \textbf{module
d'interfaçage} avec le bus ISA. Ce module, qui jusqu'à présent avait ses
sorties à l'état haut, recopie alors sur en sorties (sur le bus ISA) ses
entrées. On attend alors plus que l'\textit{acquittement} de l'ordinateur pour
recommencer le cycle.






\subsection{Décomposition RTL}

% Ici, détailler chaque petit bloc et mettre le code VHDL correspondant.

\subsection{Simulation}

% mettre aussi peut-être les tests unitaires de chaque bloc ?

