Portes logiques
Les portes logiques fondamentales : AND, OR, NOT, NAND, NOR, XOR et leurs propriétés.
Introduction à la logique numérique
La logique numérique opère sur deux niveaux : 0 (faux, bas, GND) et 1 (vrai, haut, VCC).
Une porte logique est un circuit électronique qui effectue une opération logique sur un ou plusieurs bits d'entrée pour produire un bit de sortie.
Niveaux logiques réels
Un 0 et un 1 ne sont pas des valeurs magiques : ce sont des plages de tension reconnues par les composants.
Dans une logique positive courante :
0correspond à une tension basse, proche deGND;1correspond à une tension haute, proche deVCC;- entre les deux, il existe une zone incertaine à éviter.
Un composant ne change pas d'état exactement à VCC / 2. Il possède des seuils d'entrée : en dessous d'un certain niveau, le signal est lu comme 0; au-dessus d'un autre niveau, il est lu comme 1. La marge entre le signal produit et le seuil attendu s'appelle la marge de bruit.
Bruit, charge et délais
Un signal numérique peut être perturbé par le bruit, les rebonds, les couplages entre pistes ou une alimentation mal découplée. Le numérique tolère mieux ces imperfections que l'analogique, mais il ne les annule pas.
Trois notions sont importantes :
- fan-out : nombre d'entrées qu'une sortie peut piloter correctement ;
- temps de propagation : durée entre un changement d'entrée et la stabilisation de la sortie ;
- front non idéal : une transition réelle prend un temps fini et peut être bruitée.
Sur FPGA, on ne choisit pas directement une famille de portes discrètes, mais ces effets existent toujours dans les buffers d'entrée/sortie, les LUTs, le routage et les contraintes de timing.
TTL et CMOS en culture générale
Historiquement, beaucoup de circuits logiques étaient en TTL (transistor-transistor logic) avec une alimentation typique de 5 V. Les circuits modernes utilisent surtout du CMOS, plus économe et disponible dans de nombreuses tensions : 3,3 V, 2,5 V, 1,8 V, etc.
Le point à retenir n'est pas de mémoriser toutes les familles logiques, mais de comprendre qu'une interface doit respecter :
- les tensions acceptées par l'entrée ;
- les tensions produites par la sortie ;
- le courant disponible ;
- le temps nécessaire pour que le signal soit stable.
Un signal numérique reste donc un signal électrique réel. Il peut être propre, bruité, trop lent, trop chargé ou incompatible avec l'entrée suivante.
Les portes fondamentales
NOT (Inverseur)
| A | Y |
|---|---|
| 0 | 1 |
| 1 | 0 |
o_y <= NOT i_a;AND
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
o_y <= i_a AND i_b;OR
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
o_y <= i_a OR i_b;Les portes dérivées
NAND (NOT AND)
La porte universelle - n'importe quelle fonction logique peut être construite avec des NAND seules.
| A | B | Y = NOT(A AND B) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
o_y <= i_a NAND i_b;NOR (NOT OR)
Également universelle.
| A | B | Y = NOT(A OR B) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
o_y <= i_a NOR i_b;XOR (Exclusive OR)
Sort 1 uniquement si les entrées sont différentes.
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
o_y <= i_a XOR i_b;Usage courant : détection de parité, additionneur 1 bit (somme).
XNOR (Exclusive NOR)
Sort 1 si les entrées sont identiques (comparateur 1 bit).
| A | B | Y |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
o_y <= i_a XNOR i_b;Symboles et équivalences
| Porte | Équivalence NAND | Équivalence NOR |
|---|---|---|
| NOT A | NAND(A, A) | NOR(A, A) |
| A AND B | NAND(NAND(A,B), NAND(A,B)) | - |
| A OR B | - | NOR(NOR(A,B), NOR(A,B)) |
Implémentation sur FPGA
Sur FPGA, les portes logiques ne sont pas des composants physiques discrets - elles sont implémentées dans des LUTs.
Une LUT-6 peut réaliser n'importe quelle combinaison de portes logiques sur jusqu'à 6 entrées. C'est le synthétiseur qui décide comment mapper votre expression logique sur les LUTs disponibles.
-- Cette expression complexe tient probablement dans 1 LUT
o_y <= (i_a AND i_b) OR (i_c XOR i_d) OR (NOT i_e);📝 Tester mes connaissances - Quiz du chapitre