Circuits logiques composés

Regroupement de bits en vecteurs

Dans les exemples précédents, nous avons manipulé des variables booléennes simples et nous les avons représentées sous la forme de conducteurs séparés dans des circuits logiques. Cependant, lorsqu’une fonction logique traite des nombres représentés en binaire, il est plus pratique de regrouper les bits d’un même nombre sous la forme d’un vecteur auquel on donnera un nom et dont chaque élément sera identifié par un indice. Par exemple, un nombre compris entre 0 et 255 pourra être représenté par un vecteur vv de huit bits (v7,v6,v5,v1,v0)(v_7, v_6, v_5, \ldots v_1, v_0) où l’indice le plus grand correspond au bit de poids fort et l’indice le plus petit correspond au bit de poids faible.

Ainsi, il est possible de représenter des fonctions logiques de manière plus concise. Sur le schéma ci-dessous, le même circuit est dessiné de deux manières différentes : à gauche, le symbole de la porte ET est relié à des vecteurs de quatre bits aa, bb et yy ; à droite, nous détaillons la structure de ce circuit sous la forme de quatre portes ET. Les conducteurs qui transportent un bit sont représentés par des traits fins tandis que les vecteurs sont représentés par des traits épais avec une indication du nombre de bits.

Regroupement de quatre portes ET

Dans l’exemple précédent, un symbole relié à des vecteurs représente le regroupement de plusieurs circuits logiques identiques. Mais ce n’est pas toujours le cas. Sur le schéma suivant, le symbole représente un additionneur capable de calculer la somme de deux nombres sur quatre bits. On ne peut pas simplement détailler ce circuit en quatre additionneurs indépendants.

Additionneur sur quatre bits

Décodeurs

Un décodeur est un circuit qui possède NN entrées et 2N2^N sorties. À chaque combinaison possible de valeurs en entrée, correspond une, et une seule sortie.

Décodeur

La table de vérité suivante donne l’exemple d’un décodeur à trois entrées. Chacune des huit combinaisons possibles de ee active l’une des huit sorties. Ici, nous avons suivi l’ordre de la numération binaire, c’est-à-dire que les combinaisons d’entrées représentent les nombres compris entre 0 et 7. La valeur de ee indique le numéro de la sortie à activer.

e2e_2 e1e_1 e0e_0 s7s_7 s6s_6 s5s_5 s4s_4 s3s_3 s2s_2 s1s_1 s0s_0
0 0 0 0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0

Réalisation d’une fonction logique avec un décodeur

Nous allons proposer une nouvelle version de la partie commande de notre robot. Nous choisissons d’utiliser un décodeur afin de reconnaître les différentes combinaisons possibles des boutons-poussoirs. Chaque action de déplacement sera ainsi associée à une sortie du décodeur.

Ci-dessous, nous avons repris la table de vérité de la partie commande du robot en ne conservant que les lignes où au moins une sortie vaut 1 et en ajoutant une indication de la sortie du décodeur active pour chaque ligne.

BA BR BG BD Sortie du décodeur MGA MGR MDA MDR
1 0 0 0 s8s_8 1 0 1 0
0 1 0 0 s4s_4 0 1 0 1
0 0 1 0 s2s_2 0 1 1 0
0 0 0 1 s1s_1 1 0 0 1
1 0 1 0 s10s_{10} 0 0 1 0
1 0 0 1 s9s_9 1 0 0 0
0 1 1 0 s6s_6 0 0 0 1
0 1 0 1 s5s_5 0 1 0 0

On peut donc écrire les équations des sorties de la manière suivante :

MGA=s1+s8+s9MGR=s2+s4+s5MDA=s2+s8+s10MDR=s1+s4+s6\begin{aligned} MGA &= s_1 + s_8 + s_9 \\ MGR &= s_2 + s_4 + s_5 \\ MDA &= s_2 + s_8 + s_{10} \\ MDR &= s_1 + s_4 + s_6 \end{aligned}

Sur le schéma ci-dessous, nous observons que le décodeur est simplement venu remplacer les inverseurs et les portes ET de notre schéma précédent non optimisé.

Réalisation de la partie commande du robot avec un décodeur

Multiplexeurs

Un multiplexeur est un circuit d’aiguillage qui permet de sélectionner une entrée de donnée parmi 2N2^N voies en fonction d’une entrée de sélection sur NN bits. L’entrée de sélection est également appelée adresse. La figure ci-dessous représente trois multiplexeurs avec respectivement un bit d’adresse (deux voies de données), deux bits d’adresse (quatre voies de données) et trois bits d’adresse (huit voies de données).

Multiplexeurs

L’entrée d’adresse aa indique le numéro de l’entrée de données à sélectionner. La valeur de cette entrée est alors copiée sur la sortie ss. Par exemple, pour un multiplexeur à un bit d’adresse, nous avons :

