summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd
diff options
context:
space:
mode:
authorgalmes2004-03-18 21:21:09 +0000
committergalmes2004-03-18 21:21:09 +0000
commit7fa46cda17cfd73c0eae13e64c048e3074661b64 (patch)
treeb7b7cdc6910648d89edb92de5ec18f157da1f45a /2004/n/fpga/doc/dcd
parente9078d509d9634b853958576ac7de4960b1e1f10 (diff)
GPIO : Ajout d'un exemple dans la documentation pour aider à la compréhension
du fonctionnement du module.
Diffstat (limited to '2004/n/fpga/doc/dcd')
-rw-r--r--2004/n/fpga/doc/dcd/gpio/gpio.tex108
-rw-r--r--2004/n/fpga/doc/dcd/gpio/images/archi_phy.fig63
2 files changed, 134 insertions, 37 deletions
diff --git a/2004/n/fpga/doc/dcd/gpio/gpio.tex b/2004/n/fpga/doc/dcd/gpio/gpio.tex
index 50911e8..a6a30f9 100644
--- a/2004/n/fpga/doc/dcd/gpio/gpio.tex
+++ b/2004/n/fpga/doc/dcd/gpio/gpio.tex
@@ -30,7 +30,7 @@ On pourra voir la figure \ref{entity_gpio} page
\begin{figure}[htbp]
\caption{Entity du bloc de gestion des interruptions}
\begin{center}
-\scalebox{0.7}{
+\scalebox{0.6}{
\includegraphics {./gpio/images/entity.pdf}
%\includegraphics[width=\textwidth]{./interrupt/images/entity.pdf}
}
@@ -38,35 +38,42 @@ On pourra voir la figure \ref{entity_gpio} page
\label{entity_gpio}
\end{figure}
-Du point de vue comportemental, son fonctionnement est le suivant. Au début,
+Du point de vue comportemental son fonctionnement est le suivant. Au début,
le PC configure le bloc après avoir envoyé un signal de remise à zéro. Il
-commence par configurer les différents fils soit en entrées, soit en sorties.
-Ensuite le PC configure quels fils devront générer une interruption. Une fois
-cela fait, il peut lire et écrire des données sur les entrées et sorties. La
-configuration du bloc gpio est réalisées en écrivant dans des registres.
+commence par configurer les différentes pins du bloc soit en entrées, soit en
+sorties. Ensuite le PC configure quelles pins pourront générer une interruption.
+Une fois cela fait, il peut lire et écrire des données sur les entrées et
+sorties. La configuration du bloc gpio est réalisées en écrivant dans des
+registres.
On remarque que ce module possède quatres signaux "chip select" :
cs\_reg\_data, cs\_reg\_direction, cs\_reg\_it\_mask et cs\_read\_output.
Le signal cs\_read\_output permet de lire l'états de 8 broches d'entrées /
-sorties. Les autres signaux permettent d'accéder aux registres contenant le
-masque des directions, le masque d'interruption et les données à mettre sur
-les lignes en sorties.
+sorties. Les autres signaux permettent d'accéder aux registres contenant
+respectivement, le masque des directions, le masque d'interruption et les
+données à mettre sur les lignes en sorties.
Ces trois registres ont la particularité de pouvoir être écrit mais aussi lu.
En effet, pour la phase de teste il nous semble utile que les registres
puissent être relus. Ainsi on pourra s'assurer que la configuration est bien
-celle désirée. Voici donc les procédures d'écriture et de lecture des
-registres.
+celle désirée.
+
+Voici comment se déroule les procédures d'écriture et de lecture dans les
+registres. La procédure d'écriture est la suivante. Tout d'abord, le module
+dirigeant le bloc écrit sur le bus de donnés l'octet lui permettant de
+configurer tel ou tel registre.
-La procédure d'écriture est la suivante. Tout d'abord, le PC écrit sur le bus
-de donnés l'octet lui permettant de configurer tel ou tel registre.
Simultanément, il positionne le signal $R\bar{W}$ en mode écriture (Write).
Finalement, il sélectionne à l'aide d'un des signal CS (Chip select) le
registre dans lequel il veut écrire.
La procédure de lecture s'effectue en positionnant le signal $R\bar{W}$ en
lecture (Read), puis en sélectionnant le chip select du registre auquel on
-désire accéder.
+désire accéder.
+
+On notera que pour interfacer ce bloc et le bus ISA, il faut un module dont le
+rôle sera de convertir les signaux du bus ISA en les signaux $R\bar{W}$ et les
+signaux de "chip select" (CS).
Pour résumer, voici quelques informations utiles :
\begin{itemize}
@@ -78,10 +85,75 @@ Pour résumer, voici quelques informations utiles :
état bas}
\end{itemize}
-% Voici un exemple pour illustrer les discours précédents.
+\subsection{Exemple d'utilisation du module}
-% Ajouter le chronogramme du test des gpio.
-% Mettre en R / W_barre. si c'est cela. Ajouter quelle valeur est on a une
-% interruption et quelle valeur dis a pas !
+Voici un exemple pour illustrer les discours précédents. On pourra se reporter
+aux chronogrammes de la figure \ref{gpio_behav_simul} page
+\pageref{gpio_behav_simul}. Ce chronogramme représente la simulation
+comportementale du bloc d'entrées sorties.
+
+
+%% TODO : Se débrouiller pour inclure l'image
+
+% Commande sympas : convert -rotate -90 fichier.tiff fichier.pdf
+\begin{figure}[htbp]
+\begin{center}
+%\scalebox{0.6}{
+%\includegraphics {./gpio/sim/gpio_behavior_simul.pdf}
+%}
+\includegraphics[height=0.7\textwidth,angle=90]{./gpio/sim/gpio_behavior_simul.pdf}
+\end{center}
+\label{gpio_behav_simul}
+\end{figure}
+% Ajouter le chronogramme du test des gpio.
% Copier la suite dans le fichier de la gestion des interruptions !
+
+Dans cet exemple, nous allons configurer puis utiliser le bloc d'entrée /
+sorties. La première action à effectuer est une remise-à-zéro du bloc à l'aide
+de son signal reset. C'est ce que l'on remarque lorsque le signal rst est à 1.
+Ce signal doit garder un état haut durant au moins une prériode d'horloge du
+bus ISA (clk\_i).
+
+On remarque que sur les entrées /sorties, on simule le fait d'avoir branché
+des capteurs sur les cinq lignes de poid fort. On voit donc apparaître sur la
+la sortie les valeurs $00001ZZZ$. Cela signifie que l'on laisse les trois pins
+de poid fort dans un état de haute impédance.
+
+Une fois cela fait, on configure alors le bloc. Pour ce faire, l'ordinateur
+place tout d'abord sur le bus de données le masque de direction. Dans
+l'exemple, le masque est $00000111$, ce qui signifie que l'on désire
+positionner les 3 pins de poid faible en sorties. On peut alors constater que
+les trois pins du bloc qui sont en sortie, prennent la valeur $0$. Cela vient
+du fait que lors du reset, on a remis le bloc à zéro, et par défaut, les
+sorties sont à zéro d'ou les signaux obtenus.
+
+On remarquera aussi que la ligne $R\bar{W}$ est en écriture. Ainsi, dès que
+la ligne de validation du registre de configuration des directions (ligne chip
+select : cs\_reg\_direction ) est à un état haut et qu'il y a un front
+montant de l'horloge (clk\_i) du bus ISA, on configure le bloc avec les
+signaux sur le bus de données.
+
+De la même manière, on configure ensuite le masque d'interruption pour lequel
+on conserve la valeur $11111000$. On remarque que cet octet est le
+complémentaire du masque de direction. Dans cette configuration, on vient
+d'autoriser les interruptions sur les pins en entrée du bloc. Ainsi, dès qu'il
+y aura un changement d'état sur l'une des cinq pins de poid fort, une
+interruption sera générée.
+
+Ensuite, on transmet au bloc les signaux que l'on désire voir sur les lignes
+en sortie du bloc. Dans notre cas on transmet $00000001$. Comme seules les
+trois pins de poid faible sont en sortie, on recopie en sortie $ZZZZZ001$ sans
+tenir compte des bits de poid fort. Comme les "capteurs simulés" sur les cinq
+bits de poid fort génèrent les valeurs $00001ZZZ$, on retrouve sur la sortie
+un mélange de ces signaux, d'où la valeur de $00001001$.
+
+Dans la suite, on se propose de relire les valeurs affectées. C'est ce que
+l'on fait. On vérifie successivement le masque d'interruption, le registre de
+direction puis le registre de données. Finalement le PC veut lire les valeurs
+situées sur les entrées sorties, ce qui est réalisé grâce au signal
+cs\_read\_output.
+
+On remarquera aussi le signal d'interruption. Celui-ci passe à l'état haut
+lorsque l'état des "capteurs" change. Le bloc d'entrées /sorties attend alors
+que le PC demande à lire les entrées / sorties pour achever l'interruption.
diff --git a/2004/n/fpga/doc/dcd/gpio/images/archi_phy.fig b/2004/n/fpga/doc/dcd/gpio/images/archi_phy.fig
index 4021fa9..4054404 100644
--- a/2004/n/fpga/doc/dcd/gpio/images/archi_phy.fig
+++ b/2004/n/fpga/doc/dcd/gpio/images/archi_phy.fig
@@ -197,7 +197,16 @@ Single
4050 2250 5850 2250
4 2 0 50 -1 0 12 0.0000 4 135 105 4950 2475 8\001
-6
-6 5850 -2025 7650 0
+6 8775 1575 10125 2475
+6 9225 1575 10125 2250
+4 0 0 50 -1 0 12 0.0000 4 180 435 9225 1800 Input\001
+4 0 0 50 -1 0 12 0.0000 4 180 840 9225 2055 Output (8)\001
+-6
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
+ 2 1 2.00 75.00 120.00
+ 2 1 2.00 75.00 120.00
+ 9000 2250 9900 2250
+-6
6 5850 -1125 7650 0
6 6300 -900 7200 -225
4 1 0 50 -1 0 12 0.0000 4 165 885 6750 -675 Bloc haute\001
@@ -206,25 +215,14 @@ Single
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
5850 -1125 7650 -1125 7650 0 5850 0 5850 -1125
-6
-6 6300 -2025 7200 -1125
-6 6300 -2025 7200 -1350
-4 1 0 50 -1 0 12 0.0000 4 165 615 6750 -1800 cs_read\001
-4 1 0 50 -1 0 12 0.0000 4 165 540 6750 -1545 output\001
+6 5850 -2025 6750 -1125
+6 5850 -2025 6750 -1350
+4 1 0 50 -1 0 12 0.0000 4 165 615 6300 -1800 cs_read\001
+4 1 0 50 -1 0 12 0.0000 4 165 540 6300 -1545 output\001
-6
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
- 6750 -1575 6750 -1125
--6
--6
-6 8775 1575 10125 2475
-6 9225 1575 10125 2250
-4 0 0 50 -1 0 12 0.0000 4 180 435 9225 1800 Input\001
-4 0 0 50 -1 0 12 0.0000 4 180 840 9225 2055 Output (8)\001
--6
-2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
- 2 1 2.00 75.00 120.00
- 2 1 2.00 75.00 120.00
- 9000 2250 9900 2250
+ 6300 -1575 6300 -1125
-6
6 5850 4050 7650 5850
6 5850 4725 7650 5850
@@ -239,6 +237,15 @@ Single
6300 4725 6300 4275
4 1 0 50 -1 0 12 0.0000 4 180 885 6300 4275 clk_master\001
-6
+6 6975 3825 7425 4275
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 6975 3825 7425 3825 7425 4275 6975 4275 6975 3825
+4 1 0 50 -1 0 12 0.0000 4 135 270 7200 4050 OR\001
+-6
+6 5850 3150 6750 3825
+4 1 0 50 -1 0 12 0.0000 4 165 615 6300 3375 cs_read\001
+4 1 0 50 -1 0 12 0.0000 4 165 540 6300 3630 output\001
+-6
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
2 1 2.00 75.00 120.00
4050 5175 5850 5175
@@ -282,8 +289,26 @@ Single
2 1 2.00 75.00 120.00
2 1 2.00 75.00 120.00
2250 5175 1350 5175
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 7200 -1575 7200 -1125
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 2 1 1.00 60.00 120.00
7200 4725 7200 4275
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 6975 3375 6975 3825
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 10575 0 10575 450
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6750 3375 6975 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 7425 3375 7425 3825
4 0 0 50 -1 0 16 0.0000 4 255 3240 1125 -2700 Genral Purpose Input Output\001
4 2 0 50 -1 0 12 0.0000 4 180 1905 6750 1125 masque de direction (8)\001
-4 1 0 50 -1 0 12 0.0000 4 135 270 7200 4275 Rst\001
+4 1 0 50 -1 0 12 0.0000 4 165 540 9900 -2475 output\001
+4 1 0 50 -1 0 12 0.0000 4 180 660 7200 -1575 clk_ISA\001
+4 1 0 50 -1 0 12 0.0000 4 135 270 7425 3375 Rst\001
+4 1 0 50 -1 0 12 0.0000 4 165 495 7425 4500 Rst_it\001