From 2c77599e11c4e60441e18ebe5bfe67f1b3e7fa8d Mon Sep 17 00:00:00 2001 From: galmes Date: Fri, 19 Mar 2004 08:56:03 +0000 Subject: GPIO doc : Ajout du schéma d'architecture physique et ajout du texte lié --- 2004/n/fpga/doc/dcd/gpio/gpio.tex | 66 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 3 deletions(-) (limited to '2004/n/fpga/doc') diff --git a/2004/n/fpga/doc/dcd/gpio/gpio.tex b/2004/n/fpga/doc/dcd/gpio/gpio.tex index a6a30f9..91be3fb 100644 --- a/2004/n/fpga/doc/dcd/gpio/gpio.tex +++ b/2004/n/fpga/doc/dcd/gpio/gpio.tex @@ -106,9 +106,6 @@ comportementale du bloc d'entr \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. @@ -157,3 +154,66 @@ 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. + +\subsection{Architecture physique} + +Nous allons dans cette partie étudier plus en détails le fonctionnement +interne du module d'entrées /sorties. On pourra consulter l'architecture +physique sur la figure \ref{archi_gpio} page \pageref{archi_gpio}. + +\begin{figure}[htbp] +\caption{Architecture physique du bloc d'entrées / sorties} +\begin{center} +%\scalebox{0.7}{\includegraphics {./interrupt/images/archi_phy.pdf}} +\includegraphics[width=\textwidth]{./gpio/images/archi_phy.pdf} +\end{center} +\label{archi_gpio} +\end{figure} + +Comme on peut le constater, ce module est relativement simple. On peut le +décomposer en deux parties : la configuration et la lecture / écriture des +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 +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 +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. + +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 +bloc dès qu'on le sélectionne à l'aide du signal cs\_read\_output recopie les +entrées sorties sur le bus de données. On notera que ce module, de même que les trois registres, sont synchronisés sur l'horloge du bus ISA. + +\subsection{Décomposition RTL} + + +Commençons par décrire le fonctionnement des registres nommés + +% Reg_rw + +% Module haute impédance +Pour la lecture des valeurs sur les entrées / sorties, un composant nommé +\textit{tristate} est utilisé. Ce composant est en fait un module synchrone +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} +\item{Si enable est à l'état bas on recopie les entrées / sorties sur le bus +de données} +\end{itemize} + +\subsection{Simulation du bloc} -- cgit v1.2.3