Les portes logiques fondamentales : AND, OR, NOT, NAND, NOR, XOR et leurs propriétés.
Une porte reçoit un ou plusieurs bits et produit un bit de résultat. Ces bits correspondent à des plages de tension : en logique positive, le niveau bas représente 0 et le niveau haut 1.
Passer des bits aux signaux électriques
Le niveau bas est proche de , le niveau haut de . Entre les seuils d'entrée se trouve une zone indéterminée à éviter. Le composant ne bascule donc pas nécessairement à . La marge de bruit mesure l'écart disponible entre le niveau produit et le seuil requis.
GND
VCC
VCC / 2
Le bruit, les rebonds, les couplages entre pistes et un mauvais découplage peuvent perturber le signal. Les plages logiques permettent de tolérer certaines perturbations, mais il faut toujours vérifier :
le fan-out, c'est-à-dire combien d'entrées la sortie peut piloter correctement ;
le délai de propagation entre un changement d'entrée et une sortie stabilisée ;
le temps de transition des fronts, qui reste fini dans un circuit réel.
Les anciennes familles TTL (transistor-transistor logic) utilisaient souvent 5 V. Le CMOS, aujourd'hui dominant, consomme généralement moins et existe notamment en 3,3 V, 2,5 V et 1,8 V. Une interface doit respecter les tensions d'entrée et de sortie, le courant disponible et le temps de stabilisation. Sur FPGA, ces contraintes concernent les buffers d'E/S, les LUT et le routage.
Lire les fonctions des portes
Inverser avec NOT
La sortie prend le complément de l'entrée.
A
Y
0
1
1
0
o_y <= NOT i_a;
Combiner avec AND et OR
AND produit 1 lorsque toutes ses entrées valent 1.
A
B
Y
0
0
0
0
1
0
1
0
0
1
1
1
o_y <= i_a AND i_b;
OR produit 1 lorsqu'au moins une entrée vaut 1.
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
1
o_y <= i_a OR i_b;
Inverser le résultat : NAND et NOR
NAND inverse AND. Cette porte est universelle : un réseau de NAND peut réaliser toute fonction logique.
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 inverse OR et possède la même propriété d'universalité.
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;
Comparer deux bits : XOR et XNOR
XOR produit 1 lorsque les deux entrées diffèrent. On l'utilise notamment pour la parité et la somme d'un additionneur à un bit.
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
0
o_y <= i_a XOR i_b;
XNOR produit 1 lorsque les deux entrées sont identiques : c'est une comparaison d'égalité sur un bit.
A
B
Y
0
0
1
0
1
0
1
0
0
1
1
1
o_y <= i_a XNOR i_b;
Le tableau suivant rapproche les symboles et les expressions équivalentes.
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))
Réaliser la fonction sur FPGA
Le synthétiseur regroupe les expressions logiques dans les LUT disponibles. Une LUT à six entrées peut réaliser toute fonction booléenne d'au plus six entrées ; écrire plusieurs portes ne demande donc pas forcément plusieurs composants distincts.
-- Cette expression complexe tient probablement dans 1 LUTo_y <= (i_a AND i_b) OR (i_c XOR i_d) OR (NOT i_e);