# Fonction logique

Il existe deux grands types de fonctions logiques :
* les fonctions logiques dites « combinatoires », bases du calcul booléen, elles résultent de l'analyse combinatoire des variations des grandeurs d'entrées uniquement ;
* les fonctions logiques dites « séquentielles » ou bascules, qui résultent de l'association de plusieurs fonctions logiques « combinatoires » dont les résultats ne dépendent pas seulement des données en train d'être traitées, mais aussi des données traitées précédemment.
Les fonctions logiques combinatoires directement issues des mathématiques (algèbre de Boole) sont les outils de base de l'électronique numérique. Elles sont mises en œuvre en électronique sous forme de portes logiques. Ainsi les circuits électroniques calculent des fonctions logiques de l'algèbre de Boole. Ces portes électroniques sont construites à partir de plusieurs transistors connectés de manière adéquate.
Dans d'autres applications, on peut trouver des portes logiques à base de relais, de fluides ou d'éléments optiques ou mécaniques. Selon la modélisation utilisée, on prendra en compte les temps de retard ou pas dans les calculs.
L'automatisme et l'informatique utilisent la logique combinatoire mais surtout la logique séquentielle.

## Historique
### De la roue dentée à la molécule

Charles Babbage, vers 1837, conçut la « machine analytique », assemblage de portes reliées à des roues dentées pour effectuer des opérations logiques. Par la suite, les opérations logiques furent effectuées grâce à des relais électromécaniques.
En 1891, Almon Strowger déposa un brevet pour un appareil contenant un commutateur basé sur une porte logique ((en) Brevet U.S. 0447918). Son invention ne fut guère exploitée jusque dans les années 1920.
À partir de 1898, Nikola Tesla déposa une série de brevets concernant des appareils basés sur des circuits à portes logiques.
Finalement, les tubes à vide remplacèrent les relais pour les opérations logiques. En 1907, Lee De Forest modifia l'un de ces tubes et l'utilisa comme une porte logique ET. Claude Shannon introduisit l'utilisation de l'algèbre de Boole dans la conception de circuits en 1937.
Walther Bothe, inventeur du circuit de coïncidence, reçut le prix Nobel de physique en 1954, pour la création de la première porte logique ET électronique moderne en 1924.
Des travaux de recherche sont actuellement menés pour la génération de portes logiques moléculaires.

### Les portes logiques à transistors

La forme la plus simple de la logique électronique est la logique à diodes. Cela permet la fabrication de portes ET et OU, mais pas de portes NON ce qui conduit à une logique incomplète. Pour créer un système logique complet, il est nécessaire d'utiliser des lampes ou des transistors.
La famille la plus simple de portes logiques utilisant des transistors bipolaires est appelée logique résistance-transistor ou RTL (anglais : resistor-transistor logic). Au contraire des portes à diodes, les portes RTL peuvent être mises en cascade indéfiniment pour produire des fonctions logiques complexes.
Pour diminuer le temps de retard, les résistances utilisées par les portes RTL furent remplacées par des diodes, ce qui donna naissance aux portes logiques diode-transistor ou DTL (anglais : diode-transistor logic). On découvrit ensuite qu'un transistor pouvait faire le travail de deux diodes en prenant la place d'une seule, ce qui mena à la création de portes logiques transistor-transistor ou TTL (anglais : transistor-transistor logic).
Dans certains types de circuits, les transistors bipolaires furent remplacés par des transistors à effet de champ (MOSFET) ce qui donna naissance à la logique CMOS.
Les concepteurs de circuits logiques utilisent actuellement des circuits intégrés préfabriqués, notamment en TTL, la série 7400 de Texas Instruments, et en CMOS, la série 4000 de RCA, ainsi que leurs dérivés plus récents. La plupart de ces circuits contiennent des transistors à plusieurs émetteurs, utilisés pour implémenter la fonction ET, et qui ne sont pas disponibles séparément.
De plus en plus, ces circuits logiques fixes sont remplacés par des circuits logiques programmables, qui permettent aux concepteurs d'intégrer un grand nombre de portes logiques diverses dans un seul circuit intégré. La nature programmable de ces circuits, parmi lesquels les FPGA, a enlevé son aspect purement matériel : il est désormais possible de changer les fonctions logiques d'un système en en reprogrammant les composants, ce qui permet de modifier les caractéristiques d'un circuit logique matériel.
Les portes logiques électroniques diffèrent de manière significative de leurs équivalents à relais et contacts. Elles sont bien plus rapides, moins gourmandes et beaucoup plus petites (au moins un million de fois dans la plupart des cas).
De plus, il y a une différence fondamentale dans la structure. Les circuits à contacts créent un chemin continu, dans lequel le courant peut circuler dans les deux directions entre l'entrée et la sortie. La porte logique à semi-conducteurs, au contraire, agit comme un amplificateur de tension, qui reçoit un signal en entrée et produit une tension de basse impédance en sortie. Le fonctionnement similaire à la diode des transistors dans le circuit logique permet d'éviter que le courant ne puisse circuler de la sortie vers l'entrée d'une porte à semi-conducteurs.
Un autre grand avantage des circuits logiques standardisés est qu'ils peuvent être mis en cascade. Autrement dit, la sortie d'une porte peut être reliée aux entrées d'une ou plusieurs portes, et ainsi de suite à l'infini, ce qui permet de construire des circuits d'une complexité quelconque sans avoir besoin de connaître le fonctionnement interne des portes.
Dans la pratique, la sortie d'une porte ne peut être connectée qu'à un nombre fini d'entrées, mais cette limite est rarement atteinte dans les nouveaux circuits CMOS comparé aux circuits TTL.
Il existe également un délai nommé temps de propagation entre la modification d'une entrée et la modification correspondante en sortie. Dans des portes en cascade, le temps de propagation total est à peu près égal à la somme des temps de propagation individuels, ce qui peut poser un problème dans les circuits à grande vitesse.

