2021-09-03 09:21:01 +02:00
\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
2021-09-05 10:52:33 +02:00
\clearpage
2021-09-03 09:21:01 +02:00
\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
2021-09-03 23:31:17 +02:00
\item hydraulique
2021-09-03 09:21:01 +02:00
\item pneumatique
\item mécanique
\item électromécanique
2021-09-03 23:31:17 +02:00
\item électrique
2021-09-03 09:21:01 +02:00
\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.
2021-09-03 11:04:28 +02:00
En notation booléenne~:
\begin { itemize}
\item H (high) = 1 = vrai
\item L (low) = 0 = faux
\end { itemize}
2021-09-03 09:21:01 +02:00
\subsubsection { Suiveur}
2021-09-03 23:31:17 +02:00
\begin { multicols} { 2}
\includegraphics [width=0.2\linewidth] { ./img/suiveur.png}
La sortie est égale à l'entrée ($ S = E $ ).
\end { multicols}
2021-09-03 11:04:28 +02:00
\begin { center}
Table de vérité~:
2021-09-03 09:21:01 +02:00
2021-09-03 11:04:28 +02:00
\begin { tabular} { c|c}
E & S \\
\midrule
L & L \\
H & H \\
\end { tabular}
2021-09-03 09:21:01 +02:00
2021-09-03 11:04:28 +02:00
\end { center}
2021-09-03 09:21:01 +02:00
\subsubsection { Inverseur}
2021-09-03 23:31:17 +02:00
\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}
2021-09-03 11:04:28 +02:00
\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} ($ + $ )}
2021-09-03 23:31:17 +02:00
\begin { multicols} { 2}
2021-09-03 11:04:28 +02:00
2021-09-03 23:31:17 +02:00
\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}
2021-09-03 11:04:28 +02:00
\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 $ )}
2021-09-03 23:31:17 +02:00
\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}
2021-09-03 11:04:28 +02:00
\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}
2021-09-03 23:31:17 +02:00
\columnbreak { }
2021-09-03 11:04:28 +02:00
\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 $ )}
2021-09-03 23:31:17 +02:00
\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}
2021-09-03 11:04:28 +02:00
\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 { + } $ )}
2021-09-03 23:31:17 +02:00
\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}
2021-09-03 11:04:28 +02:00
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 } $ )}
2021-09-03 23:31:17 +02:00
\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}
2021-09-03 11:04:28 +02:00
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 } $ )}
2021-09-03 23:31:17 +02:00
\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}
2021-09-03 11:04:28 +02:00
\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}
2021-09-05 10:52:33 +02:00
\clearpage
2021-09-03 11:04:28 +02:00
\subsection { Algèbre booléenne}
Le ET est prioritaire sur le OU\@ .
\begin { tabularx} { \linewidth } { XX}
\toprule
2021-09-04 20:11:22 +02:00
\multirow { 2} { *} { élément neutre} & $ a \cdot 1 = a $ \\
& $ a + 0 = a $ \\
2021-09-03 11:04:28 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\multirow { 2} { *} { élément absorbant} & $ a \cdot 0 = 0 $ \\
& $ a + 1 = 1 $ \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\multirow { 2} { *} { idempotence} & $ a \cdot a = a $ \\
& $ a + a = a $ \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\multirow { 2} { *} { complément} & $ a \cdot \bar { a } = 0 $ \\
& $ a + \bar { a } = 1 $ \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\multirow { 2} { *} { commutativité} & $ a \cdot b = b \cdot a $ \\
& $ a + b = b + a $ \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\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 $ \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\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 ) $ \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\multirow { 2} { *} { théorême de Morgan} & $ \overline { a \cdot b } = \bar { a } + \bar { b } $ \\
& $ \overline { a + b } = \bar { a } \cdot \bar { b } $ \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
\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 ) $ \\
2021-09-03 11:04:28 +02:00
\bottomrule
\end { tabularx}
2021-09-01 13:58:05 +02:00
2021-09-05 10:52:33 +02:00
\clearpage
2021-09-03 14:18:44 +02:00
\subsection { Fonctions booléennes}
On cherche à simplifier les fonctions pour limiter le nombre de portes logiques utilisées.
2021-09-04 20:11:22 +02:00
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 ) $
2021-09-03 14:18:44 +02:00
\begin { center}
\begin { multicols} { 2}
2021-09-05 10:52:33 +02:00
Elle peut être écrite par une table~:
2021-09-03 14:18:44 +02:00
\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}
2021-09-05 10:52:33 +02:00
\columnbreak { }
2021-09-03 14:18:44 +02:00
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
2021-09-04 20:11:22 +02:00
x & y & z & minterme associé & maxterme associé \\
2021-09-03 14:18:44 +02:00
\midrule
2021-09-04 20:11:22 +02:00
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 } $ \\
2021-09-03 14:18:44 +02:00
\bottomrule
\end { tabular}
2021-09-03 09:21:01 +02:00
2021-09-05 10:52:33 +02:00
\subsubsection { Première forme canonique --- Forme disjonctive}
2021-09-04 20:11:22 +02:00
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}
2021-09-05 10:52:33 +02:00
\subsubsection { Deuxième forme canonique --- Forme conjonctive}
2021-09-04 20:11:22 +02:00
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}
2021-09-04 23:26:04 +02:00
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
2021-09-05 10:52:33 +02:00
& = \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 \\
2021-09-04 23:26:04 +02:00
\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).
2021-09-03 09:21:01 +02:00
\end { document}