600 lines
20 KiB
TeX
600 lines
20 KiB
TeX
\documentclass[a4paper,french,12pt]{article}
|
|
|
|
\title{Logique Programmable}
|
|
\author{Catherine MARECHAL --- \href{mailto:catherine.marechal@efrei.fr}{\nolinkurl{catherine.marechal@efrei.fr}}}
|
|
\date{Dernière compilation~: \today{} à \currenttime}
|
|
|
|
\usepackage{../cours}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
\tableofcontents
|
|
|
|
\clearpage
|
|
\section{Prérequis}
|
|
|
|
\subsection{Logique booléenne}
|
|
|
|
Un composant discret n'a pas plus de 4 portes en alimentation continue.
|
|
7400 (gamme commerciale) ou 5400 (gamme militaire)
|
|
2 entrées et 1 sortie (3 broches) * 4 portes = 12 broches
|
|
|
|
Plusieurs technologies sont possibles~:
|
|
|
|
\begin{itemize}
|
|
|
|
\item chimique
|
|
|
|
\item hydraulique
|
|
|
|
\item pneumatique
|
|
|
|
\item mécanique
|
|
|
|
\item électromécanique
|
|
|
|
\item électrique
|
|
|
|
\item électronique (ce qui nous intéresse)
|
|
|
|
\end{itemize}
|
|
|
|
On détermine un état bas et un état haut~:
|
|
|
|
\begin{itemize}
|
|
|
|
\item état bas < tension VIL (input low)
|
|
|
|
\item état haut > tension VIH (input high)
|
|
|
|
\end{itemize}
|
|
|
|
Quand on passe de l'un à l'autre, c'est pour une très courte période.
|
|
|
|
Pour les fonctions de base, voir \url{http://www.futurlec.com/IC74LS00Series.shtml}
|
|
|
|
Avec \texttt{AND} et \texttt{OR} on peut fabriquer toutes les briques possibles.
|
|
|
|
En notation booléenne~:
|
|
|
|
\begin{itemize}
|
|
|
|
\item H (high) = 1 = vrai
|
|
|
|
\item L (low) = 0 = faux
|
|
|
|
\end{itemize}
|
|
|
|
\subsubsection{Suiveur}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/suiveur.png}
|
|
|
|
La sortie est égale à l'entrée ($S = E$).
|
|
|
|
\end{multicols}
|
|
|
|
|
|
\begin{center}
|
|
|
|
Table de vérité~:
|
|
|
|
\begin{tabular}{c|c}
|
|
E & S \\
|
|
\midrule
|
|
L & L \\
|
|
H & H \\
|
|
\end{tabular}
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{Inverseur}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/inverseur.png}
|
|
|
|
La sortie est l'inverse de l'entrée ($S = \bar{E}$).
|
|
|
|
\end{multicols}
|
|
|
|
\begin{center}
|
|
|
|
Table de vérité~:
|
|
|
|
\begin{tabular}{c|c}
|
|
E & S \\
|
|
\midrule
|
|
L & H \\
|
|
H & L \\
|
|
\end{tabular}
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{OU logique --- \texttt{OR} ($+$)}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/or.png}
|
|
|
|
\columnbreak{}
|
|
|
|
Pour que $S$ soit vrai il suffit qu'\emph{une seule} entrée soit vraie.
|
|
|
|
Pour que $S$ soit faux il faut que \emph{toutes} les entrées soient fausses.
|
|
|
|
\end{multicols}
|
|
|
|
\begin{center}
|
|
|
|
Tables de vérité~:
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
$E_1$ & $E_2$ & $E_1 + E_2$ \\
|
|
\midrule
|
|
0 & 0 & 0 \\
|
|
0 & 1 & 1 \\
|
|
1 & 0 & 1 \\
|
|
\end{tabular}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
X & Y & S \\
|
|
\midrule
|
|
L & L & L \\
|
|
L & H & H \\
|
|
H & L & H \\
|
|
H & H & H \\
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
|
|
\end{center}
|
|
|
|
\begin{align*}
|
|
a + 0 &= a \\
|
|
a + 1 &= 1 \\
|
|
a + a &= a \\
|
|
a + \bar{a} &= 1 \\
|
|
\end{align*}
|
|
|
|
\subsubsection{ET logique --- \texttt{AND} ($\cdot$)}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/and.png}
|
|
|
|
C'est l'inverse du OU\@.
|
|
Pour que $S$ soit vrai il faut que toutes les entrées soient vraies.
|
|
|
|
\end{multicols}
|
|
|
|
\begin{center}
|
|
|
|
Tables de vérité~:
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
$E_1$ & $E_2$ & $E_1 \cdot E_2$ \\
|
|
0 & 0 & 0 \\
|
|
0 & 1 & 0 \\
|
|
1 & 0 & 0 \\
|
|
1 & 1 & 1 \\
|
|
\end{tabular}
|
|
|
|
\columnbreak{}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
X & Y & S \\
|
|
\midrule
|
|
L & L & L \\
|
|
L & H & L \\
|
|
H & L & L \\
|
|
H & H & H \\
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{OU exclusif --- \texttt{XOR} ($\oplus$)}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/xor.png}
|
|
|
|
Pour que $S$ soit vrai il faut \emph{soit} que $E_1$ soit vrai \emph{soit} que $E_2$ soit vrai.
|
|
|
|
\end{multicols}
|
|
|
|
\begin{center}
|
|
|
|
Tables de vérité~:
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
$E_1$ & $E_2$ & $E_1 \oplus E_2$ \\
|
|
\midrule
|
|
0 & 0 & 0 \\
|
|
0 & 1 & 1 \\
|
|
1 & 0 & 1 \\
|
|
1 & 1 & 0 \\
|
|
\end{tabular}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
X & Y & S \\
|
|
\midrule
|
|
L & L & L \\
|
|
L & H & H \\
|
|
H & L & H \\
|
|
H & H & L \\
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
|
|
\end{center}
|
|
|
|
\begin{align*}
|
|
a \oplus 0 &= a \\
|
|
a \oplus 1 &= \bar{a} \\
|
|
a \oplus a &= 0 \\
|
|
a \oplus \bar{a} &= 1 \\
|
|
\end{align*}
|
|
|
|
\subsubsection{Non OU --- \texttt{NOR} ($\overline{+}$)}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/nor.png}
|
|
|
|
Pour que $S$ soit vrai, il faut que $E_1$ et $E_2$ soient faux.
|
|
|
|
\end{multicols}
|
|
|
|
Théorême de Morgan~: $\overline{a + b} = \bar{a} \cdot \bar{b}$
|
|
|
|
\begin{center}
|
|
|
|
Tables de vérité~:
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
$E_1$ & $E_2$ & $\overline{E_1 + E_2}$ \\
|
|
\midrule
|
|
0 & 0 & 1 \\
|
|
0 & 1 & 0 \\
|
|
1 & 0 & 0 \\
|
|
1 & 1 & 0 \\
|
|
\end{tabular}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
X & Y & S \\
|
|
\midrule
|
|
L & L & H \\
|
|
L & H & L \\
|
|
H & L & L \\
|
|
H & H & L \\
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{Non ET --- \texttt{NAND} ($\overline{\cdot}$)}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/nand.png}
|
|
|
|
Pour que $S$ soit vrai il suffit qu'entrée soit fausse.
|
|
|
|
\end{multicols}
|
|
|
|
Théorême de Morgan~: $\overline{a \cdot b} = \bar{a} + \bar{b}$
|
|
|
|
\begin{center}
|
|
|
|
Tables de vérité~:
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
$E_1$ & $E_2$ & $\overline{E_1 \cdot E_2}$ \\
|
|
\midrule
|
|
0 & 0 & 1 \\
|
|
0 & 1 & 1 \\
|
|
1 & 0 & 1 \\
|
|
1 & 1 & 0 \\
|
|
\end{tabular}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
X & Y & S \\
|
|
\midrule
|
|
L & L & H \\
|
|
L & H & H \\
|
|
H & L & H \\
|
|
H & H & L \\
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{Non OU exclusif --- \texttt{NO XOR} ($\overline{\oplus}$)}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\includegraphics[width=0.2\linewidth]{./img/xnor.png}
|
|
|
|
Pour que $S$ soit vrai il faut que les entrées soient identiques.
|
|
|
|
\end{multicols}
|
|
|
|
\begin{center}
|
|
|
|
Tables de vérité~:
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
$E_1$ & $E_2$ & $\overline{E_1 \oplus E_2}$ \\
|
|
\midrule
|
|
0 & 0 & 1 \\
|
|
0 & 1 & 0 \\
|
|
1 & 0 & 0 \\
|
|
1 & 1 & 1 \\
|
|
\end{tabular}
|
|
|
|
\begin{tabular}{c|c|c}
|
|
X & Y & S \\
|
|
\midrule
|
|
L & L & H \\
|
|
L & H & L \\
|
|
H & L & L \\
|
|
H & H & H \\
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
|
|
\end{center}
|
|
|
|
\clearpage
|
|
\subsection{Algèbre booléenne}
|
|
|
|
Le ET est prioritaire sur le OU\@.
|
|
|
|
\begin{tabularx}{\linewidth}{XX}
|
|
\toprule
|
|
\multirow{2}{*}{élément neutre} & $a \cdot 1 = a$ \\
|
|
& $a + 0 = a$ \\
|
|
\midrule
|
|
\multirow{2}{*}{élément absorbant} & $a \cdot 0 = 0$ \\
|
|
& $a + 1 = 1$ \\
|
|
\midrule
|
|
\multirow{2}{*}{idempotence} & $a \cdot a = a$ \\
|
|
& $a + a = a$ \\
|
|
\midrule
|
|
\multirow{2}{*}{complément} & $a \cdot \bar{a} = 0$ \\
|
|
& $a + \bar{a} = 1$ \\
|
|
\midrule
|
|
\multirow{2}{*}{commutativité} & $a \cdot b = b \cdot a$ \\
|
|
& $a + b = b + a$ \\
|
|
\midrule
|
|
\multirow{2}{*}{associativité} & $a \cdot (b \cdot c) = (a \cdot b) \cdot c = a \cdot b \cdot c$ \\
|
|
& $a + (b + c) = (a + b) + c = a + b + c$ \\
|
|
\midrule
|
|
\multirow{2}{*}{distributivité} & $a \cdot (b + c) = (a \cdot b) + (a \cdot c) = a \cdot b + a \cdot c$ \\
|
|
& $a + (b \cdot c) = (a + b) \cdot (a + c)$ \\
|
|
\midrule
|
|
\multirow{2}{*}{théorême de Morgan} & $\overline{a \cdot b} = \bar{a} + \bar{b}$ \\
|
|
& $\overline{a + b} = \bar{a} \cdot \bar{b}$ \\
|
|
\midrule
|
|
\multirow{2}{*}{consensus} & $a \cdot b + \bar{a} \cdot c + b \cdot c = a \cdot b + \bar{a} \cdot c$ \\
|
|
& $(a + b) \cdot (\bar{a} + c) \cdot (b + c) = (a + b) \cdot (\bar{a} + c)$ \\
|
|
\midrule
|
|
\multirow{2}{*}{consensus généralisé} & $a \cdot b + \bar{a} \cdot c + b \cdot c \cdot d = a \cdot b + \bar{a} \cdot c$ \\
|
|
& $(a + b) \cdot (\bar{a} + c) \cdot (b + c + d) = (a + b) \cdot (\bar{a} + c)$ \\
|
|
\midrule
|
|
\multirow{2}{*}{fonction biforme} & $a \cdot b + \bar{a} \cdot c = (a + c) \cdot (\bar{a} + b)$ \\
|
|
& $(a + b) \cdot (\bar{a} + c) = (a \cdot c) + (\bar{a} \cdot b)$ \\
|
|
\bottomrule
|
|
\end{tabularx}
|
|
|
|
\clearpage
|
|
\subsection{Fonctions booléennes}
|
|
|
|
On cherche à simplifier les fonctions pour limiter le nombre de portes logiques utilisées.
|
|
|
|
Une fonction booléenne est une application de $\{0,1\}^n$ dans $\{0,1\}$.
|
|
|
|
$x_1, x_2, \dots, x_n \rightarrow{} y = f(x_1, x_2, \dots, x_n)$
|
|
|
|
\begin{center}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
Elle peut être écrite par une table~:
|
|
|
|
\begin{tabular}{cccc}
|
|
$x_2$ & $x_1$ & $x_0$ & $y$ \\
|
|
\midrule
|
|
0 & 0 & 0 & 0 \\
|
|
0 & 0 & 1 & 1 \\
|
|
0 & 1 & 0 & 0 \\
|
|
0 & 1 & 1 & 1 \\
|
|
1 & 0 & 0 & 0 \\
|
|
1 & 0 & 1 & 0 \\
|
|
1 & 1 & 0 & 1 \\
|
|
1 & 1 & 1 & 1 \\
|
|
\end{tabular}
|
|
|
|
\columnbreak{}
|
|
|
|
ou par une expression~:
|
|
|
|
$y = f(x_2,x_1,x_0) = x_2 \cdot x_1 + \overline{x_2} \cdot x_0$.
|
|
|
|
\end{multicols}
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{Minterme, maxterme}
|
|
|
|
Soit $f(x,y,z)$.
|
|
|
|
$\bar{x} \cdot y$ est un minterme.
|
|
|
|
$x \cdot y \cdot \bar{z}$ est un minterme complet.
|
|
|
|
$\bar{x} + y$ est un maxterme.
|
|
|
|
$x + y + \bar{z}$ est un maxterme complet.
|
|
|
|
\begin{tabular}{ccc|cc}
|
|
\toprule
|
|
x & y & z & minterme associé & maxterme associé \\
|
|
\midrule
|
|
0 & 0 & 0 & $\bar{x} \cdot \bar{y} \cdot \bar{z}$ & $x + y + z$ \\
|
|
0 & 1 & 1 & $\bar{x} \cdot y \cdot z$ & $x + \bar{y} + \bar{z}$ \\
|
|
1 & 0 & 1 & $x \cdot \bar{y} \cdot z$ & $\bar{x} + y + \bar{z}$ \\
|
|
1 & 1 & 1 & $x \cdot y \cdot z$ & $\bar{x} + \bar{y} + \bar{z}$ \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
|
|
\subsubsection{Première forme canonique --- Forme disjonctive}
|
|
|
|
On peut dire qu'une fonction est le OU logique des mintermes associés aux vecteurs pour lesquels la fonction vaut 1.
|
|
Par exemple~:
|
|
|
|
\begin{center}
|
|
|
|
\begin{tabular}{ccc|l}
|
|
|
|
\toprule
|
|
$x$ & $y$ & $z$ & $f(x, y, z)$ \\
|
|
\toprule
|
|
0 & 0 & 0 & 0 \\
|
|
\midrule
|
|
0 & 0 & 1 & 1 $\quad \rightarrow \quad$ minterme associé~: $\quad \bar{x} \cdot \bar{y} \cdot z$ \\
|
|
\midrule
|
|
0 & 1 & 0 & 0 \\
|
|
\midrule
|
|
0 & 1 & 1 & 1 $\quad \rightarrow \quad$ minterme associé~: $\quad \bar{x} \cdot y \cdot z$ \\
|
|
\midrule
|
|
1 & 0 & 0 & 0 \\
|
|
\midrule
|
|
1 & 0 & 1 & 0 \\
|
|
\midrule
|
|
1 & 1 & 0 & 1 $\quad \rightarrow \quad$ minterme associé~: $\quad x \cdot y \cdot \bar{z}$ \\
|
|
\midrule
|
|
1 & 1 & 1 & 1 $\quad \rightarrow \quad$ minterme associé~: $\quad x \cdot y \cdot z$ \\
|
|
\bottomrule
|
|
|
|
\end{tabular}
|
|
|
|
$f(x, y, z) = \bar{x} \cdot \bar{y} \cdot z + \bar{x} \cdot y \cdot z + x \cdot y \cdot \bar{z} + x \cdot y \cdot z$
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{Deuxième forme canonique --- Forme conjonctive}
|
|
|
|
On peut aussi dire que la fonction est le ET logique des maxtermes associés aux vecteurs pour lesquels la fonction vaut 0.
|
|
Avec le même exemple~:
|
|
|
|
\begin{center}
|
|
|
|
\begin{tabular}{ccc|l}
|
|
|
|
\toprule
|
|
$x$ & $y$ & $z$ & $f(x, y, z)$ \\
|
|
\toprule
|
|
0 & 0 & 0 & 0 $\quad \rightarrow \quad$ maxterme associé~: $\quad x + y + z$ \\
|
|
\midrule
|
|
0 & 0 & 1 & 1 \\
|
|
\midrule
|
|
0 & 1 & 0 & 0 $\quad \rightarrow \quad$ maxterme associé~: $\quad x + \bar{y} + z$ \\
|
|
\midrule
|
|
0 & 1 & 1 & 1 \\
|
|
\midrule
|
|
1 & 0 & 0 & 0 $\quad \rightarrow \quad$ maxterme associé~: $\quad \bar{x} + y + z$ \\
|
|
\midrule
|
|
1 & 0 & 1 & 0 $\quad \rightarrow \quad$ maxterme associé~: $\quad \bar{x} + y + \bar{z}$ \\
|
|
\midrule
|
|
1 & 1 & 0 & 1 \\
|
|
\midrule
|
|
1 & 1 & 1 & 1 \\
|
|
\bottomrule
|
|
|
|
\end{tabular}
|
|
|
|
$f(x, y, z) = (x + y + z) \cdot (x + \bar{y} + z) \cdot (\bar{x} + y + z) \cdot (\bar{x} + y + \bar{z})$
|
|
|
|
\end{center}
|
|
|
|
\subsubsection{Simplification des fonctions booléennes --- Tableau de Karnaugh}
|
|
|
|
Soit $S$ la fonction définie par le tableau de vérité et l'expression suivants~:
|
|
|
|
\begin{tabular}{r|ccc|c}
|
|
\toprule
|
|
valeur décimale & $x_2$ & $x_1$ & $x_0$ & $S$ \\
|
|
\midrule
|
|
0 & 0 & 0 & 0 & 0 \\
|
|
1 & 0 & 0 & 1 & 0 \\
|
|
2 & 0 & 1 & 0 & 1 \\
|
|
3 & 0 & 1 & 1 & 1 \\
|
|
4 & 1 & 0 & 0 & 1 \\
|
|
5 & 1 & 0 & 1 & 1 \\
|
|
6 & 1 & 1 & 0 & 1 \\
|
|
7 & 1 & 1 & 1 & 0 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
|
|
$S = \overline{x_2} \cdot x_1 \cdot \overline{x_0} + \overline{x_2} \cdot x_1 \cdot x_0 + x_2 \cdot \overline{x_1} \cdot \overline{x_0} + x_2 \cdot \overline{x_1} \cdot x_0 + x_2 \cdot x_1 \cdot \overline{x_0}$
|
|
|
|
On peut simplifier l'expression~:
|
|
|
|
\begin{align*}
|
|
\overline{x_2} \cdot x_1 \cdot \overline{x_0} + \overline{x_2} \cdot x_1 \cdot x_0
|
|
&= \overline{x_2} \cdot x_1 \cdot (\overline{x_0} + \cdot x_0) \\
|
|
&= \overline{x_2} \cdot x_1 \cdot 1 \\
|
|
&= \overline{x_2} \cdot x_1 \\
|
|
\end{align*}
|
|
|
|
On a regroupé deux mintermes différents par la complémentation d'une variable.
|
|
Un \emph{tableau de Karnaugh} permet de faire cela de manière systématique.
|
|
|
|
Pour créer un tableau de Karnaugh, on reproduit une table de vérité sous forme d'un tableau à double entrée selon le code Gray (un seul bit change entre deux entrées adjacentes).
|
|
|
|
\paragraph{Exemple}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
$G = \overline{x_2} \cdot x_1 \cdot \overline{x_0} + \overline{x_2} \cdot x_1 \cdot x_0$
|
|
|
|
\begin{tabular}{|c|c|c|c|c|}
|
|
\hline
|
|
$x_2\backslash x_1 x_0$ & 00 & 01 & 11 & 10 \\
|
|
\hline
|
|
0 & $0_0$ & $0_1$ & $\textcolor{red}{1}_3$ & $\textcolor{red}{1}_2$ \\
|
|
\hline
|
|
1 & $0_4$ & $0_5$ & $0_7$ & $0_6$ \\
|
|
\hline
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
|
|
Pour chaque minterme correspondant à deux cases adjacentes à 1 du tableau, il suffit alors de recopier seulement les variables qui ne changent pas~:
|
|
|
|
$G = \overline{x_2} \cdot x_1 \cdot (\overline{x_0} + x_0) = \overline{x_2} \cdot x_1$
|
|
\quad (ici $x_0$ change et donc s'annule)
|
|
|
|
On peut ainsi regrouper 2, 4 voire 8 cases (= 1, 2 ou 3 mintermes).
|
|
|
|
\end{document}
|