### Portes logiques à 3 états

Les portes logiques dites « à trois états » possèdent une sortie qui peut prendre trois états différents : haut, bas comme sur tout autre circuit logique et un troisième état haute impédance nommé Z. L'état de haute impédance ne joue aucun rôle dans la logique proprement dite qui demeure binaire, mais il équivaut en fait à un circuit ouvert, ou à une « absence » de sortie. Cet état permet de ne pas « polluer » la valeur circulant sur le bus de données auquel il est connecté, lorsque ce circuit ne doit pas en changer l’état.
Ces portes sont utilisées dans les bus informatiques afin de choisir l’émetteur et le récepteur des données circulant sur le bus ; un groupe de portes à trois états contrôlées par un circuit approprié équivaut à un multiplexeur qui peut être réparti physiquement sur plusieurs appareils ou plusieurs cartes électroniques.

## Classification
### Niveaux logiques

En algèbre de Boole, une donnée, qu'elle soit en entrée ou en sortie, n'a que deux niveaux possibles. Selon les applications, ces deux niveaux peuvent porter des noms différents : marche / arrêt, haut / bas, un (1) / zéro (0), vrai / faux, positif / négatif, positif / nul, circuit ouvert / circuit fermé, différence de potentiel / pas de différence, oui / non.
Dans le cas de circuits électroniques, les deux niveaux sont représentés par deux niveaux de tension, « haut » et « bas ». Chaque type de circuit possède ses propres niveaux de tension, pour s'assurer de la connectivité entre les entrées et sorties des circuits. Habituellement, deux niveaux bien distincts (ne risquant pas de se chevaucher) sont définis ; la différence entre les deux niveaux varie entre 0,7 et 28 V (ce dernier dans le cas des relais).
Pour harmoniser la notation, ces deux niveaux seront notés ici 1 et 0.

### Fonctions logiques élémentaires

Les portes peuvent être classées suivant leur nombre d'entrées :
* « portes » sans entrée : VRAI, FAUX ;
* portes à une entrée : NON (NOT), OUI ;
* portes à deux entrées : ET (AND), NON-ET (NAND), OU (OR), NON-OU (NOR), OU exclusif (XOR), Coïncidence (informatique) dite aussi NON-OU exclusif ou équivalence (XNOR), implication ;
* à partir de trois entrées, le nombre de fonctions commence à subir l'influence de l'explosion combinatoire. On note toutefois l'existence de : ET, OU, etc. à plus de deux entrées.
Il est possible de reconstituer les fonctions NON, ET et OU en utilisant uniquement soit la fonction NON-ET, soit la fonction NON-OU. On évoque cette caractéristique sous la notion d'universalité des opérateurs NON-OU et NON-ET (cf. le connecteur binaire d'incompatibilité, appelé aussi barre de Sheffer).
Lorsqu'on associe deux portes logiques compatibles, on peut connecter deux entrées ensemble, ou une entrée sur une sortie. Il ne faut en aucun cas connecter deux sorties différentes car elles peuvent produire des données différentes ; dans le cas de portes électroniques, cela équivaudrait à un court-circuit.

## Représentation

Pour définir chacune des fonctions logiques, nous donnerons plusieurs représentations :
* une représentation algébrique : équation ;
* une représentation arithmétique : table de vérité ;
* une représentation graphique : symbole logique.
Dans le cas de portes logiques électroniques, un niveau logique est représenté par une tension définie (selon le type de composant utilisé). Chaque porte logique doit donc être alimentée pour délivrer la tension de sortie appropriée. Dans la représentation en symboles logiques, cette alimentation n'est pas représentée, mais elle doit l'être dans un schéma électronique complet.
La représentation d'un système combinatoire incluant plusieurs fonctions logiques peut aussi se faire grâce à un schéma à contact, une équation, une table de vérité et un schéma graphique. Dans ce dernier cas on parlera d'un logigramme.

