summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd/interrupt/interrupt.tex
blob: af9cf6118054e0c500748378dec0711c0d631134 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
\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}


Comme on peut le constater, ce module est tr�s simple. En effet, celui-ci est
compos� uniquement de 3 bloc OR � huit entr�es, d'un bloc OR � trois entr�es
et de 3 bloc three-state � huits entr�es chacun.

Son fonctionnement interne est donc le suivant. Lorsqu'une interruption arrive
sur un des blocs, un signal IRQ est g�n�r� par les blocs OR. Lorsque le PC
d�sire consulter qui a g�n�r� une interruption, il active successivement les
blocs three-state qui passent alors d'un �tat haute imp�dance � un �tat dans
lequel sont recopi�es en sortie les entr�es.


\subsection{D�composition RTL}

% Ici, d�tailler chaque petit bloc et mettre le code VHDL correspondant.
\subsubsection{Les blocs OR logiques : OR3 et OR8}

\subsubsection{Le bloc trois-�tats : tristate}

Pour la lecture des valeurs sur les entr�es / sorties, un composant nomm�
\textit{tristate} est utilis�. L'entity de ce module est la suivante :

\begin{itemize}
\item{8 signaux d'entr�e}
\item{8 signaux de sortie}
\item{1 signal enable}
\end{itemize}

Ce composant est en fait un module asynchrone compos� de huits composants
trois �tats. Son comportement est donc le suivant :

\begin{itemize}
\item{Si enable (repr�sent� par cs\_read\_output sur le sch�ma) est � un �tat
bas, les sorties sont dans un �tat haute imp�dance (not� 'Z')}
\item{Si enable est � l'�tat bas on recopie les entr�es / sorties sur le bus
de donn�es}
\end{itemize}

Le listing de ce composant se trouve en annexe . 


\subsection{Simulation}

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