summaryrefslogtreecommitdiff
path: root/2004/n/fpga
diff options
context:
space:
mode:
authorgalmes2004-04-05 20:32:39 +0000
committergalmes2004-04-05 20:32:39 +0000
commit69c4a58758a4930319004fe97e92c05a612d111e (patch)
tree7c53a5c32d377e6f80891aca8c7b67f5d5141f03 /2004/n/fpga
parent9e8733884aea099d87f1cb257c880ec9b5fb9c7c (diff)
GPIO : ajout des listings.
Diffstat (limited to '2004/n/fpga')
-rw-r--r--2004/n/fpga/doc/dcd/gpio/gpio.tex89
-rw-r--r--2004/n/fpga/doc/dcd/rapport.tex5
2 files changed, 57 insertions, 37 deletions
diff --git a/2004/n/fpga/doc/dcd/gpio/gpio.tex b/2004/n/fpga/doc/dcd/gpio/gpio.tex
index 8acfe2d..d7bf1ed 100644
--- a/2004/n/fpga/doc/dcd/gpio/gpio.tex
+++ b/2004/n/fpga/doc/dcd/gpio/gpio.tex
@@ -92,23 +92,30 @@ Pour résumer, voici quelques informations utiles :
\subsection{Exemple d'utilisation du module}
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
+aux chronogrammes des figures \ref{gpio_behav_sim1} page
+\pageref{gpio_behav_sim1} et \ref{gpio_behav_sim2} page
+\pageref{gpio_behav_sim2}. Ce chronogramme représente la simulation
comportementale du bloc d'entrées sorties.
-%% TODO : Se débrouiller pour inclure l'image
+%% TODO : Se débrouiller pour inclure les DEUX images
% 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}
+\begin{figure}[htbp]
+\begin{center}
+\includegraphics[height=0.6\textheight,angle=90]{./gpio/sim/gpio_behav_sim1.pdf}
+%\includegraphics[width=0.7\textwidth,angle=90]{./gpio/sim/gpio_behav_sim1.pdf}
+\end{center}
+\label{gpio_behav_sim1}
+\end{figure}
+
+\begin{figure}[htbp]
+\begin{center}
+\includegraphics[height=0.6\textheight,angle=90]{./gpio/sim/gpio_behav_sim2.pdf}
+%\includegraphics[width=0.7\textwidth,angle=90]{./gpio/sim/gpio_behav_sim1.pdf}
+\end{center}
+\label{gpio_behav_sim2}
+\end{figure}
Dans cet exemple, nous allons configurer puis utiliser le bloc d'entrées /
sorties. La première action à effectuer est une remise-à-zéro du bloc à l'aide
@@ -135,16 +142,12 @@ select : cs\_reg\_direction ) est à un état haut et qu'il y a un front montant
de l'horloge (clk\_b) du bus, on configure le bloc avec les signaux sur le bus
de données.
-De la même manière, on configure ensuite les masques d'interruptions.
-
-% TODO : continuer icicicicicicicicicicicicicicicicici.
-
-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.
+De la même manière, on configure ensuite les masques d'interruptions. On
+positionne la valeur $11100000$ dans le registre reg\_it\_up et la valeur
+$00011000$ dans le registre reg\_it\_down. Dans cette configuration, on vient
+d'autoriser les interruptions sur les pins en entrée du bloc. Les registres
+ainsi positionnés vont donc autoriser le déclenchement des interruptions des 3
+bits de poid fort sur front montant, et des bits 4 et 5 sur front descendant.
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
@@ -153,15 +156,17 @@ 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.
+Dans la suite, on se propose de relire les valeurs affectées aux différents
+registres. C'est ce que l'on fait. On vérifie successivement les masques
+d'interruptions, le registre de direction puis le registre de données.
+Finalement le PC lit 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.
+lorsque l'état des "capteurs" change. Ici, on remarquera que c'est un front
+descendant qui génère cette interruption. Le bloc d'entrées /sorties attend
+alors que le PC demande à lire les entrées / sorties pour achever
+l'interruption.
\subsection{Architecture physique}
@@ -184,21 +189,21 @@ entrées et sorties. Nous commencerons par nous pencher sur la configuration du
bloc.
Nous avons vu précédement que pour la configuration d'un bloc d'entrées /
-sorties, il y avait deux registres de configuration, un registre contenant un
-masque déterminant la direction de chaque pin et un registre contenant un
-masque d'interruption. On retrouve bien ces deux registres sur le schéma
+sorties, il y avait trois registres de configuration. Un registre contenant un
+masque déterminant la direction de chaque pin et deux registres contenant des
+masques d'interruptions. On retrouve bien ces trois registres sur le schéma
directement connectés au bus de données.
On trouve un troisième registre nommé registre de données. Celui-ci est chargé
de mémoriser les valeurs à mettre sur les pins du bloc qui sont configurées en
sortie.
-Pour revenir aux registres de configuration, ils sont alors connectés sur deux
-autres blocs. Le premier, est le gestionnaire de direction et a pour but de
+Pour revenir aux registres de configuration, ils sont alors connectés sur
+d'autres blocs. Le premier, est le gestionnaire de direction et a pour but de
recopier les valeurs du registre de données uniquement sur les pins qui sont
-configurées en sorties. Le deuxième est le gestionnaire d'interruption qui est
-chargé de générer les interruptions. On voit que pour cela il s'aide du masque
-d'interruption.
+configurées en sorties. Les deuxièmes et troisièmes sont les gestionnaires
+d'interruptions qui sont chargés de générer les interruptions. On voit que
+pour cela ils s'aident des masques d'interruptions "haut" et "bas".
Finalement, pour la lecture des entrées / sorties on connecte directement sur
les pins un bloc à trois états (état bas, état haut et haute impédance). Ce
@@ -207,10 +212,20 @@ entrées sorties sur le bus de données. On notera que ce module, de même que les
\subsection{Décomposition RTL}
+% TODO : ICICICICCIC
Commençons par décrire le fonctionnement des registres nommés
% Reg_rw
+\lstinputlisting{../../src/registre/reg_rw.vhd}
+
+\lstinputlisting{../../src/three-state/tristate.vhd}
+
+\lstinputlisting{../../src/gpio/gpio.vhd}
+
+\lstinputlisting{../../src/gpio/gpio_it_detect_up.vhd}
+
+\lstinputlisting{../../src/gpio/gpio_it_detect_down.vhd}
% Module haute impédance
Pour la lecture des valeurs sur les entrées / sorties, un composant nommé
diff --git a/2004/n/fpga/doc/dcd/rapport.tex b/2004/n/fpga/doc/dcd/rapport.tex
index 07ccccb..b3d8d8a 100644
--- a/2004/n/fpga/doc/dcd/rapport.tex
+++ b/2004/n/fpga/doc/dcd/rapport.tex
@@ -10,6 +10,8 @@
%\usepackage[pdftex]{graphicx,color}
%\usepackage{verbatim}
\usepackage{times}
+% Pour inclure les listings VHDL
+\usepackage{listings}
% Pour les maths :
%\usepackage{amssymb}
@@ -32,6 +34,9 @@ Prot}}
% Structure du document :
\begin{document}
+% Pour inclure des listings en VHDL
+\lstset{language=VHDL,extendedchars=true,inputencoding=latin1,breaklines}
+
\title{Pré-projet de VHDL : \\ Réalisation d'un périphérique ISA pour
PC104}
\author{Thomas Burg - Pierre-Andre Galmes - Fidèle Gafan - Pierre Prot\\ EFREI - Ingénieur