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.


Les portes fondamentales

NOT (Inverseur)

AY
01
10
o_y <= NOT i_a;

AND

ABY
000
010
100
111
o_y <= i_a AND i_b;

OR

ABY
000
011
101
111
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.

ABY = NOT(A AND B)
001
011
101
110
o_y <= i_a NAND i_b;

NOR (NOT OR)

Également universelle.

ABY = NOT(A OR B)
001
010
100
110
o_y <= i_a NOR i_b;

XOR (Exclusive OR)

Sort 1 uniquement si les entrées sont différentes.

ABY
000
011
101
110
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).

ABY
001
010
100
111
o_y <= i_a XNOR i_b;

Symboles et équivalences

PorteÉquivalence NANDÉquivalence NOR
NOT ANAND(A, A)NOR(A, A)
A AND BNAND(NAND(A,B), NAND(A,B))
A OR BNOR(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);

Demi-additionneur et additionneur complet

Demi-additionneur (Half Adder)

Somme   = A XOR B
Retenue = A AND B
o_sum   <= i_a XOR i_b;
o_carry <= i_a AND i_b;

Additionneur complet (Full Adder)

Somme   = A XOR B XOR Cin
Retenue = (A AND B) OR (Cin AND (A XOR B))
o_sum   <= i_a XOR i_b XOR i_cin;
o_carry <= (i_a AND i_b) OR (i_cin AND (i_a XOR i_b));

Ces blocs s'enchaînent pour former un additionneur N bits (Ripple-Carry Adder).