### Représentation graphique

Deux ensembles de symboles sont utilisés pour représenter les fonctions logiques ; les deux sont définis par la norme ANSI/IEEE 91-1984 et son supplément 91a-1991. La représentation par « symboles distinctifs », basée sur les schématisations classiques, est utilisée pour les schémas simples et est plus facile à tracer à la main. Elle est parfois qualifiée de « militaire », ce qui reflète ses origines, sinon son usage actuel.
La représentation « rectangulaire » se base sur la norme CEI 60617-12 ; toutes les portes y sont représentées avec des bords rectangulaires et un symbole, ce qui permet la représentation d'un plus grand nombre de types de circuits. Ce système a été repris par d'autres standards comme EN 60617-12:1999 en Europe et BS EN 60617-12:1999 au Royaume-Uni.
Symboles et tables de vérités de portes logiques :
| Type | Notation | Opération booléenne | Table de vérité |
| ET | $A\land B$ | $A\cdot B$ | EntréeSortie ABA ET B 000 010 100 111 |
| OU | $A\lor B$ | $\textstyle A+B$ | EntréeSortie ABA OU B 000 011 101 111 |
| NON | $\neg A$ | ${\overline {A}}$ | EntréeSortie ANON A 01 10 |
| NON-ET (NAND) | $\neg (A\land B)$ | ${\overline {A\cdot B}}$ | EntréeSortie ABA NAND B 001 011 101 110 |
| NON-OU (NOR) | $\neg (A\lor B)$ | ${\overline {A+B}}$ | EntréeSortie ABA NOR B 001 010 100 110 |
| OU exclusif (XOR) | $A\oplus B$ | $A\oplus B$ | EntréeSortie ABA XOR B 000 011 101 110 |
| Coïncidence, NON-OU exclusif | $A\odot B$ | $A\odot B$ | EntréeSortie ABA XNOR B 001 010 100 111 |
| FAUX | $\perp$ | | EntréeSortie ABFAUX 000 010 100 110 |
| VRAI | T | | EntréeSortie ABVRAI 001 011 101 111 |
Une porte NON-ET (NAND) peut également être représentée en utilisant le symbole OU avec des bulles (inverseurs) sur les entrées, et une porte NON-OU (NOR) peut être représentée par un symbole ET avec des bulles sur les entrées. Cela reflète les lois d'équivalence de De Morgan ; cela permet de rendre également un diagramme plus lisible, ou de fabriquer un circuit facilement avec des portes préfabriquées, car un circuit qui a des bulles des deux côtés peut être remplacé par un circuit non-inversé en changeant la porte. Si une porte NON-ET est représentée par un OU avec des entrées inversées, ou qu'un NON-OU est représenté par un ET avec des entrées inversées, le remplacement se fait automatiquement dans le schéma (les bulles « s'annulent »). C'est courant dans les diagrammes logiques réels — si bien que le lecteur ne doit pas s'habituer à associer les symboles aux portes OU et ET automatiquement, mais doit aussi prendre en compte les inverseurs pour déterminer la bonne fonction représentée. Les entrées inversées sont particulièrement utiles dans le cas de signaux « actifs à l'état bas ».
Les deux autres portes fréquemment rencontrées sont la fonction OU exclusif et son inverse. Un OU exclusif à deux entrées ne renvoie un 1 que quand les deux entrées sont différentes, et un 0 quand elles sont égales, quelle que soit leur valeur. S'il y a plus de deux entrées, la porte renvoie 1 si le nombre d'entrées égales à 1 est impair. Dans la pratique, ces portes sont souvent réalisées à partir de combinaisons de portes logiques plus simples.

### Convention d'écriture

La notation surlignée exprimant l'opérateur NON n'est pas facile à utiliser dans des systèmes informatiques. On la remplace souvent par la notation à l'aide d'une apostrophe « ' » et si nécessaire un parenthésage. Ainsi :
* NON(x) = x', d'où (x')' = x
* NON·ET(x, y)= (x·y)' = x'+y'
* NON·OU(x, y)= (x+y)' = x'·y'
* NON·ET(NON·ET(a, b, c), NON·ET(d, f)) = ((a·b·c)')'+((d·f)')' = a·b·c + d·f
* NON·OU(NON·OU(a, b, c), NON·OU(d, f)) = ((a+b+c)')'·((d+f)')' = (a+b+c)·(d+f)
Les opérateurs physiques NON·ET/NON·OU étant peu commodes dans les calculs, les deux dernières relations (dites de double couche) facilitent la liaison entre calcul et dessin ; ainsi :
* une double couche NON·ET réalise toute fonction donnée sous forme d'une somme de monômes booléens ;
* de même, une double couche NON·OU réalise toute fonction donnée sous forme d'un produit de clauses booléennes.

## Autres fonctions logiques
### Multiplexeurs

Soient 8 entrées binaires x0 à x7, et 3 entrées de commande a, b, c, permettant d'afficher un nombre de 0 à 7. Un multiplexeur aligne sa sortie s sur l'entrée dont le numéro est affiché. Pour cela, s = a'·b'·c'·x0 + a'·b'·c·x1 + a'·b·c'·x2 + a'·b·c·x3 +....+ a·b·c·x7.
| Commande | Commande | Commande | Sortie |
| a | b | c | s |
| 0 | 0 | 0 | x0 |
| 0 | 0 | 1 | x1 |
| 0 | 1 | 0 | x2 |
| 0 | 1 | 1 | x3 |
| 1 | 1 | 0 | x6 |
| 1 | 1 | 1 | x7 |

### Additionneurs

C'est l'exemple type de cellules logiques, regroupements de fonctions des mêmes variables, utilisables comme briques ou boîtes noires dans des ensembles complexes.

#### simple

Soient a et b deux bits à additionner ; le résultat est un couple (r, s) tel que, arithmétiquement a + b = 2r + s. En termes booléens, r = a·b et s = $a\oplus b$.

#### complet

L'addition de deux bits a et b sera le plus souvent une addition intermédiaire recevant un report r. Le résultat est alors un couple (R, S) tel que, arithmétiquement, a+b+r = 2R+S. En termes booléens, S = $a\oplus b\oplus r$ et R = MAJ(a, b, r), où la porte MAJ(orité) a pour définition MAJ(x, y, z)= xy + yz + xz.

#### soustracteur

Un additionneur complet peut devenir additionneur/soustracteur en complément à un ou complément à deux s'il fait la somme des bits a, $b\oplus \$$ et r, où r est un report, et $ une commande valant 0 pour une addition et 1 pour une soustraction. Alors, le résultat est un couple (R, S) où S = $a\oplus b\oplus \$\oplus r$ et R = MAJ(a, $b\oplus \$$, r).

#### multiplieur

Un additionneur complet peut devenir une cellule de multiplieur s'il fait la somme des bits a, b·m et r, où a est un bit d'une somme partielle de produits, b un bit du multiplicande, m un bit du multiplicateur, et r un report. Alors S = $a\oplus b$·$m\oplus r$ et R = MAJ(a, b·m, r).

### Unités de stockage

Au-delà des fonctions logiques purement combinatoires, se pose le problème du stockage d'un bit d'information. Les portes logiques présentées plus haut ne stockent pas de données : quand une entrée change, la sortie réagit immédiatement (au temps de propagation près). Il est possible de créer des éléments de stockage soit avec des condensateurs, soit en utilisant le feedback. En connectant la sortie d'une porte à son entrée, on renvoie la sortie dans le circuit logique ; elle peut ainsi être conservée ou modifiée en utilisant les autres entrées. En connectant des portes de cette manière, on crée un verrou (latch en anglais). D'autres circuits un peu plus complexes utilisent des signaux d'horloge (des signaux qui oscillent à une fréquence connue) et changent quand le signal d'horloge passe à 1 ; on les appelle des bascules ou bistables (flip-flops en anglais). En combinant plusieurs bascules en parallèle pour stocker une valeur de plusieurs bits, on crée un registre.
Les registres et autres circuits de stockage sont regroupés sous le terme de « mémoires électroniques ». Leurs performances varient en matière de vitesse, de complexité et de fiabilité de la mémoire. Leurs types peuvent être très différents selon les applications.

### Automates à nombre fini d'états

Ils comprennent :
* un ensemble défini E de variables d'entrée ;
* un ensemble défini I de variables d'état internes, stockées dans un registre ;
* un ensemble défini S de variables de sortie ;
* un réseau combinatoire T : (E, I) → I assurant l'évolution de l'automate en fonction des entrées successives ;
* un réseau combinatoire R : (E, I) → S assurant la définition de la sortie, conformément aux entrées actuelles, et à la mémoire que I a gardé des situations antérieures.
Dès lors que toutes les variables se présentent sous forme binaire, ils sont réalisables à l'aide de circuits logiques.
Ils peuvent être simples, ou fédérés en automates plus complexes.

### Unités fonctionnelles

Les circuits logiques peuvent également réaliser des éléments comme des multiplexeurs, des unités arithmétiques et logiques (en anglais : Arithmetic and Logic Unit ou ALU), des mémoires, ou les automates animant un processeur. Les microprocesseurs rassemblent de tels éléments, et peuvent contenir plus de 100 millions de portes logiques.
Les composants de microprocesseurs sont à base de transistors à effet de champ, en particulier des MOSFET.