|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
La passion du numérique Dans cet article, nous allons voir comment créer un processeur sur 4 bits, processeur très basique avec seulement 10 instructions. Processeur 4 bits de type Harvard avec deux mémoires (instructions et données) et :
Pour rappel, la famille des processeurs Motorola 68k et PowerPC sont de type Von Neumann. Il a une seule mémoire pour le programme et les données. De leur côté, les processeurs Intel IA32 (x86) et 64 bits, ainsi que les ARM, sont de type Harvard. Il existe également des CPU (processeurs) qui utilisent les structures matérielles et Von Neumann dans leurs implémentations, dont notamment les DSP (Digital Signal Processor - processeur de signal numérique) utilisés par exemple pour le traitement du son numérique. ![]() Schéma logigramme du processeur 4 bits décrit dans cet article Cet article est inspiré par le livre Digital Design And Computer Architecture, 2e édition, écrit par David Money Harris et Sarah L. Harris. Première partie : circuits logiques et combinatoires
1. Introduction [retour au plan] 1.1 Informatique Le terme désigné par "Informatique" peut-être séparé en deux parties. La partie "hardware" qui correspond au matériel et la partie "software" qui concerne les logiciels ou programmes informatiques. ![]() L'électronique numérique comprend : les circuits combinatoires (statiques et qui ne possèdent pas de mémoire) et les circuits séquentiels (dynamiques et qui possèdent une mémoire). ![]() 1.2 Représentation d'un signal analogique et d'un signal numérique ![]() Principe du passage de l'analogique au numérique Tension à 5 volts : le bit est à 1 Tension à 0 volt : le bit est à 0 En exemple, vous allumez la lumière d'une pièce en appuyant sur un interrupteur, cela correspond à un état 1. Quand vous appuyez sur l'interrupteur une nouvelle fois pour ouvrir le circuit, la lumière s'éteint, c'est l'état 0.
1.3 Symboles des dipôles ![]() Un encodage sur 4 bits correspond à quatre informations (0 et 1) soit : 0000, 0001 ou 0010, etc. produit par exemple avec quatre interrupteurs. Sur 8 bits "0000 0000", cela correspond à huit interrupteurs pouvant avoir soit la position ouvert (0) ou fermé (1). Une information codée sur 4 bits s'appelle un "nibble" soit un demi-octet et une information sur 8 bits représente un "octet". C'est une valeur d'occupation (d'information) pour l'information binaire. 2. Définition d'un circuit combinatoire [retour au plan] Un circuit combinatoire (C.C.) est un composant (forme carrée en électronique) qui comporte des entrées et une ou des sorties. On les appelle "ASI" ou "chipset" en anglais. Ils réalisent des traitements binaires entre les entrées et les sorties. ![]() Représentation d'un circuit combinatoire E = entrée (donnée brute) S = sortie (résultat) Dans cet article, nous utilisons ses deux outils mathématiques permettant de réaliser un circuit combinatoire. On peut également dire que la spécification est la description d'une technologie contrairement à l'implémentation qui concerne la réalisation. 3. Les portes logiques [retour au plan] Les portes logiques sont construites par de l'électronique analogique. Cela comprend, par exemple, les résistances, les diodes, les condensateurs, etc. qui sont interconnectés par des liaisons électriques. Nous allons voir les sept portes logiques les plus utilisées. Important : une porte logique est un composant élémentaire de base, il est indivisible, il ne peut pas être subdivisé. C'est un élément basique et physique. Ils sont assemblés en composition pour former les circuits numériques. Ils représentent une opération élémentaire de la logique booléenne (ET, OU, NON, etc.). ![]() Représentation d'un élément physique ![]() Représentation du circuit interne "UAL" ou "ALU" (Unité Agrimétrique Logique) à partir de portes logiques. Composant type 74181 utilisé dans les années 1980. 3.1 La porte logique "AND" (ET) ![]() ![]() La table de vérité permet de savoir l'état de sortie (Y) selon les entrées A et B. Ici, la porte "AND" a besoin de A et B à l'état logique 1 pour que la sortie soit aussi à l'état logique 1. Si A et B ne sont pas à 1, alors Y=0. 3.2 La porte logique "OR" (OU) ![]() ![]() 3.3 La porte logique "NOT" (NON) ![]() ![]() 3.4 La porte logique "NAND" (NON-ET) ![]() ![]() 3.5 La porte logique "NOR" (NON-OU) ![]() ![]() 3.6 La porte logique "XOR" (OU exclusif) ![]() ![]() Par exemple, en voiture, quand j'arrive à une intersection avec seulement une direction à gauche ou à droite, c'est une condition exclusive A=à droite, B=à gauche, la sortie Y ne peux pas avoir A et B ensemble (il faut choisir entre A ou B exclusivement). 3.7 La porte logique "XNOR" (NON-OU exclusif) ![]() ![]() 3.8 Autres composants 3.8.1 Le "buffer" (tampon) ![]() ![]() 3.8.2 Le "tri state buffer" (le tampon à trois états) ![]() ![]() 3.9 Les caractéristiques des portes logiques 3.9.1 Le fan-out et le fan-in Le "fan-out" correspond au nombre de portes logiques combinées à la sortie d'une porte logique. Par exemple, fan-out=3, cette indication montre que la porte logique en sortie ne peut être combinée avec un maximum de trois autres portes logiques. S'il y a quatre portes logiques en sortie de la première, le circuit combinatoire devient instable et son fonctionnement n'est plus garanti. On retrouve cette information dans la fiche technique du fabricant du composant. ![]() Représentation avec trois portes NAN connectées en sortie de la première porte logique NAN Si le fan-out est égal à 2, alors il ne faut pas trois portes logiques en sortie. ![]() ![]() Représentation de la porte logique "AND3 fan-in=3" Un circuit combinatoire est un circuit qui regroupe plusieurs portes logiques afin d'obtenir un traitement automatique d'une information. Il faut définir formellement et mathématiquement le fonctionnement du circuit combinatoire. Un circuit combinatoire est décrit formellement comme un graphe constitué d'éléments et de liens orientés. ![]() Représentation d'un graphe orienté 5. Les spécifications d'un circuit combinatoire [retour au plan] 5.1 Les deux premières règles
![]() Représentation d'un circuit combinatoire avec l'élément le plus petit, la porte logique "en bas à gauche" 5.2 La troisième règle est la combinaison Pour chaque combinaison d'entrée "n", doit correspondre une unique combinaison de sortie "m". ![]() Logique combinatoire Exemple : avec trois variables non définies qui utilisent la valeur booléenne (soit 1 ou 0), combien de combinaison est-il possible de réaliser ? Les combinaisons possibles : ![]() Exemple : en entrée "110" ; en sortie, il est alors possible de définir "010". Attention à ne pas confondre les circuits combinatoires avec les circuits séquentiels. Nous sommes sur un circuit combinatoire qui est statique. Il produit toujours la même valeur en sortie selon la valeur d'entrée. Un circuit séquentiel produit un résultat en sortie qui change avec les mêmes données en entrée, il est dynamique. 5.3 Quatrième règle, l'entrée d'un élément qui ne peut recevoir qu'une unique sortie précédente (contorsion ou conflit) Le circuit combinatoire A (C.C. A) et le B (C.C. B) en sortie rentrent dans la même entrée du circuit combinatoire à gauche (C.C.). Nous sommes en présence d'une contorsion. Il n'est pas possible pour l'entrée du circuit combinatoire de gauche (C.C.) de connaître l'état de la valeur binaire à sa porte. 5.4 Dernière règle, le chemin d'un signal ne peut pas traverser un élément plus d'une fois (boucle/cycle) Les boucles et les cycles sont interdits à l'intérieur d'un circuit combinatoire. Il n'est pas possible de transmettre le résultat (fil en rouge) dans le premier circuit combinatoire (C.C.) de gauche issue de la sortie du dernier circuit combinatoire (C.C.) de droite. A l'inverse, dans les circuits séquentiels, la boucle est obligatoire, les sorties reviennent dans les entrées. 6. La valeur Z et son utilisation dans les bus [retour au plan] La valeur Z ou l'état Z est le troisième état logique en comptant l'état 0 et l'état 1. La valeur Z est une valeur flottante ou à haute impédance (résistance). 6.1 Pourquoi la valeur Z L'état binaire 1 est la résultante de la tension portée à 5 volts sur un fil. Il en va de même pour l'état 0 qui est la résultante de la tension à 0 volt. La tension est la différence de potentielle entre deux points. Nous pouvons également comparer ça à un château d'eau et à la pression au robinet qui dépendra de la hauteur du château d'eau. Si nous prenons une pile de 1,5 volt, nous avons une borne "+" (positive) et une bonne "-" (négative). ![]() ![]() Un fil parcourut par un signal avec une valeur Z (ou X dans les logiciels de simulation) signifie que le fil n'est pas branché, ni à 0 ni à 1, on peut dire qu'il est dans le vide. Il n'est raccordé à rien (pas au "+" ni au "-" de la pile). Dans le schéma suivant, Vcc est le "+" de la pile et GND est le "-". L'état logique de la lampe sur Vcc est le 1. L'état logique de la lampe sur GND est le 0. L'état logique de la lampe du milieu est Z (notre interrupteur ouvert). 6.2 Le tampon à trois états ("tristate buffer") Le tampon à trois états ne change pas l'état du signal d'entrée (input) à la sortie (output). Cependant, il possède une entrée de commande (En). Il est nécessaire de préciser que le rôle de la valeur Z est de détourner la règle 4 de la définition des circuits combinatoires. C'est-à-dire que l'entrée d'un élément ne peut recevoir d'une unique sortie précédente, sinon il y a risque de contorsion ou conflit. Il va donc être possible d'avoir plusieurs sorties sur le même fil, on appelle ça un bus, il est utilisé pour transporter de l'information. ![]() Représentation de plusieurs circuits communiquant à travers un fil (bus) commandée par un arbitre Pour les circuits 1, 3 et 4, les tampons à trois états (cercle rouge) vont empêcher que la valeur soit 1 ou 0 sur le bus en produisant la valeur Z (fil dans le vide). Il n'y aura que le circuit 2 qui enverra sa valeur 1 ou 0 sur le bus. Les tampons à trois états sont commandés par l'arbitre de bus qui envoie sur l'entrée "En", la valeur 0 indiquant de passer à la valeur Z ou 1 afin de transmettre la valeur de sortie du circuit concerné (0 ou 1). Ici, l'arbitre possède huit fils de commandes. L'information est envoyée à tous les circuits en même temps. Les quatre premiers fils d'en haut communiquent la commande 0 ou 1 aux circuits 1, 2, 3 et 4, et donnent l'autorisation de lire l'information provenant du bus (entrée "En" sur les circuits). Les quatre fils du bas commandent les tampons à trois états de chaque sortie des circuits. Dans les années 1980, l'arbitre de bus était réalisé avec un simple décodeur. Dans les années 2000, il était implémenté dans les jeux de composants. Aujourd'hui, l'arbitre de bus est implémenté dans le processeur. 6.3 Les états 0-faible et 1-faible en relation avec le signal Z Certains circuits ne tolèrent pas l'utilisation de Z dans leurs entrées et peuvent dysfonctionner. Ils n'acceptent pas de valeur flottante. La valeur Z doit être remplacée par un état 0 ou 1. La réalisation de circuit avec la valeur Z est une mauvaise façon de conception, les valeurs Z ne sont pas stables (ni 0 ni 1). Pour éliminer le signal Z, il existe deux autres états : l'état 0-faible et l'état 1-faible. Ils sont utilisés pour remplacer le Z dans les bus vide, les bus sans 0 ni 1. Ils vont permettre de remplacer l'état Z sur un bus en 0-faible ou 1-faible. Les états "faible" sont des constantes fixes, ils ne peuvent pas changer, ils sont définis lors de la conception du circuit en ajoutant des résistances. Dans le schéma ci-dessous, une entrée à l'état 0 sur le tampon à trois états (en haut) : Le tampon à trois états reçoit l'information 0 lui indiquant de ne pas transmettre l'information de son entrée et de passer au signal Z (X dans le schéma). Une résistance de rappel est placée entre le 0 volt et le fil du bus. Cette méthode permet de supprimer le signal Z sur le bus et de placer la valeur 0-faible. Pour la valeur 1, on place la résistance de tirage avec le 5 volts. En l'absence de la résistance (100 KΩ pour une tension de 5 volts), la valeur du bus serait Z (aléatoire, inconnu). Il serait possible de placer le fil directement sur le 0 volt, mais dans cette configuration, le bus à une valeur constante, ce qui produirait un conflit si la valeur 1 apparaît. Avec cette résistance qui produit un 0-faible sur le bus et si la valeur 1 se présente, cette valeur prend le dessus sur la valeur 0-faible. 7. La composition en cascade [retour au plan] La modularité est la manière de concevoir un circuit en le subdivisant en circuits plus petits. La composition en cascade est similaire à la modularité, à condition que les petits soient du même type que le plus grand. C'est applicable sur certains circuits ce qui les rend très flexibles. 7.1 Exemple 1 : construction d'un multiplexeur 4-1 (Mux 4-1) à partir de deux Mux 2-1 Pour rappel, un Mux est un aiguilleur de signal, avec deux entrées (1 et 2) et une seule sortie. Le Mux 2-1 sort l'information de l'entrée 1 ou 2 sur la sortie, en fonction de son entrée de commande (0 ou 1). En entrée de commande, 0 est la valeur de l'entrée 1 en sortie. En entrée de commande, 1 est la valeur de l'entrée 2 en sortie. L'entrée de commande est commune aux deux premiers des Mux de gauche. La deuxième entrée de commande est unique au Mux de droite. Nous avons donc 2 bits pour les entrées de commande avec quatre possibilités (00, 01,10 et 11). 7.2 Exemple 2 : construction d'un additionneur 4 bits En binaire, nous disposons de la valeur 0 et 1 pour l'ensemble des opérations. Sur 4 bits, nous disposons de : ![]() ![]() ![]() ![]()
Sur la sortie S, nous trouverons l'état = 0. Sur la sortie C1 ou (Cout), la retenue qui fait = 1. L'entrée C0 (Cin) n'est pas utilisée pour la première opération (pas de retenue). Vérifions l'additionneur avec la table de vérité : Pour pouvoir calculer sur un ensemble de 4 bits, il faut rajouter trois additionneurs au premier. La sortie C1 (la retenue) du premier additionneur est raccordée à l'entrée C0 du second additionneur et ainsi de suite. Le résultat est sur 4 bits (S0, S1, S2 et S3), soit dans notre exemple : 0110=6 en décimal. Essayons : 1001+1001 (en décimal : 9+9=18) Dans ce cas de figure, l'opération (18 en décimal) tient sur 5 bits. Notre additionneur ne fait que 4 bits en sortie, nous avons ici en sortie C1 un "dont't care", un débordement représenté par l'état 1. Concevoir l'additionneur avec des portes logiques en utilisant les fonctions canoniques disjonctives Calcul de la fonction S. Calcul de la fonction C1 (Cout). Avec la table de vérité, nous recherchons dans la colonne S et C1 tous les états à 1 : On peut dire que :
Nous avons quatre items avec 1 à S et quatre items avec 1 à C1.
La réduction en utilisant la table de Carlo Nous prenons la sortie C1 soit :
Nous allons pour chaque item placer "1" dans la table de Carlo. Pour le premier = Ā.B.C0 Ā-B = 01-C0 = 1 Pour le deuxième item = A.B̅.C0 Pour le troisième item = A.B.C̄0̄ Le dernier item = A.B.C0 Les cases vides correspondent à 0. Dans cette dernière table, nous allons faire des ensembles par paire pour les valeurs de 1. Nous avons réduit à trois items, soit : A.B.C0 A.B.C0 A.B.C0 Nous allons encore réduire en éliminant les valeurs qui changent pour chaque item. Item 1 : A.B.C0
Reprenons la forme canonique de la sortie S pour la réduire :
Première règle du XOR : x.ȳ+x̄.y = x⊕y Deuxième règle du XNOR : x.y+x̄.ȳ = x⊗y = x̄⊕ȳ Pour la première parenthèse Ā.(B̅.C0+B.C̄0̄), nous pouvons constater qu'elle est identique à la première règle XOR :
Ou se trouve x.
On reprend les équations précédentes.
Pour la sortie C1, nous avons besoin de trois portes AND (A-B)+(A-C0)+(B-C0). Et de deux portes OR (A-B)+(A-C0)+(B-C0) que nous allons réduire à une porte OR fan-in 3. Nous disposons des éléments pour construire le logigramme. Vous pouvez utiliser le simulateur gratuit Logisim téléchargeable sur www.cburch.com/logisim/. Première étape, nous plaçons les entrées [A,C,C0] ainsi que les deux sorties [S,C1] en utilisant des lampes. Commençons par la fonction S=A⊕B⊕C0. La fonction S est terminée. Maintenant la fonction C1 (A-B)+(A-C0)+(B-C0). On commence par les portes AND (A-B)+(A-C0)+(B-C0) : Il ne nous reste plus que la porte OR (A-B)+(A-C0)+(B-C0). L'additionneur sur 1 bit est terminé. Vous pouvez l'assembler avec le même additionneur en utilisant la sortie C1 avec C0 du prochain additionneur et ainsi de suite. 9. Annexe (liste des composants TTL) [retour au plan] Une liste des composants logiques, de la série 7400, utilisables pour la réalisation de circuits combinatoires est disponible sur Wikipédia.
|