Cours n°5 :
Circuits et logique booléenne

R1.03 - Intro. Archi
Victor Poupet

Circuits binaires

Fonctions booléennes

Une fonction booléenne est une fonction de $$\{0, 1\}^n\rightarrow \{0, 1\}$$

Ex : $$f: \left\{\begin{align}\{0, 1\}^3 &\rightarrow \{0, 1\}\\ x, y, z &\mapsto x(y + z) \mod 2 \end{align}\right.$$

\(x\) \(y\) \(z\) \(f(x, y, z)\)
0000
0010
0100
0110
1000
1011
1101
1110

Portes logiques

Porte NON :

\(x\) \(\neg x\)
0 1
1 0

Porte ET :

\(x\) \(y\) \(x\wedge y\)
0 0 0
0 1 0
1 0 0
1 1 1

Porte OU :

\(x\) \(y\) \(x\vee y\)
0 0 0
0 1 1
1 0 1
1 1 1

Porte XOR (ou exclusif) :

\(x\) \(y\) \(x\oplus y\)
0 0 0
0 1 1
1 0 1
1 1 0

On construit les fonctions logiques à partir de portes logiques élémentaires


Les portes logiques élémentaires sont :

Exemples

On peut utiliser des portes NON pour réaliser le complément à un d'un nombre


On peut enchaîner les portes ET, OU et XOR


Équivalence

Prop.
Toute fonction booléenne peut être exprimée par une formule utilisant les opérateurs NON, ET et OU

Rmq : La réciproque est évidente


Forme normale disjonctive →

Forme normale conjonctive →

\(x\) \(y\) \(z\) \(f(x, y, z)\)
0000
0011
0101
0110
1000
1010
1101
1110
\(x\) \(y\) \(z\) \(f(x, y, z)\)
0000
0011
0101
0110
1000
1010
1101
1110
\(x\) \(y\) \(z\) \(f(x, y, z)\)
0000
0011
0101
0110
1000
1010
1101
1110

$$\begin{align}f(x, y, z) = &(\neg x\wedge \neg y\wedge z)\\ &\vee (\neg x\wedge y\wedge \neg z)\\ &\vee (x\wedge y\wedge \neg z) \end{align}$$

$$\begin{align}f(x, y, z) = &(x\vee y\vee z)\\ &\wedge (x\vee \neg y\vee \neg z)\\ &\wedge (\neg x\vee y\vee z)\\ &\wedge (\neg x\vee y\vee \neg z)\\ &\wedge (\neg x\vee \neg y\vee \neg z)\\ \end{align}$$

Circuits

Pour réaliser les fonctionnalités d’un ordinateur (en particulier l'unité centrale), on a besoin de nombreux circuits :

Additionneur

On va décrire un circuit qui réalise l'addition binaire sur \(n\) bits

Half-Adder

On travaille chiffre par chiffre


Entrées :

  • 2 chiffres : \(x\) et \(y\)

Sorties :

  • résultat : \(x + y = x \oplus y\)
  • retenue : \(c_{out} = x \wedge y\)
\(x\) \(y\) \(x+y\) \(c_{out}\)
0000
0110
1010
1101

Full-Adder

On ajoute une retenue entrante (\(c_{in}\))


Entrées :

  • 2 chiffres : \(x\) et \(y\)
  • retenue : \(c_{in}\)

Sorties :

  • résultat : \(x + y + c_{in} = x \oplus y \oplus c_{in}\)
  • retenue : \(c_{out} = (x + y + c_{in} \geq 2)\)
\(x\) \(y\) \(c_{in}\) \(s\) \(c_{out}\)
00000
00110
01010
01101
10010
10101
11001
11111

Additionneur

On peut combiner \(n\) full-adders pour obtenir un additionneur à \(n\) bits

Soustracteur

On peut faire la même chose pour la soustraction :

  • circuit pour soustraction de deux chiffres (HS)
  • circuit pour soustraction de deux chiffres avec une retenue (FS)
  • chaîne de \(n\) FS pour soustraction à \(n\) bits

Ou bien, si en complément à 2 (mod \(2^n\)) :$$\begin{align} x - y &= x + (2^n - y) \\ &= x + (2^n-1 - y) + 1 \\ &= x + \neg y + 1 \end{align}$$


→ On peut réutiliser le circuit de l'additionneur

Multiplieur

Source : Multiplication Acceleration Through Twin Precision - Magnus Själander

Stockage

On peut utiliser des circuits pour stocker des données



Rmq : Pour stocker de manière non volatile, on peut utiliser des supports de stockage (magnétique, optique, etc.)

Exemple : Bascule RS (RS latch)



S R Q' Action
0 0 Q Conserver
1 0 1 Set
0 1 0 Reset
1 1 Non autorisé

Interprétation

Attention : La mémoire ne contient que des suites de bits

Transmission

On veut échanger des données d'un circuit à un autre

Série

  • Transmission séquentielle des bits
  • Un seul fil + horloge
  • Pour \(n\) bits, il faut \(n\) ticks

Parallèle

  • \(m\) fils + horloge
  • Tansmission de \(m\) bits en parallèle
  • Pour \(n\) bits il faut \(\lceil \frac n m \rceil\) ticks