s={e0si a=0e1si a=1s = \begin{cases} e_0 & \text{si } a = 0 \\ e_1 & \text{si } a = 1 \end{cases}

La table de vérité d’un multiplexeur est typiquement présentée sous une forme réduite, c’est-à-dire qu’on ne cherche pas à énumérer toutes les combinaisons possibles d’entrées mais on peut faire figurer des expressions booléennes simples dans les colonnes de sortie.

aa ss
0 e0e_0
1 e1e_1

Cette forme est équivalente à la table de vérité suivante avec cas indifférents :

aa e1e_1 e0e_0 ss
0 0 0
0 1 1
1 0 0
1 1 1

Réalisation d’une fonction logique avec un multiplexeur

Le multiplexeur permet de construire rapidement un circuit à partir d’une table de vérité. Par exemple, si nous souhaitons réaliser la partie commande de notre robot, nous pouvons utiliser des multiplexeurs à seize voies, en associant à chaque combinaison de l’état des boutons les valeurs attendues en sortie.

La table de vérité d’un multiplexeur à quatre bits d’adresse est résumée ci-dessous.

a3a_3 a2a_2 a1a_1 a0a_0 ss
0 0 0 0 e0e_0
0 0 0 1 e1e_1
0 0 1 0 e2e_2
0 0 1 1 e3e_3
1 1 1 0 e14e_{14}
1 1 1 1 e15e_{15}

Si nous décidons, par exemple, que a3=BAa_3 = BA, a2=BRa_2 = BR, a1=BGa_1 = BG, a0=BDa_0 = BD et s=MDAs = MDA, il suffit d’affecter à chaque voie eie_i la valeur de MDAMDA correspondant à la combinaison ii d’états des boutons. Le circuit complet est représenté ci-dessous.

Réalisation de la partie commande du robot avec des multiplexeurs

Opérateurs arithmétiques

L’additionneur peut être considéré comme un des circuits de base dans de nombreuses applications. Nous aurons l’occasion de l’utiliser à nouveau lorsque nous présenterons les circuits compteurs.

La figure ci-dessous représente un symbole possible pour un circuit additionneur sur quatre bits. Les nombres à additionner sont présentés en binaire sur les entrées aa et bb. La somme est disponible sur la sortie ss tandis que la sortie coutc_{out} indique si l’addition des bits de poids fort a engendré une retenue.

Additionneur sur quatre bits

Nous ne détaillerons pas la structure interne de ce circuit.

La sortie coutc_{out} peut être reliée à l’entrée cinc_{in} d’un autre additionneur afin d’additionner des nombres sur un plus grand nombre de bits. Dans l’exemple ci-dessous, nous avons réalisé un additionneur sur 12 bits en utilisant trois additionneurs sur 4 bits.

Additionneur sur douze bits

Le premier additionneur calcule la somme des quatre bits de poids faible de aa et bb ainsi qu’une retenue. Le deuxième additionneur calcule la somme des bits 7 à 4 de aa et bb, en ajoutant la retenue éventuellement produite par l’additionneur précédent. Le troisième additionneur calcule la somme des quatre bits de poids fort de aa et bb, en ajoutant la retenue éventuellement produite par l’additionneur précédent.

Suivant le même principe, on trouvera des circuits soustracteurs, des multiplieurs, des unités arithmétiques et logiques (UAL) capables d’effectuer différentes opérations.

Comparateurs

Un comparateur est un circuit qui compare deux nombres aa et bb représentés en binaire et qui fournit des indications sur les relations entre ces deux nombres. Typiquement, un comparateur possédera des sorties booléennes correspondant à différentes conditions que l’on souhaite vérifier sur aa et bb (a<ba < b, a=ba = b, a>ba > b).

Comparateur

L’exemple ci-dessous illustre l’utilisation d’un comparateur et de multiplexeurs pour calculer le maximum et le minimum de deux nombres. Le circuit réalise cet algorithme :

si x < y alors
    min ← x
    max ← y
sinon
    min ← y
    max ← x
fin si

Minimum et maximum de deux nombres

Résumé

Un décodeur est un circuit logique avec NN bits en entrée et 2N2^N bits en sorties. Chaque combinaison d’entrées active une, et une seule sortie.

Un multiplexeur est un circuit logique avec NN bits d’adresse et 2N2^N bits de données en entrée. La sortie reçoit la valeur de l’entrée de données correspondant à l’adresse courante.

Les décodeurs et multiplexeurs fournissent un moyen rapide pour réaliser des fonctions logiques dont on connaît la table de vérité.

Il est possible de construire et de réutiliser des circuits logiques pour effectuer des calculs et des comparaisons entre des nombres entiers représentés en binaire.