SLEA-chrono/compte_rendu.tex
2017-12-15 14:33:14 +01:00

406 lines
14 KiB
TeX

\documentclass[french]{article}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\usepackage{MyPack2}
\usepackage{diagbox}
\usepackage{timing}
\geometry{top=2cm, bottom=2cm, left=2cm, right=2cm}
\title{Étude de laboratoire - SLEA}
\author{Binôme A11 \\ \bsc{Simon} Léo, \bsc{Levy--Falk} Hugo \\ Supélec, promo 2020}
\date{\today}
\begin{document}
\maketitle
\tableofcontents
\clearpage
\listoffigures
\newpage
\initPage{TL - SLEA}{\today}{\bsc{Simon}, \bsc{Levy--Falk}}
\part{Objectifs de ce TL}
\part{Étude préliminaire}
Afin de prendre en main le logiciel de simulation Quartus, on simule un décodeur BCD vers 7 segments.
\section{Saisie du schéma du montage}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/decodeur1.PNG}
\caption{Schéma saisi}
\label{fig:decodeur1}
\end{figure}
La figure \ref{fig:decodeur1} montre le montage que nous simulerons. On commence par le compiler le projet une première fois, en utilisant le mode \verb|smart compilation|.
\section{Affectation des entrées et sorties}
En consultant la documentation de la carte \bsc{Altera} disponible sur \verb|moodle.supelec.fr|, on repère les numéros des entrées correspondants aux micro-interrupteurs à la page 12 et les numéros des sorties correspondants à l'afficheur numéro 1. On crée la table d'assignation reproduite à la figure \ref{fig:decodeur2}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/decodeur2.PNG}
\caption{Assignation des I/O}
\label{fig:decodeur2}
\end{figure}
\section{Définition des vecteurs de simulation}
On crée un fichier \verb|decodeur.vwf| dans lequel on spécifie les chronogrammes imposés aux entrées. Après avoir lancé la simulation on obtient les chronogrammes de la figure \ref{fig:decodeur3}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/decodeur3.PNG}
\caption{Chronogramme obtenu par simulation fonctionnelle}
\label{fig:decodeur3}
\end{figure}
\section{Simulation fonctionnelle}
On a lancé une simulation fonctionnelle, il n'y a pas d'aléas. D'autre part, page 9 de la documentation nous informe sur l'afficheur 7 segments.
\begin{quotation}
Each LED segment of the display can be illuminated by driving the connected EPM7128S device I/O pin with a logic 0. Figure 4 shows the name of each segment.
\begin{figure}[h!]
\centering
\includegraphics[width=0.25\linewidth]{images/decodeurDigit.png}
\caption{Figure 4 de la documentation.}
\label{fig:decodeurDigit}
\end{figure}
\end{quotation}
On vérifie ainsi que le chronogramme correspond à l'affichage des chiffres de 0 à 9.
\section{Simulation temporelle}
On lance ensuite une simulation temporelle. La figure \ref{fig:decodeur4} montre l'apparition d'aléas dûs aux temps de propagation.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/decodeur4.PNG}
\caption{Simulation temporelle}
\label{fig:decodeur4}
\end{figure}
\section{Analyse temporelle}
L'analyse temporelle donne le temps de propagation entre les entrées et les sorties. La figure \ref{fig:decodeur5} montre que le temps de propagation est d'environ 30 ns.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/decodeur5.PNG}
\caption{Analyse temporelle.}
\label{fig:decodeur5}
\end{figure}
\section{Programmation}
\begin{figure}[h!]
\centering
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{images/decodeur6.jpg}
\caption{Affichage du chiffre 9}
\label{fig:decodeur6}
\end{minipage}
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{images/decodeur7.jpg}
\caption{Affichage du chiffre 5}
\label{fig:decodeur7}
\end{minipage}
\end{figure}
On programme la carte et on vérifie le fonctionnement en changeant l'état des interrupteurs, comme le montre les figures \ref{fig:decodeur6} et \ref{fig:decodeur7}.
\FloatBarrier
\clearpage
\part{Traitement d'un bouton poussoir}
Afin de détecter l'appui sur un bouton poussoir, on réalise un traitement de l'entrée associée. En effet il faut d'abord éliminer un éventuel bruit créé par les rebonds créés lors du changement de l'état du bouton et synchroniser le signal avec celui de l'horloge afin d'obtenir le signal \verb|BPS|. Cette partie est réalisée avec une bascule D (on suppose donc que le bruit dure moins d'une période d'horloge). On souhaite ensuite passer la sortie à l'état haut pendant une période d'horloge sur front montant de \verb|BPS|. On se propose de synthétiser cette partie avec une machine de \bsc{Moore} puis avec une machine de \bsc{Mealy}.
\section{Synthèse avec une machine de \bsc{Moore}}
\begin{figure}[h!]
\centering
\begin{wave}{3}{5}
\nextwave{BPS} \bit{0}{1} \bit{1}{3} \bit{0}{2}
\nextwave{SBPMoore} \bit{0}{2} \bit{1}{1} \bit{0}{3}
\end{wave}
\label{fig:chronoMooreTheo}
\caption{Chronogramme recherché}
\end{figure}
On commence par résumer à l'aide d'un chronogramme le comportement recherché pour le système, représenté à la figure \ref{fig:chronoMooreTheo}.
On souhaite réaliser une machine de \bsc{Moore}, c'est à dire $S = g(E_p)$ et $ E_S = f(E,E_p)$, avec $S$, $E_p$ et $E$ tels que représentés à la figure \ref{fig:diagrammeMoore}.
\begin{figure}[h!]
\centering
\begin{minipage}{0.45\linewidth}
\centering
\begin{tikzpicture}
\draw (0,0) -- (1,0) -- (1,-0.5) -- (1,-0.25) node[anchor=east] {g} --(1,-0.5) -- (0,-2) -- (0,0) --
(1,-1.5) -- (1,-1.75) node[anchor=east]{f} -- (1,-2) -- (0,-2);
\draw (0,-2.25) -- (1,-2.25) -- (1,-2.5) node[anchor=east]{D} -- (1,-3.25) -- (0.5, -3.25) node[anchor=south]{H} -- (0,-3.25) -- (0,-2.5) node[anchor=west]{Q} -- (0,-2.25);
\draw[->] (-0.5,-0.25) node[anchor=east] {BPS} -- (0,-0.25);
\draw[->] (1,-0.25) -- (1.5, -0.25) node[anchor=west] {SBPMoore};
\draw[->] (1,-1.75) -- (1.25,-1.75) node[anchor = west] {$E_S$}-- (1.25, -2.5) -- (1, -2.5);
\draw[->] (0,-2.5) -- (-0.25,-2.5) -- (-0.25, -1.75) node[anchor = east] {$E_p$}-- (0,-1.75);
\draw[->] (0.5,-3.5) -- (0.5,-3.25);
\end{tikzpicture}
\label{fig:diagrammeMoore}
\caption{Schéma général d'un système séquentiel synchrone}
\end{minipage}
\begin{minipage}{0.45\linewidth}
\centering
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2cm,
semithick]
\node[state] (A) {$E_0$};
\node [state](B)[right of=A]{$E_1$};
\node[state](C)[below of=A]{$E_2$};
\path (A) edge[loop left] node {0} (A)
(A) edge[bend left] node {1} (B)
(B) edge[bend left] node {1} (C)
(C) edge[loop left] node{1} (C)
(C) edge[bend left] node{0} (A)
(B) edge[bend left] node{0} (A)
;
\end{tikzpicture}
\label{fig:automateMoore}
\caption{Automate des états de la machine de \bsc{Moore}}
\end{minipage}
\end{figure}
On synthétise ensuite le fonctionnement de la machine en dessinant le graphe des états, représenté à la figure \ref{fig:automateMoore}. On obtient un graphe à trois états. Un premier état de repos, et deux autres permettants de passer la sortie au niveau 1 pendant un cycle d'horloge sur front montant de l'entrée.
On peut alors écrire le tableau des états (table \ref{tab:tableauEtatMoore}), en utilisant le codage des états reproduit dans la table \ref{tab:tableaucodeEtatMoore} (on pose $E_p = (y_1,y_0)$).
\begin{table}[h!]
\centering
\begin{minipage}{0.45\textwidth}
\centering
\begin{tabular}{| r | c c |}
\hline
& $y_1$ & $y_0$ \\
\hline
$E_0$ & 0 & 0 \\
$E_1$ & 0 & 1 \\
$E_2$ & 1 & 0 \\
\hline
\end{tabular}
\caption{Codage des états de la machine de \bsc{Moore}}
\label{tab:tableaucodeEtatMoore}
\end{minipage}
\begin{minipage}{0.45\textwidth}
\centering
\begin{tabular}{| c | c | c || l |}
\hline
\backslashbox{$E_p$}{$BPS$} & 0 & 1 & S \\
\hline
$E_0$ & $E_0$ & $E_1$ & 0 \\
$0\;0$ & $0\;0$ & $0\;1$ & \\
\hline
$E_1$ & $E_0$ & $E_2$ & 1 \\
$0\;1$ & $0\;0$ & $1\;0$ & \\
\hline
$E_2$ & $E_0$ & $E_2$ & 0 \\
$1\;0$ & $0\;0$ & $1\;0$ & \\
\hline
\end{tabular}
\caption{Tableau des états de la machine de \bsc{Moore}}
\label{tab:tableauEtatMoore}
\end{minipage}
\end{table}
On peut ensuite synthétiser l'état suivant $E_S$ et la sortie $S$ en fonction de $BPS$, $y_0$ et $y_1$. On réalise pour cela trois tableaux de \bsc{Karnaugh} (tables \ref{tab:KY0Moore}, \ref{tab:KY1Moore} et \ref{tab:KSMoore}).
\begin{table}[h!]
\centering
\begin{minipage}{0.45\textwidth}
\centering
\begin{tabular}{| c | c c c c |}
\hline
\backslashbox{$BPS$}{$y_1 y_0$} & 00 & 01 & 11 & 10 \\
\hline
0 & 0 & 0 & - & 0 \\
1 & 1 & 0 & - & 0 \\
\hline
\end{tabular}
\caption{Tableau de \bsc{Karnaugh} pour la variable $Y_0$}
\label{tab:KY0Moore}
\end{minipage}
\begin{minipage}{0.45\textwidth}
\centering
\begin{tabular}{| c | c c c c |}
\hline
\backslashbox{$BPS$}{$y_1 y_0$} & 00 & 01 & 11 & 10 \\
\hline
0 & 0 & 0 & - & 0 \\
1 & 0 & 1 & - & 1 \\
\hline
\end{tabular}
\caption{Tableau de \bsc{Karnaugh} pour la variable $Y_1$}
\label{tab:KY1Moore}
\end{minipage}
\begin{minipage}{0.45\textwidth}
\centering
\begin{tabular}{| c | c c c c |}
\hline
\backslashbox{$BPS$}{$y_1 y_0$} & 00 & 01 & 11 & 10 \\
\hline
0 & 0 & 1 & - & 0 \\
1 & 0 & 1 & - & 0 \\
\hline
\end{tabular}
\caption{Tableau de \bsc{Karnaugh} pour la variable $S$}
\label{tab:KSMoore}
\end{minipage}
\end{table}
On peut alors obtenir l'équation de chaque variables.
\begin{eqnarray}
Y_0 &=& BPS \cdot \bar{y_0} \cdot \bar{y_1} \\
Y_1 &=& BPS \cdot (y_0 + y_1) \\
S &=& y_0
\end{eqnarray}
Enfin, on vérifie que le fonctionnement est celui attendu par simulation, ce que montrent les figures \ref{fig:schemaBpMoore} et \ref{fig:chronoBpMoore}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/bp1.PNG}
\caption{Schéma du montage}
\label{fig:schemaBpMoore}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/bp2.PNG}
\caption{Chronogramme de la simulation}
\label{fig:chronoBpMoore}
\end{figure}
\section{Synthèse avec une machine de \bsc{Mealy}}
\begin{figure}[h!]
\centering
\begin{wave}{3}{5}
\nextwave{BPS} \bit{0}{1} \bit{1}{3} \bit{0}{2}
\nextwave{SBPMealy} \bit{0}{1} \bit{1}{1} \bit{0}{4}
\end{wave}
\label{fig:chronoMealyTheo}
\caption{Chronogramme recherché}
\end{figure}
On commence par résumer à l'aide d'un chronogramme le comportement recherché pour le système, représenté à la figure \ref{fig:chronoMealyTheo}.
On souhaite réaliser une machine de \bsc{Mealy}, c'est à dire $S = g(E, E_p)$ et $ E_S = f(E,E_p)$, avec $S$, $E_p$ et $E$ tels que représentés à la figure \ref{fig:diagrammeMealy}.
\begin{figure}[h!]
\centering
\begin{minipage}{0.45\linewidth}
\centering
\begin{tikzpicture}
\draw (0,0) -- (1,0) -- (1,-0.5) -- (1,-0.25) node[anchor=east] {g} --(1,-0.5) -- (0,-2) -- (0,0) --
(1,-1.5) -- (1,-1.75) node[anchor=east]{f} -- (1,-2) -- (0,-2);
\draw (0,-2.25) -- (1,-2.25) -- (1,-2.5) node[anchor=east]{D} -- (1,-3.25) -- (0.5, -3.25) node[anchor=south]{H} -- (0,-3.25) -- (0,-2.5) node[anchor=west]{Q} -- (0,-2.25);
\draw[->] (-0.5,-0.25) node[anchor=east] {BPS} -- (0,-0.25);
\draw[->] (1,-0.25) -- (1.5, -0.25) node[anchor=west] {SBPMealy};
\draw[->] (1,-1.75) -- (1.25,-1.75) node[anchor = west] {$E_S$}-- (1.25, -2.5) -- (1, -2.5);
\draw[->] (0,-2.5) -- (-0.25,-2.5) -- (-0.25, -1.75) node[anchor = east] {$E_p$}-- (0,-1.75);
\draw[->] (0.5,-3.5) -- (0.5,-3.25);
\end{tikzpicture}
\label{fig:diagrammeMealy}
\caption{Schéma général d'un système séquentiel synchrone}
\end{minipage}
\begin{minipage}{0.45\linewidth}
\centering \begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2cm,
semithick]
\node[state] (A) {$E_0$};
\node [state](B)[right of=A]{$E_1$};
\path node[above left=0.25cm]{$S=BPS$}(A) edge[loop left] node {0} (A)
(A) edge[bend left] node {1} (B)
(B) edge[bend left] node{0} (A)
node[above right=0.25cm]{$S=0$}(B) edge[loop right] node {1} (B)
;
\end{tikzpicture}
\label{fig:automateMealy}
\caption{Automate des états de la machine de \bsc{Moore}}
\end{minipage}
\end{figure}
On synthétise ensuite le fonctionnement de la machine en dessinant le graphe des états, représenté à la figure \ref{fig:automateMealy}. On obtient un graphe à deux états. Un premier état de repos qui permet de passer la sortie à l'état un dès que le bouton poussoir est enfoncé, et un autre permettant empêchant la sortie de rester au niveau haut plus d'un cycle d'horloge lors de l'appui.
On peut ensuite synthétiser l'état suivant $E_S$ et la sortie $S$ en fonction de $BPS$ et $E_p$. On réalise pour cela deux tableaux de \bsc{Karnaugh} (tables \ref{tab:KESMealy}, \ref{tab:KSMealy}).
\begin{table}[h!]
\centering
\begin{minipage}{0.45\textwidth}
\centering
\begin{tabular}{| c | c c |}
\hline
\backslashbox{$BPS$}{$E_p$} & 0 & 1 \\
\hline
0 & 0 & 1 \\
1 & 0 & 1 \\
\hline
\end{tabular}
\caption{Tableau de \bsc{Karnaugh} pour la variable $E_S$}
\label{tab:KESMealy}
\end{minipage}
\begin{minipage}{0.45\textwidth}
\centering
\begin{tabular}{| c | c c |}
\hline
\backslashbox{$BPS$}{$E_p$} & 0 & 1 \\
\hline
0 & 0 & 1 \\
1 & 0 & 0 \\
\hline
\end{tabular}
\caption{Tableau de \bsc{Karnaugh} pour la sortie}
\label{tab:KSMealy}
\end{minipage}
\end{table}
On peut alors obtenir l'équation de chaque variables.
\begin{eqnarray}
E_S &=& BPS \\
S &=& BPS \cdot \bar{E_p}
\end{eqnarray}
Enfin, on vérifie que le fonctionnement est celui attendu par simulation, ce que montrent les figures \ref{fig:schemaBpMealy} et \ref{fig:chronoBpMealy}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/bp3.PNG}
\caption{Schéma du montage}
\label{fig:schemaBpMealy}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{images/bp4.PNG}
\caption{Chronogramme de la simulation}
\label{fig:chronoBpMealy}
\end{figure}
\end{document}