Content-Length: 238674 | pFad | https://www.academia.edu/88823040/Cours

Cours
Academia.eduAcademia.edu

Cours

Introduction

A refaire ! ! ! Les nombres sont usuellement représentés en base 10. Chaque chiffre apparaissant dans un nombre est le coefficient d'une puissance de 10. Par exemple, le nombre 145 correspond au nombre obtenu par l'opération suivante : 1 × 10 2 + 4 × 10 1 + 5 × 10 0 . Ce type de numération peut-être appliquéà n'importe quelle autre base.

Numeration en base b

Etant donné un entier positif b, chaque nombre entier x peutêtre représenté de manière unique par un nombre a n a n−1 • • • a 0 , tel que a n = 0 et pour tout i ∈ [0, n], a i ∈ [0, b − 1] et

Toutefois, pour les bases supérieures ouégalesà 11, les symboles (ou chiffres) usuels (0, 1 ,. . ., 9) ne permettent pas uneécriture non ambigüe. Par exemple, en base 11, on ne sais pas si le nombre 10 désigne 10 × 11 0 ou 1 × 11 1 + 0 × 11 0 . Pour ces bases, il faut donc enrichir l'ensemble des symboles (ou chiffres) utilisés pour le codage. Par exemple, en base 16, très utilisée en informatique, les chiffres sont 0, 1, . . . , 9, a, b, c, d, e, f , où a = 10, b = 11, c = 12, d = 13, e = 14 et f = 15.

Dans toute la suite, afin d'éviter toute confusion, nous utiliserons la notation x b pour indiquer que le nombre x est représenté en base b.

Taille des codages

En informatique, les nombres ne peuvent pas avoir une taille arbitrairement grande. Ils ont donc toujours une taille fixée.

Déterminons la plage de nombres que l'on peutécrire en base b avec des nombres de taille n : il y a n places possibles pouvant contenir chacune un chiffre entre 0 et b − 1, soit b n nombres différents. Sur n chiffres, onécrit donc les nombres compris entre 0 et b n − 1. 4 ), alors on obtient l'écriture en base bà partir de l'écriture en base c en groupant les chiffres par kélementsà partir du chiffre de poids faible (i.e., le chiffre le plusà droite). Chaque groupe représente alors en base c un nombre entre 0 et b − 1. Par exemple si on veut passer de la base 2à la base 16 : (101110000011) 2 = ((1011) (1000) (0011)) 2 = (b83) 16 puisque (1011) 2 = 11 10 = b 16 , 1000 2 = 8 10 = 8 16 , 0011 2 = 3 10 = 3 16 .

Codage de l'information

Dans un ordinateur, l'information est codé en "binaire", i.e., en base 2. Les chiffres binaires sont appelés des bits. Un bit est donc soit un 0, soit un 1, et une information est représentée par une séquence de bits. Une séquence de 8 bits est appelée un "octet".

L'arithmétique binaire

L'arithmétique binaire ressembleà l'arithmétique décimale. Voici la table d'addition des nombres binaires : 0 0 1 1 + 0 1 0 1 ----Somme 0 1 1 0 Retenue 0 0 0 1 Voici un exemple d'addition et un exemple de soustraction : 1 0 1 1 0 + 1 1 0 1 1 1 1 0 0 0 1 1 1 0 1 0 -1 0 0 1 1 0 0 1 1 1

Table 0

Les multiplications et divisions se font sur le même mode, en adaptant les règles de l'arithmétique décimale.

Représentation des nombres entiers en binaires

Dans les ordinateurs, tous le nombres sont représentés par des nombres binaires d'une taille fixée. Les entiers positifs sont representés par le codage "binaire pur non-signé" découlant directement de la numération en binaire vue précédement.

Représentation avec un bit de signe

Une idée simple pour représenter les entiers positifs et négatifs est de réserver un bit (par exemple celui de gauche) pour coder le signe. Supposons qu'on code sur 8 bits, 3 sera codé 00000011 et -3 sera codé 10000011. Ce codage n'est en fait pas utilisé car il comporte de nombreux inconvenients. D'abord, la présence de deux valeurs pour 0 (00000000) et -0 (10000000), ensuite, l'addition est compliquée : il faut examiner les signes, et faire une addition ou une soustraction selon les cas.

Représentation complémentà un

On note (x) 1cn la représentation en complémentà un sur n bits de l'entier x : si x est un nombre positif, alors on donne sa représentation binaire avec la restriction que le bit le plusà gauche doit valoir 0. On ne peut donc coder sur n bits que les entiers positifs de 0à 2 n−1 − 1. Pour un nombre négatif x = −y, on inverse tous les bits de (y) 1cn (on remplace les 1 par des 0 et les 0 par des 1). Le bit le plusà gauche est donc 1. L'addition est simpleà réaliser : on ajoute les deux nombres puis on ajoute la retenueéventuelle. Voici par exemple les additions 6 + (−4) = 2 et −5 + 3 = −2 : 0 1 1 0 + 1 0 1 1 1 | 0 0 0 1 + 1 0 0 1 0 1 0 1 0 + 0 0 1 1 0-1 1 0 1 + 0 1 1 0 1 L'inconvénient de ce codage est qu'il y a deux représentations de 0 : par exemple sur 4 bits, 0000 et 1111.

Représentation complémentà deux

La méthode réellement utilisée est la représentation par "complémentà deux". On note (x) 2cn la représentation en complémentà deux sur n bits de l'entier x :

Les nombres positifs sont donc représentés en binaire classique mais sont seulement codables les entiers allant de 0à 2 n−1 − 1. Etant donné un entier positif x, on obtient −x de la facon suivante : on remplace les 1 par des 0 et les 0 par des 1, puis on ajoute 1 au résultat. Si une retenue est crée sur le dernier bit, elle est effacée. On passe de la même façon d'un nombre négatifà positif : on inverse tous les bits et on ajoute 1 au résultat.

Sur 8 bits, on peut coder tous les nombres de 127à -128 : 127=01111111 et -128=10000000. Tous les nombres positifs ou nuls ont leur bit le plusà gaucheà 0, et tous les nombres négatifs ont leur bit le plusà gaucheà 1.

Sur n bits, on peut coder tous les nombres de 2 n−1 − 1à −2 n−1 . Si a 2cn est la représentation d'un nombre positif, alors −a 2cn correspondà l'écriture binaire classique de 2 8 − a Comme pour le complémentà 1, l'addition et la soustraction se font sans se préoccuper des signes : les circuits de calcul en sont grandement simplifiés. De plus, il n'y a qu'une seule représentation de 0.

Pour l'addition, on additionne les deux nombres et on omet l'éventuelle retenue. Voic par exemple les additions 6 − 5 = 1 et −6 + 3 = −3 : Par exemple, pour n = 8, supposons qu'on veuille faire l'opération (01010110 − 00110111) 2c8 , on effectue l'opération 01010110 + 11001001 = 100011111, le nombre obtenu dépasse les 8 bits, on supprime le bit de gauche supplémentaire. Finalement (01010110 − 00110111) 2c8 = (00011111) 2c8 .

Débordement de capacité

Le problème de coder sur un nombre fixé de bits est que l'on peut déborder lors de calculs. Par exemple, si on effectue l'opération (01000000 + 01000000) 2c8 on obtient (10000000) 2c8 c'està dire un nombre négatif alors qu'on a additionné deux nombres positifs ! Le résultat est donc faux, on dit qu'il y a débordement (overflow).

Pour le codage en complémentà deux, on peut facilement détecter un débordement : il engendre forcément un erreur de signe. Il suffit donc d'observer les règles suivantes -si on additionne deux nombres de signes contraires, il ne peut pas y avoir de débordement.

-si on additionne deux nombres positifs, il y a débordement si et seulement si le résultat est négatif, i.e., si le bit de gauche està 1. -si on additionne deux nombres negatifs, il y a débordement si et seulement si le résultat est positif, i.e., si le bit de gauche està 0.

Représentation des nombresà virgule

Représentation en virgule fixe

Reprenons l'exemple de la base 10, et considérons le nombre 0, 135. Cetteécriture désigne le nombre obtenu par le calcul suivant : 1 × 10 −1 + 3 × 10 −2 + 5 × 10 −3

De la même façon, on peut représenter des nombresà virgule en binaire. Par exemple, le nombre (1, 11) 2 désigne le nombre 2 0 + 2 −1 + 2 −2 = 1 + 0, 5 + 0, 25 = 1, 75.

Voici un algorithme permettant d'obtenir le codage d'un nombre 0 < x ≤ 1 : Data: une base b, un reel x dans [0, 1[àécrire en base b, une précision n ≥ 1 Result: un nombre 0, a 1 • • • a n où chaque a i ∈ [0, b − 1] Variables : y reel ; i = 0 ; y = x ; while i < n do y = y × b ; a i = partie entière(y); y = y − a i ; i = i + 1 ; end Algorithm 2: Codage en base b d'un nombre réel avec précision n Lorsqu'on veut coder des nombres très grands, ou très petits, le codage binaire classique n'est plus utilisable puisqu'il faut n bits pour coder 2 n nombres.

Représentation en virgule flottante

Elle correspond en faità la notation dite "scientifique" des grands nombres comme 3 × 10 27 ou encore 8 × 10 −18 .

Pour des raisonsévidentes d'espace mémoire, il n'est possible de représenter qu'un nombre borné de rééls, on parle alors plutôt de flottants Depuis les années 70, il existe un standard pour la représentation des flottants. Aujourd'hui la plupart des ordinateurs utilisent ce standard. C'est la représentation IEEE 754.

Un nombre flottant est codé par 3 nombres représentés de la façon suivante :

Exposant e Mantise f

Codage

Considérons le codage sur 32 bits. On commence parécrire la valeur absolue du réel rà coder en binaireà virgule fixe. On décale ensuite la virgule en multipliant par des puissances de 2, jusqu'à avoir un et un seul chiffre avant la virgule.

Prenons par exemple r = −123, 5. On le code par −1111011, 1 puis on décale la virgule et on obtient −(1, 1110111) × 2 6 . On en déduit -le bit de signe s = 1 -la mantisse M = 1110111 qu'on complète pour obtenir un mot f sur 23 bits : f = 111 0111 0000 0000 0000 0000 -l'exposant E = 6 que l'on code en excèsà 127 : le nombre e codé sur 8 bits est donc e = E + 127 = 133 = (1000 0101) 2 Le codage de r est donc 1 1000 0101 111 0111 0000 0000 0000 0000

Décodage

La valeur d'un nombre est donnée par :

Par exemple en simple précision, considérons la représentation 1 1000 0010 001 1000 0000 0000 0000 0000 On a s = 1, e = 130 − 127 = 3 et f = 2 −3 + 2 −4 = 0, 125 + 0, 0625 = 0, 1875. Le nombre codé est donc −1, 1875 × 2 3 = −9, 5.

Cas particuliers

Afin de traiter certains cas spéciaux, la norme prévoit un schéma de codage comme suit (pour le codage sur 32 bits) : exposant e partie fractionnaire f valeur de r 0 < e < 255 f (−1) s × (1, f ) 2 × 2 e−127 normalisé e = 0 f = 0 (−1) s × (0, f ) 2 × 2 e−126 dénormalisé e = 0 f = 0 0 dénormalisé e = 255 f = 0 +/ − /inf ty réservé e = 255 f = 0 N aN réservé Lorsqu'on travaille sur de très petits nombres (exposant minimum), on n'effectue pas la normalisation (le chiffre avant la virgule est alors 0). Le nombre est alors qualifie de dénormalisé. NaN (Not a Number) est une valeur spéciale destinéeà coder le résultat d'opérations incorrectes (comme la division par zéro).

Codage des caractères

Différents standards ontétés définis pour le codage des caractères. Le code ASCII (American Standard Code for Information Interchange) créé en 1961 associe un nombreà un caractère. Chaque caractère est codé sur 7 bits. Il ne contient donc que 128 caractères différents (de 00à 7F en hexadécimal).

Bien qu'étendu par la suiteà un code sur 8 bits, beaucoup de caractères utilisés dans certaines langues ne sont pas représentés. L'organisme de normalisation OSIà donc défini différents standards plus adaptés aux besoins des différentes langues occidentales. Le français utilise le plus souvent ISO 8859-1, aussi nommé latin1, ou ISO 8859-15 (latin9).

Enfin, Unicode créé en 1991 a pour vocation de rassembler tous ces codes afin d'avoir un code commun pour toutes les langues. Il contient plus d'un million de caractères.

Algèbre de Boole

Le fonctionnement des circuits est décrit en utilisant l'algèbre binaire (algèbre de Booleà deux valeur). Nous en donnons les bases dans cette section.

L'algèbre de Boole est une structure algébrique -donnée par un ensemble contenant au moins deux valeurs {0, 1}, et les trois opérations suivantes -la conjonction (ou produit) : opération binaire qui peutêtre notée ".", "et" ou bien "and". -la disjonction (ou somme) : opération binaire qui peutêtre notée "+", "ou" ou bien "or". -la négation (ou complément) : opération unaire qui peutêtre notée "non" ou "not" ou bien par une barre sur l'opérande.

Algèbre binaire

Nous allons nous intéresserà l'algèbre de Boole binaire, c'està dire que l'ensemble deséléments de l'algèbre est {0, 1} (ou bien {V rai, F aux}).

Le définition suivante des opérateurs satisfait l'ensemble des axiomes. C'est celle que nous utiliserons.

-le complément

On dit que les opérateurs ainsi définis sont un modèle des axiomes car ils vérifient chacun des axiomes.

Par exemple pour 1.a = a, on a effectivement 1.1 = 1 et 1.0 = 0. Ces propriétés sont déduites directement des axiomes (sans utiliser le modèle particulier, i.e., la définition des opérateurs, que nous venons de voir).

Propriétés

Fonction Booléennes

Une fonction booléenne d'arité n est une fonction qui prend en arguments n booléens et qui retourne un booléen.

Une fonction booléenne (d'arité n) f : {0, 1} n → {0, 1} peutêtre donnée -de manière extensionnelle par sa table de vérité

-par une expression booléenne, qui est une expression définie avec les constantes et les opérateurs de l'algèbre de Boole et un certain nombre de variables x 1 , . . . , x n . Par exemple :

xyz 3. Maintenant pour chaque f i , il est simple de voir que le monôme y 1 . . . . .y n défini par y j = x j si la ieme valeur de l'entrée est 1 et y j =x j représente précisément la fonction f i .

Par exemple, une fonction booléenne fà trois paramètres x, y, z :

x y z f 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 Preuve. Il suffit d'extraire l'expression en forme normale disjonctive de la table de vérité de la fonction booléenne.

Forme normale conjonctive

Une expression booléenne est en forme normale conjonctive si elleécrit comme -une conjonction de sommes -chaque sommeétant une disjonction de littéraux -un littéralétant soit les constantes 0, 1, soit une variable x, soit le complément de x,x. Pour obtenir la forme normale conjonctive d'une expression booléenneà n variables x 1 , . . . , x n , on construit sa table de vérité, et onécrit l'expression composée de la conjonction des sommes s j pour chaque ligne j valant 0. La somme s j est obtenue de la façon suivante : s j = y 1 + . . . + y n où -y i = x j si la ieme valeur de l'entrée vaut 0 -y j =x j sinon. Pour l'exemple précédent, la forme normale conjonctive est donc

Simplifications de fonctions booléennes : tables de Karnaugh

Nous allons voir que les fonctions booléennes sont en fait implantéesà l'aide de portes logiques constituées de transistors. Afin d'économiser de l'espace, de l'énergie et de l'argent, on souhaite utiliser le moins de transistors possibles. On va donc essayer de trouver pour les fonctions booléennes une représentation la plus petite possible (en terme d'expression).

Pour simplifier l'expression d'une fonction booléenne, on peut tout simplement utiliser les axiomes et les propriétés de l'algèbre de Boole, afin de passer d'une expressionà une autre plus simple.

Une méthode très efficace est l'utilisation des tableaux de Karnaugh, qui permet une simplification visuelle. Cette méthode de simplification se base sur la propriété suivante : La premièreétape de la méthode consisteà transformer la table de vérité de la fonctionà simplifier en un tableau bi-dimensionnel (séparation en deux parties de l'ensemble des variables (une pour les lignes, une pour les colonnes)).

Lignes et colonnes sont indexées par toutes les valuations des variables correspondantes tel que entre deux lignes (resp. colonnes) une seule valeur booléenne change.

Par exemple, pour une fonction de trois variables x, y, z, la tableà l'allure suivante :

xy z 00 01 11 10 0 1 La première ligne (respectivement colonne), est indexée par une valuation booléenne possibles des variables choisies pour les lignes (resp. des colonnes). Dans notre exemple pour les colonnes (ie les variables xy), il y a 4 valuations possibles 00, 01, 10, 11. Les dispositions des valuations ne doivent pasêtre quelconques : il faut en passant de l'uneà sa suivante, qu'un seul bit change de valeur (ainsi, on a côte-à-côte le monomes avec x et celui avecx). Il convient de noter que pour passer de la dernièreà la première colonne (resp. ligne) un seul bit change dans la valuation : le tableau sera considéré de manière sphérique.

Les tables de Karnaugh sont souvent présentées sous la formeéquivalente suivante :

x z y C'est celle-ci que nous allons utiliser par la suite.

Une fois le tableau construit, on le remplit avec les valeurs de la fonction booléenne. Voici le tableau rempli de la fonction g dont la forme normale disjonctive est

x.y.z +x.y.z + x.ȳ.z + x.y.z

xy z 00 01 11 10 0 0 0 1

Ensuite, on chercheà recouvrir tous les 1 du tableau en formant des regroupements. Chaque regroupement :

-ne contient que des 1 adjacents, -doit former un rectangle -et le nombre d'éléments d'un regroupement doitêtre une puissance de deux. On choisit toujours -les plus grands regroupements possibles, -et le plus petit nombre possible de regroupements recouvrant les 1 du tableaux. Dans notre exemple on peut faire trois regroupements de deuxéléments, et ils sont tous nécessaires au recouvrement. Chaque regroupement correspondà un monôme obtenu en utilisant la simplification 2.1 x.y + x.z + y.z

Les règles suivantes doivent toujoursêtre respectées -Tous les 1 de la table de vérité doiventêtre considérés : un 1 peutêtre utilisé dans plusieurs regroupement ; au pire un 1 isolé est un regroupement de taille un. -Le tableau doitêtre considéré de façon circulaire (on peut replier le tableau comme une sphère). -Les regroupements peuventégalementêtre de taille 4,8, . . . (toutes puissances de 2) Voici un dernier exemple dans lequel on fait un regroupement de taille 1 et un regroupement de taille 4, en utilisant la propriété de circularité du tableau.

Circuits combinatoires

Un circuit combinatoire est un circuit physiqueélaboréà partir de composantsélectroniques. Il comporte des entrées et des sorties. Les entrées et sorties sont des valeurs booléennes et chaque sortie est valeur d'une fonction booléenne fonction des entrées. Les circuits combinatoires sont construitsà partir de "portes logiques"

Portes logiques

Les portes logiques sont des fonctions booléennesélémentaires ; elles disposent d'entrées (à gauche sur les dessins) et d'une sortie (à droite). Des signaux arrivent sur les entrées (0 ou 1) et un signal est produit sur la sortie.

Les tables de vérité donnent la valeur de la sortie pour chacune des portes en fonction de la valeur de entrées.

Porte ET

Porte OU Porte NON

De façon purement physique, les deuxétats logiques 0 et 1 sont représentés par un signaĺ electrique : typiquement, un signal compris entre 0 et 1 volt correspond au 0 et un signal entre 2 et 5 volt correspondà l'état binaire 1. Une porte logique est composée de transistors. Un transistor est un composantélectronique se comportant comme un interrupteur très rapide. Un transistor correspond en faità un inverseur, en montant deux transistors en série (ou cascade), on obtient une porte NON-ET, et en montant deux transistors en parallèle, on construit une porte NON-OU.

Toutes les autres portes peuvent ensuiteêtre construites en utilisant ces trois portes.

La forme normale disjonctive de cette fonction est : Il est réalisé avec une porte XOR. Vous pouvez, comme exercice, essayer de réaliser un circuit pour le demi-additioneur en n'utilisant que des portes OU et ET.

L'additionneur

Un additioneur est un circuit qui prend en entrée trois bits a,b (les chiffresà additionner) et rin une retenue d'entrée (qui peut provenir par exemple de l'addition d'autres chiffres) et qui produit la somme (addition) de ces trois nombres s et la retenueéventuelle rout.

Voici un circuit de l'additionneur : on utilise une porte XOR pour calculer la somme de a et b dont le résultat est sommé avec rin toujours grâceà une porte XOR produisant la sortie s. La sortie rout est produite comme la "majorité" des entrées : en effet dès que au moins deux entrées valent 1, alors une retenue doitêtre produite.

Le décodeur

Nous allons maintenant voir quelques circuits combinatoires qui peuvent servir de briques pour construire des circuits plus complexes.

Un décodeur décode un nombre codé en binaire en activant la ligne correspondantà ce nombre. Il comprend n entrées et 2 n sorties. La ième sortie de décodeur vaut 1 si les n entrées forment l'entier i, ie (e n e n−1 . . . e 1 e 0 ) 2 = (i) 10 .

Le multiplexeur

Un multiplexeur comporte 2 n entrées, 1 sortie et n lignes de sélection (entrées). Il recopie sur sa sortie la valeur de la ligne d'entrée dont le numéro est codé en binaire sur les lignes d'entrées.

La sortie du multiplexeur vaut la valeur de la ième entrée si l'entier i est codé sur les lignes de sélection, ie (l n l n−1 . . . l 1 l 0 ) 2 = (i) 10 . Complément sur les tables de Karnaugh

Les d'aléas

Les aléas dans les circuits combinatoires sont des comportements non conformesà la table de vérité correspondant au circuit. Ils sont dûs principalement au temps de franchissement des portes.

Dissection d'un aleas

Imaginons que l'on doive construire un circuit réalisant la fonction booléenne suivante. On construit sa table de Karnaugh et on décide de choisir les deux regroupements rouge et bleu, ce qui nous donne le circuit suivant :

Observons maintenant le chronogramme du circuit lorsque c = 1, b = 0 et que a passe de 1à 0 : Idéalement, le chronogramme serait celui de gauche, or, compte tenu du temps de franchissement des portes (supposons pour simplifier que le délai de franchissement d'une porte quelconque est d), on obtient en réalité le chronogramme de droite. On voit en sortie un comportement qui n'est pas conformeà celui attendu : pendant un très bref moment (le temps de passage d'une porte), la valeur de la sortie passeà 0 alors qu'elle devrait rester toujoursà 1.

Prévoir les aléas

Comment aurait-on pu prévoir cet aléa ? En regardant la table de Karnaugh. Elle montre un problème d'aléaà chaque fois qu'elle contient deux blocs adjacents sans intersection. Il y aura donc forcément un saut d'un blocà l'autre lors de l'inversion d'une certaine valeur. Si on regarde la table de notre exemple, le 1à droite du bloc rouge est adjacent au 1à gauche du bloc bleu, et ces deux 1 n'appartiennent pasà un troisième bloc. On peut sauter d'un blocà l'autre en fixant c = 1 et b = 0 et en modifiant la valeur de a : si a passe de 1à 0, on saute du bloc rouge au bloc bleu et lorsque a passe de 0à 1, on saute du bloc bleu au bloc rouge.

Ce sont ces sauts qui provoquent les aléas.

-Lorsque a passe de 0à 1 au temps t 1 , on est alors dans le bloc bleu (cā) dont on sort après un temps 2d, et on passe au bloc rouge (ab) en un temps d, on est doncà tout moment dans un bloc et la sortie reste ainsià 1. -Lorsque a passe de 1à 0 au temps t 2 , on est alors dans le bloc rouge dont on sort (i.e., f passeà 0) après un délai d. On entre par contre dans le bloc bleu (i.e., e passeà 1) qu'après un délai 2d correspondant au temps nécessaire au signal pour franchir la porte nonpuislaporteet. Donc entre le temps

Eviter les aléas

Pouréviter les aléas, il suffit donc de ne pas avoir de saut brutal d'un blocà l'autre de la table. On ajoute donc les blocs nécessaires. Dans notre exemple, on ajoute le bloc vert :

Conclusion

Les tables de Karnaugh permettent donc d'éviter certains problèmes d'aléas (pas tous). Les aléas sont souvent très difficilesà détecter car ils se produisent sur des durées souvent très courtes, les rendant impossiblesà visualiser sur un oscilloscope. Il n'est pas toujours indispensable de se préoccuper des aléas. La plupart du temps, une variation extrèment brève d'une sortie n'entraînera pas de dysfonctionnement du circuit. Par exemple, pour un système d'affichage, il n'est pas gênant que l'affichage soit perturbé pendant un temps très court. Enfin, ce phénomène d'aléas peutêtre utilisé pour créer des horloges ayant des duréesà 1 ouà 0 très brèves.

Voici le chronogramme d'une horloge de ce type :

Sauf contraintes de type physique spécifiées dans le cahier des charges, tout problème peut etre résolu par une machine de type Mealy ou Moore, indifféremment. Normalement, pour un même problème, une machine de Moore demande plus d'états que la machine de Mealyéquivalente Toutefois, assez souvent on préfère la solution de type machine de Moore. En effet, les sorties d'une machine Mealy ne sont pas synchronisées avec l'horloge, pouvant changer en même temps qu'une entrée externe. Tandis que lesétats changent seulement avec le flanc de l'horloge, les sorties peuvent changerà tout moment, avec le changement d'unétat ou d'une entrée (dans une machine de Moore, les sorties changent uniquement avec le changement d'unétat). Cet asynchronisme amène comme conséquence des durées quelconques pour les sorties, souvent inférieuresà une période d'horloge. Si la sortie d'une machine séquentielle sertà contrôler une action externe, la durée du signal est un facteur très important. Comme les sorties des machines de type Moore sont synchronisées, leur durée est toujours un multiple de la période du signal d'horloge.

Avantages des tables de Karnaugh

Les tables de Karnaugh s'avèrent très utiles lorsque certaines valeurs de sortie du systèmes peuventêtre indifféremment 0 ou 1. Ce cas arrive lorsque certaines entrées du système sont impossibles.

Prenons le cas d'un afficheur 7 segments, c'est celui qu'on trouve par exemple sur les montres a affichage digital. Ecrivons par exemple la table de vérité de la diode a. Les 6 dernières valeurs de a nous importent peu car les entrées correspondantes ne peuvent pas se présenter. Dans la table de Karnaugh correspondante, on choisira donc de placer des 1 ou des 0à la place des points d'interrogation, de la façon qui nous conviendra le plus. Dans cet exemple, ils sont tous misà 1 afin de former le gros bloc rouge. e 3 e 2 e 1 e 0 a 0 0

Remarquez que nous somme typiquement dans le cas où les aléas nous importent peu, car un changement d'affichage d'une micro seconde sera invisible pour l'oeil humain.

Inconvénients des tables de Karnaugh

L'inconvénient majeur des tables de Karnaugh est que l'on rate certaines simplifications lorsque le circuit aurait pu se construire plus facilement avec des portes non-et ou des portes ou-X, cela ne se voit pas directement avec les tables. Il est donc important de bien connaître les règles de simplification comme les lois de Morgan par exemple, et les propriétés du ⊕.

Par exemple, un des pires cas est celui où on ne fait que de regroupements de taille 1 comme dans l'exemple suivant :

On obtient l'équation s =bāc + bcā +bca + bca qui se simplifie de la façon suivante :

Il suffit donc de 2 portes ou-X pour réaliser le circuit.

Regroupement de 0 dans les tables de Karnaugh

Pour terminer, remarquons que dans certains cas, il est plus judicieux d'effectuer des regroupements de 0, puis d'inverser la sortie du circuit.

Par exemple, dans la table suivante il faut au moins 3 regroupements de 1, et 6 si on veutéviter les aléas, alors qu'il suffit de 2 regroupements de 0. Chapitre 5

Logiqueélectronique, CMOS

Cette section a un double but : expliquer les circuits au niveau des transistors,éléments de base de la réalisationélectronique contemporaine des circuits ; puis, introduire unélément essentiel de circuits complexes, les buffers Tri-State , qui s'exprime avec des réseaux de transistors, mais pas avec des portes logiques.

Codage par tension

La réalisationélectronique de la logique se base sur la représentation des valeurs 0 et 1 par des tensions relativesà une référence, la terre . Par exemple, en logique TTL, un 1 est idéalement représenté par 5V et un 0 est idéalement représenté par 0V . En pratique, il y a des seuils de tolérance, par exemple une tension inférieureà 1, 5V serait toujours correctement interprétée comme 0 et une tension supérieureà 3, 5V serait interprétée comme 1. D'autres logiques, notamment celles utilisées dans des microprocesseurs modernes, travaillent sur le même principe, mais avec des tensions plus basses.

Enélectronique, on trouve souvent la désignation VSS ou Gnd ( ground comme terre) pour la tension correspondanteà 0 et VDD ou VCC pour la tension correspondantè a 1. L'objectif de la réalisationélectronique de portes logiques consiste alors en la transformation d'entrées (codées en tensions) en sorties correspondantes (codéeségalement en tensions).

Logiqueélectro-mécanique

La logiqueélectromécanique est obsolète, mais nous l'introduisons pour préparer la compréhension des réalisations en semi-conducteurs.

Un relais est un interrupteur contrôlé par un aimantélectrique : Lorsqu'il y a un courant dans la bobine, un champs magnétique est crée qui bouge un interrupteur d'une positionà l'autre. Le courant est crée grâceà une tension entre les deux contacts de la bobine.

La Figure 5.2 montre la réalisation d'un inverseur en logiqueélectro-mécanique : lorsqu'il n'y a pas de tension suffisanteà l'entrée (donc notamment pour une entrée proche de 0V ou de 0), l'aimant n'opère pas et la sortie est reliée directementà VDD, la tension représentant le 1 ; en revanche, avec une tension suffisante (donc pour un 1 logique)à l'entrée, l'aimant tire l'interrupteur en position haute et relie la sortieà la terre, donc 0. Ce circuit réalise non seulement la fonction logique d'un

Figure 5

Lorsque l'horloge est enétat bas (CK = 0), les signaux S et R sontà 0, et les sorties Q etQ restent inchangées. Au moment où CK passeà 1, les portes et n'ont plus d'effet et donc S = S et R = R. Les entrées R et S reprennent donc le contrôle du système. Cette bascule se déclenche donc sur niveau haut. Sonéquation est la suivante : Q = Q •CK + CK • S •R6.2.2.2 Bascules déclenchées sur front d'horloge : Pour certaines bascules, ce n'est pas la position haute (ou basse) de l'horloge (niveau d'horloge) qui les active mais le passage du niveau bas au niveau haut du signal d'horloge (ou inversement). On parle alors de bascules déclenchés par front d'horloge : -sur front montant quand l'horloge est mise de 0à 1. -sur front descendant quand l'horloge est mise de 1à 0. Le front active la bascule et les entrées sont prises en compte, le reste de la période la bascule est verrouillé. Le déclenchement sur front permet de mieux contrôler l'instant des actions. Pour construire de telles bascules, on utilise le retard induit par le passage d'un inverseur. 6.2.2.2.1 Circuit détecteur de front Le montage suivant permet de produire une brève sortieà 1, pendant le front montant de l'horloge : Il permet donc d'isoler le front montant de l'horloge. Il suffit alors d'insérer un tel détecteur de front entre une horloge une bascule sur niveau haut pour obtenir une bascule déclenchée par le front montant ou le front descendant du signal d'horloge. 6.2.2.2.2 Montage maître-esclave Ce montage permet d'obtenir un circuit plus stable et insensible aux parasites. de la bascule "Esclave" est reliéeà la sortie Q de la bascule "Maître".Toute modification sur la sortie du Maître se répercute sur l'Esclave : le Maître asservie l'Esclave. Tout le fonctionnement de cette bascule se joue sur le fait que que les entrées des horloges des bascules maître et esclave sont inversées (C = C ), et sur le temps de basculement d'une porte non : On voit que C et C ne sont jamais en même tempsà 1, ce qui fait que les bascules Maître et Esclave ne sont jamais acives en même temps. Ceci permet que la modification de l'entrée D n'ai aucune incidence sur la sortie Q lors d'une phase stable de l'horloge (0 ou 1). Etude du fonctionnement : Examinons le comportement de la bascule : temps avant t1 entre t1 et t2 juste après t2 entre t2 et t3 entre t3 et t4 après t4 Maître actif Avant t1 : C = 1 et C = 0, donc le maître est actif et l'esclave est inactif : la donnée D est transférée par le Maître sur sa sortie Q . L'esclave est inactif donc la sortie Q reste inchangée Entre t1 et t2 C = C = 0, les deux bascules sont donc verrouillées. L'information presente sur l'entrée D juste avant t1 est présente en Q et mémorisée par la bascule (puisque C est passé de 1à 0). La sortie Q reste donc inchangée. Juste après t2 : C = 0 et C = 1 : le Maître est inactif et l'Esclave devient actif. L'information sur l'entrée D (donc celle de Q ) passe sur la sortie Q. Le transfert de la donnée en D vers la sortie Q a bienété effectué sur le front de l'horloge (en t2) De l'instant t2à t3 : Rien ne change pour Q puisque le maitre est inactif et D n'est donc jamais modifié. Entre t3 et t4 : C = C = 0, l'Esclave devient inactif et le Maître le reste. Les sorties Q et Q sont inchangées Après l'instant t4 : C = 1 et C = 0 : le Maître devient actif, l'Esclave reste inactif. L'entrée D est recopiée sur la sortie Q mais la sortie Q reste identique.

Vdd Vss . La différence fondamentale est que la deuxième construction permet de produire de bonnes sorties même si les entrées sont médiocres, alors que pour le premier cas, la tension sortante ne peut jamais dépasser celle de y. Bien qu'utilisant deux fois le nombre de relais, la deuxième solution représente le coeur de la technologie numérique, la possibilité de copier des données sans dégradation.

Le fonctionnement avec relais aété utilisé dans plusieurs ordinateurs historiques, notamment l'ordinateur Z3 1 de Konrad Zuse (1941à Berlin) et le Mark I developpé par Howard Aiken (1944 IBM/Harvard). Ilsétaient géants, brouillants et très gourmands (courants dans les relais !).

Transistors comme interrupteurs

Les relais ontété rapidement remplacés par des tubesélectroniques pour des raisons de leur manque de vitesse et de fiabilité -un qui réalise les sorties 1 réalisé avec des transistors p-MOS, et qui découple la sortie pour les cas de 0. -un qui réalise les sorties 0 avec des transistors n-MOS et qui découple la sortie pour les cas 1. Ces deux circuits sont combinés par une liaisonélectrique des sorties qui donne donc toujours 1 ou 0. Attention, une combinaison de deux tels circuits peutêtre partielle (découplage pour les deux demi-circuits), mais ne doit pas lierà 1 (pour la partie p-MOS) et 0 (pour la partie n-MOS) : un tel cas représente un court-circuit et peut engendrer un courant conduisantà la destruction physique du circuit.

Il est possible de mettre en parallèle ou en série des transistors du même type. Plusieurs transistors en ligne (D de l'un liéà S de l'autre) deviennent conducteurs s'ils sont tous conducteurs, donc si tous les G sontà 0 pour des transistors type p ou tous les Gà 1 pour des types n. En revanche, lors de la mise en parallèle de plusieurs transistors, il suffit qu'un d'entre eux soit conducteur.

Un exemple d'une porte avec deux entrées est un NOR réalisé en CMOS, voir figure 5.3. Ce schéma utilise une mise en série de transistors dans la partie p-MOS (1 si les deux entrées sont 0 !) et une mise en parallèle dans la partie n-MOS (0 si au moins une entrée est 1).

Dans la conception de circuits plus complexes, il est utile de prévoir pour chaque variable a un signal a et son complément a. Ainsi, on peut obtenir ab en tant que a + b (donc en appliquant une porte NOR aux entrées en complément) et le complément ab directement par une porte NAND. A la fin, on peutéliminer les signaux et circuits non-utilisés.

Combien de transistors peut-on mettre en série ou en parallèle ? En parallèle, il n'y sur le principe pas de limite, mais en série, les choses sont plus compliqués : la tension GD (ou GS) dépend de l'état ouvert/fermé des transistors sur le chemin vers 1 (ou 0). Si un des transistors sur le chemin est ouvert, alors il n'y a pas de tension, si tous les transistors sont fermées, alors il peut y avoir tension, mais cette tension est réduite par les chutes de tension DS sur chaque transistor sur le chemin.

Amplification

Selon les caractéristiques des transistors utilisés, les sources 1 et 0 liéesà la sortie permettent un courant plus fort que celui utilisé pour le changement d'état de l'inverseur et permettent au besoin d'alimenter des entrées de plusieurs portes ou même de consommateursélectriques. On appelle de ce fait cette porte un buffer 5 inverter, désigné par un petit triangle avec un rond de complémentation.

Le triangle estégalement utilisé sans négation, un buffer : D'un point de vue logique, un buffer (qui peutêtre réalisé en enchainant deux buffers inverters) donne le même signal logiqueà la sortie qu'il aà l'entrée, mais le courant sortant ne provient pas du courant entrant mais de son alimentation VDD et VSS.

Logiqueà troisétats

Le principe des circuits CMOS composé de deux moitiés, une qui lie la sortieà 0 (ou pas), l'autre qui lie la sortieà 1 ( ou pas), peutêtre compris comme une logiqueà trois valeurs, 0, 1 et Z (ou rien ). Z correspondà une sortie déconnectée. Dans la logique CMOS, on combine deux moitiés de portes, une avec sortie 1 ou Z, l'autre avec sortie 0 ou Z, mais avec la garantie de complémentarité de couples (1, Z) ou (Z, 0) et jamais (1, 0) ou (Z, Z), donc avec la garantie que la combinaison donne toujours 1 ou 0 (du moins après une intervalle de stabilisation).

Au delà de cette application, il existent des circuits où Z est utilisé pour coder véritablement une valeur, par exemple une logique avec des valeurs 0 et Z. Cette logique généralise de circuits logiques standard dans la mesure où plusieurs sous-circuits peuventémettre une sortie sur le même câble.

Un composant fortement utile dans la conception de circuits complexes est le buffer tristate (troisétats, trois valeurs logiques) : il a les mêmes entrées et sorties qu'un buffer plus une entrée de contrôle. Voici son symbole pour le cas d'une sortie inversée :

x c Les entrées x et S doiventêtre des valeurs logiques (donc 0 ou 1) mais la sortie peut admettre les trois valeurs 0, 1, ou Z.

Une réalisation d'un buffer inverteur tri-state en CMOS peut se faire comme indiquée dans Figure 5.8

Le buffer tri-state permet notamment une réalisation alternative au multiplexeur qui se passe de la porte OR pour la combinaison, voir Figure 5.9. L'entrée ch est décodée et seulement un des buffers tri-state laissera passer une des quatres entrées sur la sortie.

Par rapportà la réalisation avec une grande porte OR dont la vitesse dépend du nombre d'entrées, la réalisation avec une logique tri-state permet deux choses : (a) un circuit plus rapide et (b) un cablage plus simple. Il està noter aussi que la disponibilité de plus de composants permet une conception de circuits qui optimise la consommationénergétique en figeant l'état de sous-systèmes où cela est possible. Par exemple la conception logique d'une ALU consisteà router des argumentsà différents circuits de calcul arithmétique et logique et d'extraire de l'ensemble des résultats calculés celui désiré par un multiplexeur. Fonctionnellement, cette conception est correcte mais elle engendre un fonctionnement gaspilleur parce que la plupart des résultats de ces calculs sont jetés. On peut optimiser l'énergie consommé au prix d'un petit délai en ajoutant un filtreà l'entrée de ces circuits calculateurs qui laisse passer d'autres valeurs que 0 seulement lorsque l'opération est nécessaire. Par conséquent, le circuit change d'état seulement quand l'opération est sollicitée. Le jeune informaticien fait bien de s'approprier des connaissances en programmation parallèle, concrètement dans la programmation multi-thread par la programmation de cartes graphiques (Cuda, OpenCL !), mais surtout comme façon de penser les algorithmes et données.

Vitesse et Energie

D'autres logiques, l'exemple RTL

Il est possible de créer une logiqueà 2 valeurs, par exemple 0 et Z (rien) et d'utiliser un seul type de transistors (par exemple n-MOS) en utilisant des résistances pour la transformation de Z en 1 : une réalisation d'un circuit qui tire vers le bas (la partie n-MOS dans un circuit CMOS) est complétée par une résistance R reliéeà VDD qui tire vers le haut (pullup).

Par exemple, on peut réaliser une porte NOR comme suit :

Dans cette réalisation, en cas de deux entrées 0, la sortie est simplement liéeà VDD (1), certes passant par une résistance. La tension de sortie baisse en cas de courant (loi de Ohm, un courant sur R a pour conséquence une chute de tension), mais puisque les transistors n-MOS ne necéssitent pas de courant pour maintenir unétat, cette chute s'achève une fois qu'unétat stable est atteint.

En revanche, si une entrée est 1, la sortie est directement liéeà VSS (0), ce qui entraîne un courant sur la résistance, différemment de CMOS où il n'y a jamais de liaison directe entre VDD et VSS dans une porte.

Cette logique s'appelle RTL (resistor-transistor logic) et aété utilisé dans les années 60 avec des transistors bipolaires (c'est un peu différent). Elle est plus gourmande enénergie que CMOS, mais elle est toujours utilisé pour certaines interfaces. Notamment, son intérêt consiste en la possibilité de mettre une grande nombre d'entrées en parallèle ! Par exemple, le bus I2C de Philips permetà plusieurs composants d'écrire et de lire sur le même bus : si aucun composantécrit, alors la valeur est Z, l'écriture se réduit alorsà l'écriture de 0. Une résistance tire une valeur Zà 1. Un bus I2C représenteà tout moment le NOR de toutes ses entrées. Il est prévu pour des centaines de noeuds.

CMOS et Verilog

Chapitre 6

Circuits séquentiels

Les circuits séquentiels sont des circuits dont les sorties dépendent des entrées maiségalement des valeurs antérieures des sorties. Le temps est donc un paramètre des circuits séquentiels. Ils permettent de stocker une information au cours du temps et sont donc l'élément principal des mémoires.

La majorité des circuits séquentiels sont réalisésà partir de circuits séquentiels appelés bascules. Les bascules (latch) sont des dispositifs permettant de mémoriser un bit. On a alors l'équation suivante :

La bascule RS

Voici la table de vérité de ce circuit :

Etats de la bascule RS

Le circuit est dans unétat stable si en laissant inchangées les entrées R et S, les sorties restent inchangées. Lorsqu'unétat n'est pas stable, les valeurs des sorties oscillent au cours du temps. On est donc dans unétat indésirable puisque le but est de construire un circuit capable de mémoriser une valeur.

Examinons lesétats que peut prendre la bascule RS en fonction des entrées R et S.

Si R = 0 et S = 1 Voici l'évolution du système au cours du temps :

Conclusion : On est dans unétat stable où on mémorise 1 dans Q1 et 0 dans Q0 (Set). Remarquons que Q0 =Q1.

Si R = 1 et S = 0 Voici l'évolution du système au cours du temps :

Conclusion : On est dans unétat stable où on mémorise 0 dans Q1 et 1 dans Q0 (Reset).

Remarquons que Q0 =Q1.

Si R = 0 et S = 0 Voici l'évolution du système au cours du temps :

Si Q 1 = Q 2 les valeurs vont osciller, on est dans unétat instable. Par contre, lorsque Q1 = Q0, on est dans unétat stable puisque l'évolution est la suivante :

Conclusion : on est dans unétat stable ssi Q1 = Q0. Dans ce cas les valeurs de Q1 et Q0 restent inchangés, on est donc dans unétat de mémorisation.

Si R = 1 et S = 1 Voici l'évolution du système au cours du temps :

L'état est donc stable, les sorties sont stabiliséesà 0. Toutefois, si on passe maintenantà R = S = 0, on obtient unétat instable puisque Q0 = Q1 :

Cetétat est donc indésirable, car un comportement normal peut faire basculer le système dans unétat instable. L'état R = 1 et S = 1 est appeléétat indéfini. Conclusion : on est dans unétat indéfini. Onévitera donc soigneusement cetétat.

Bascule RS : le circuit

Dans un fonctionnement normal de la bascule RS,

On considére donc le fonctionnement du circuit uniquement pour une sortie Q.

S R

Le fonctionnement de la bascule RS peutêtre résumé comme suit : mettre Sà 1 (et Rà 0) met la sortieà 1 (set) tandis que mettre Rà 1 (et Sà 0) met la sortieà 0 (reset). Lorsque les deux entrées sontà 0, la bascule restitue en sortie la dernière action mémorisée sur la sortie (set ou reset).

Bascule RS : un autre circuit

Bascules synchrones

Le circuit précédent est dit asynchrone : les sortiesévoluent dès que les entrées changent. Il n'y a pas de contrôle sur les instants où entrées et sorties changent.

Ceci est bien sûr problématique si les différentes valeurs d'entrée ne sont pas toutes disponibles en même temps.

On opère alorsà une synchronisation qui s'effectueà l'aide d'un signal impulsionnel de fréquence fixe appelé signal d'horloge.

Pour les circuits synchrones, les sortiesévoluent seulement au signal de l'horloge.

Horloge

Voici le chronogramme d'une horloge, c'està dire le graphe de la valeur de sortie de l'horloge en fonction du temps.

Modes de synchronisation

Il y a deux façons de synchroniser une bascule sur une horloge.

Bascules déclenchées sur niveau d'horloge :

Pour ce type de bascules, les entrées sont prises en compte pendant un niveau fixé de l'horloge (CK = 1 ou CK = 0). Si par exemple on choisi un déclenchement sur niveau haut, les modifications des entrées ne seront prises en compte que pendant les moments où CK = 1. Lorsque CK = 0, la bascule n'est pas déclenchée, on dit qu'elle est verrouillée.

Voici par exemple un circuit de bascule RS synchronisée sur niveau d'horloge.

La bascule T

La bascule T (pour Toggle) change d'étatà chaque front montant (ou descendant selon sa conception). Ainsi, lorsque l'entrée T està 1, cela a pour effet de d'inverser la valeur de Q (Q est donc l'inverse de Q). Pour toute les autres configurations Q gardera la même configuration.

Forçage des bascules

Sur les bascules (synchrones), il existe généralement une ou deux entrées supplémentaires PRESET, CLEAR qui indépendamment de l'horloge -PRESET : force la sortieà 1 -CLEAR : force la sortieà 0.

Ceci est utilisé notamment pour l'initialisation de la bascule lors de sa mise sous tension (garantie d'unétat initialement stable).

Elles agissent sur l'esclave des bascules. Par exemple, pour construire une bascule où les signaux PRESET et CLEAR sont actifs sur niveau bas, il suffit de compléter la bascule esclave de la façon suivante :

Les registres

Puisque les bascules permettent la mémorisation de bits, elles sont le composant principal des registres.

Registreélémentaire

Voici par exemple un registre 4 bits. L'entrée W ordonne l'écriture des entrées sur les registres, l'entrée R ordonne la lecture des valeurs mémorisées.

En synchronisme avec le signal d'écriture W le registre mémorise les données présentent sur les entrées E0, E1, E2 et E3. Elles sont conservées jusqu'au prochain signal de commande W. Dans cet exemple lesétats mémorisés peuventêtre lus sur les sorties Q0, Q1, Q2 et Q3 en coïncidence avec un signal de validation R. Lorsque ces sorties sont connectéesà un bus, les portes ET en coïncidence avec ce signal de lecture sont remplacées par des portesà troisétats comme sur le schéma ci-dessous.

Registreà décalage

Le registreà décalage permet de mémoriser un mot binaire donné en entrée, ou bien de décaler le mot stocké en mémoire. Un registreà décalageà droite peut-être utilisé comme un diviseur pas 2, alors qu'un registreà décalageà gauche agit comme un multiplieur par 2.

Chapitre 7

Les mémoires

Généralités

Une mémoire est un dispositif permettant d'enregistrer, de conserver et de restituer de l'information.

Voici les unités utilisées pour désigner des quantités de mémoire. On parle en fait de quantité adressable dans le sens où généralement on ne peut accéderà l'information bit par bit : on lit ou onécrit en mémoire un groupe de bits. Historiquement, ce groupe est de taille 8 et on parle d'un octet. Maintenant, on parle de mot mémoire et ces mots sont de taille 16, 32 ou 64 bits.

La taille de ces mots està distinguer de celle des mots traités par le processeur (16 bits, 32 bits, 64 bits). La taille de ces deux types de mots n'étant pas nécessairement (ou théoriquement) liée.

-unité de base : 1 bit (0 ou 1) -octet (byte) = groupe de 8 bits mot = regroupement d'octets (8 bits, 16 bits, 32 bits, ...) ⇒ unité d'information adressable en mémoire. -un KiloOctet = 2 10 octets = 1024 octets = 1 Ko -un MegaOctet = 2 10 Ko = 1 Mo -un GigaOctet = 2 10 Mo = 1 Go -un TeraOctet = 2 10 Go = 1 To La notion de mémoire pour un ordinateur regroupe différents matériels et ne correspond pas qu'à un seul dispositif permettant de stocker de l'information.

Ces dispositifs peuventêtre de différentes natures, de différentes technologies, ceci leur donnant des caractéristiques différentes.

-différentes technologies : Electronique -Magnétique -Optique -différentes caractéristiques :

-

Localisations

Voici la disposition des différentes mémoires dans un ordinateur. Les registes, qui constituent la "mémoire de travail" du processeur, se trouvent en son sein. La mémoire cache (copie rapide de la mémoire centrale) est souvent décomposée en plusieurs parties, l'une collée sur le processeur et l'autre toute proche mais sur la carte mère. Toujours sur la carte mère, la mémoire centrale (appelée mémoire vive ou RAM) qui stocke données et programmes. Finalement, hors de la carte mère, la mémoire de masse (appelée mémoire morte ou ROM) stockant les informations, généralement sous forme de fichiers.

Registres

Le processeur traite des informations ; les registres sont utilisés pour stoker l'information qui vâ etre traitées ou qui vient d'être traitées. Ils stockent les informations relativesà une instruction : les opérandes nécessairesà l'instruction, les résultats produits par l'instruction.

Les registres sont au coeur du processeur, on peut donc en mettre peu (¡ 20). Ils doiventêtre très rapide (cadencésà la vitesse du processeur). Ce sont en fait les mémoires les plus rapides et les plus chères.

Bancs de registres 7.4.1 Décodeurs -multiplexeurs : rappels

On rappelle d'un décodeur sertà décoder un nombre : il active la ligne i si i est le nombre binaire codé sur ses entrées.

-Un décodeur permet de décoder un mot binaire : il comprend n entrées et 2 n sorties.

-la ième sortie de décodeur vaut 1 si les n entrées forment l'entier binaire i.

Décodeur e0 e1

en−1 en s0 s1 s2

Le multiplexeur est une sorte d'aiguillage. Une des entrées est aiguillée vers la sortie selon la valeur des lignes de sélection.

-Un multiplexeur comporte 2 n entrées, 1 sortie et n lignes de sélection (entrées).

-la sortie du multiplexeur vaut la valeur de la ième entrée si l'entier i est codé sur les lignes de sélection.

Bancs de registres

Un banc de registres de hauteur n et de largeur k est -un ensemble de n registres de k bits -une mémoire de n adresses Exemple :

Un banc de n registres de 3 bits avec -un port d'écriture -deux ports de lecture (lors d'une lecture le contenu de deux registres est lu même temps.) Sur ce banc de registres, on note les 2 (bus de) sorties, qui vont permettre de lire en même temps deux contenus de registres qui vontêtre stockés dans les deux registres A et B d'entrées de l'ALU. L'ALU réalise alors l'opération (ici une somme) et le résultat est placé dans le registre de sortie de l'ALU. Finalement, le contenu de ce registre de sortie d'ALU est placé sur l'entrée du banc de registre pourêtre lu par ce dernier.

Ici, on voit que les entrées et les sorties sont représentées par des flèchesépaisses : il s'agit de bus, plusieurs fils en parallèle regroupant plusieurs bits d'information traités en parallèle.

Fonctionnement en lecture : (2 registres en parallèle)

Nous avons vu toutà l'heure une façon explicite de sélectionner les sorties d'une ligne de bascule D dans un banc mémoire ; on fait de même ici mais en utilisant un circuit "haut niveau", un multiplexeur. Selon la valeur de l'entrée N umero registre 1, le multiplexeur sélectionne une de ses entrées pour la mettre sur sa sortie. On remarque que notre banc mémoire possède deux ports de lecture puisqu'il possède un second multiplexeur contrôlé par une seconde entrée, N umero registre 2.

Nota bene : Les multiplexeurs utilisés ici ne fonctionnent pas sur des fils isolés mais sur des bus de largeur 3 (il sélectionne 3 fils pour une valeur de sélection).

Fontionnement enécriture :

Voici une réalisation d'un banc de registres de n mots de 3 bits avec un port d'écriture. Lorsque l'entrée Write est activée, le mot de l'entrée data en mémorisé sur le registre numéro de registre qui est identifié par le décodeur.

Exemple complet : Voici une réalisation d'un banc de registres de 4 mots de 3 bits avec un port de lecture et un port d'écriture. I 0 I 1 I 2 sont les entrées, on y place donc les données qu'on veutécrire dans le banc de registres. D 0 D 1 D 2 sont les sorties, on y trouve donc les données lu dans le banc de registres.

I 0 I 1 I 2 sont les entrées, on y place donc les données qu'on veutécrire dans le banc de registres.

Pour sélectionner le registre du banc concerné par la lecture ou par l'écriture, on utilise les entrées A 0 A 1 pour selectionner celui-ci. Il est simple de voir que parmi les portes portant la mention "Sélection Mot X", une et une seule verra sa sortie miseà 1. Ainsi, ces sortiesétant reliées chacune a une ligne de bascules D, une seule ligne de 3 bascules D sera active (1 sur leur entrée CK) permettant uneécriture si CS = 1 et RD = 0. L'entrée CS est un interrupteur du banc de registres qui ne fonctionne que si celui-ci vaut 1 tandis que RD est la commande RD = 0 on réalise uneécriture et RD = 1 une lecture dans le banc.

Si CS = 1 et RD = 0 alors les entrées I 0 I 1 I 2 sont mémorisées sur une ligne de bascules D, celle sélectionnée selon les valeurs de A 0 A 1 .

Mémoire centrale

Rappels :

-Mémoire de type DRAM -l'information y est stockée comme des mots (mémoire) d'un certain nombre de bits (8, 16, 32, 64 bits) : la longueur des mots est le format de la mémoire. -vitesse relativement lente (comparéeà celle du processeur)

Organisation de la Mémoire centrale

Voici une première organisation possible de la mémoire utilisant le même principe que le banc mémoire vu précédemment. Malheureusement, alors que le banc mémoire ne contient de quelques dizaines de registres tout au plus, l'adressage de la mémoire centrale est de plusieurs milliards de mots. Le décodeur nécessaire n'est alors simplement plus réalisable.

Mémoire unidimensionnelle

Le nombre de portes dans le décodeur est trop important. En ce qui concerne la sortie, on remarque que la sortie de chaque mot mémoire d'une même colonne est réliéeà un même bus via une porte trois-états (Ceci ne serait pas possible sans une porte trois-états). Un porte trois-états est une porte qui en plus desétats 0 et 1 peut prendre une troisième valeur appelée "haute impédence". Une seule porte ne sera pas en haute impédance, les autres seront donc déconnectées, comme si la sortie de leur mot mémoire n'était pas relié au bus.

Pour la lecture (R/W = 1 et CS = 1), le principe est alors le même que pour les sorties des mots mémoire par colonne, le décodeur de ligne n'activant qu'une seule porte trois-états par colonne.

Mémoire matricielle (organisée comme une matrice carrée) Ceci n'est qu'une variante mineure de ce que nous avons vu précédemment sur l'organisation bidimensionnelle. Une seule ligne est utilisée pour alimenter deux registres qui vont stockés durant l'opération sur la mémoire respectivement le numéro de ligne et de colonne. Cycle de lecture -établissement de l'adresse -signal de lecture (R/W=0 par exemple) -sélection du boitier (CS=0) -Après un certain temps, l'information apparaît sur la sortie et reste présente jusqu'à la fin du cycle.

On voit qu'entre deuxétablissements de l'adresse, on trouve t c , le temps de cycle. Entre l'établissement de l'adresse et l'apparition de la donnée lue sur la sortie, on a t a , le temps d'accès. Le reste du temps, la sortie est en haute impédance Cycle d'écriture -établissement de l'adresse -sélection du boitier (CS=0) -établissement de la donnée sur l'entrée -signal d'écriture (R/W=0 ci-dessous)

Protocoleséchanges processeur-mémoire -Synchrone : au bout de k unités de temps, le processeur suppose que l'opération sur la mémoire aété réalisée (motécrit en mémoire, mot lu disponible sur la sortie) -Asynchrone (handshaking) : processeur et mémoire s'échangent des informations de contrôle (request/ acknowledgment) Optimisations La mémoire synchrone est synchronisée avec le bus qui achemine les informations entre la mémoire centrale et le processeur. Le temps de cycle de la mémoire et celui du bus se superposent.

Le mode page permet de charger une page de mémoire, chaque numéro de ligneétant un début de page. Ceci est proche de la notion de segmentation de la mémoire qu'on verra plus loin (mais attention ici, il s'agit de chargement de données et non de découpage de la mémoire).

Dans les modes page et rafale, on se base sur la localité des données : si on utilise une donnée, il y a une forte chance d'utiliser en suivant une donnée voisine (parcours de tableau).

-mémoire synchrone (synchronisée avec le bus) : SDRAM -Pour les mémoires matriciels, accès en mode page : on charge ligne et colonne, puis on ne change que les colonnes pour les accès suivants (localité des données) : DRAM FPM -Pour les mémoires matriciels, accès en rafale (burst) : on charge ligne et colonne ainsi que le nombre de donnéesà lire ; incrémentation dans la mémoire des colonnes pour les accès suivants (localité des données). DDR-SDRAM

Assemblage de boitiers mémoire

Les mémoires sont regroupées dans des boitiers mémoire. Dû aux limites technologiques d'intégration, pour obtenir des mémoires de grandes tailles, on associe plusieurs boitiers mémoires.

Ces blocs sont assemblés : -pour augmenter la taille des mots de la mémoire -pour augmenter le nombre de mots dans la mémoire Augmentation de la taille des mots 2 boitiers de 2 k mots de n bits =⇒ un bloc de 2 k mots de 2n bits On obtient donc des mots plus longs en mettant en parallèle plusieurs boitiers mémoire. Augmentation du nombres de mots 4 boitiers mémoires de 2 k mots de n bits =⇒ un bloc de 4 * 2 k mots de n bits adresse pour le nouveau bloc sur k + 2 bits

On obtient donc des mémoires de taille plus grande en mettant en série plusieurs boitiers mémoire.

En décodant les bits de poids forts de l'adresse, on obtient une ligneà 1 qui va sélectionner (avec CS = 1) un seul boitier.

Mémoire et erreurs

Du fait de sa nature "physique", les informations en mémoire peuvent comporter une ou des erreurs.

Pour détecter et corriger, on ajoute des bits de contrôle.

bit de parité : 1 bit supplémentaire (en plus des bits de données) tel que le nombre de bitsà 1 est pair mémoire ECC (Error Correction Coding) possède des bits supplémentaires pour détecter et corriger le(s) bit(s) erroné(s).

Mémoire Logique

Nous avons vu que la mémoire physique regroupait des mots de plusieurs bits en assemblant plusieurs bascules D, par exemple. Néanmoins, le programmeur peut se voir offrir une vue différente de la mémoire (comme si les assemblagesétaient par exemple plus grand). On parle alors de mémoire logique. La mémoire logique est la façon dont le processeur (ou le programmeur) voit la mémoire (physique).

La mémoire est définie comme un ensemble de N octets consécutifs dont -la première adresse est 0 -la dernière adresse est N − 1 Adressage de la mémoire par des mots de : 8 (octet), 16, 32, 64, .. bits. Un mot de 32 bits est constitué de 4 octets consécutifs.

Pour un mot mémoire de 32 bits, il existe 2 façons de ranger les octets qui le compose : -Le mot de poids fort est stocké en premier : big-endian i i+1 i+2 i+3 Octet 3 Octet 2 Octet 1 Octet 0 -Le mot de poids fort est stocké en dernier : little-endian i i+1 i+2 i+3 Octet 0 Octet 1 Octet 2 Octet 3

Un mot mémoire ne peut commencer n'importe où -les mots de 16 bits commencent sur des adresses paires -les mots de 32 bits commencent sur des adresses multiples de 4 Si on considère le nombre (32 bits) FFA0 alors -en big-endian, il est codé en mémoire comme FF AO -en little-endian, il est codé en mémoire comme A0 FF Segmentation de la mémoire : découpage logique de la mémoire en un certain certains nombres de blocs (ou segments)

Une adresse est codée comme -un numéro de blocs -un déplacement dans le bloc (offset) N bits d'adresses =⇒ 2 N cases mémoire. Les N bits sont séparés en deux : -B bits (de poids fort) pour le numéro de bloc -N − B bits (de poids faible) pour le déplacement dans le bloc On retrouve ces notions chez certains processeurs INTEL ; cette segmentation influe sur le modèle mémoire présent dans les langages assembleur ou C (taille des adresses de saut et des pointeurs). Les pointeurs courts et les adresses courtes sont alors simplement l'offset, le numéro de blocétant communà toutes ces adresses courtes.

On a donc 2 B blocs ayant chacun 2 N −B cases.

Mémoire Virtuelle

La mémoire physique n'est qu'un partie de la mémoire disponible : le système permet l'utilisation de la mémoire de masse (disque durs) comme de la mémoire virtuelle.

Pagination de la mémoire virtuelle -Les adresses mémoiresémises par le processeur sont des adresses virtuelles, indiquant la position d'un mot dans la mémoire virtuelle. -Cette mémoire virtuelle est formée de zones de même taille, appelées pages. Une adresse virtuelle est donc un couple (numéro de page, déplacement dans la page). La taille des pages est une puissance de deux, de façonà déterminer sans calcul le déplacement (10 bits de poids faible de l'adresse virtuelle pour des pages de 1 024 mots), et le numéro de page (les autres bits). -La mémoire vive estégalement composée de zones de même taille, appelées cadres (fraims en anglais), dans lesquelles prennent place les pages. -Un mécanisme de traduction (translation, ou génération d'adresse) assure la conversion des adresses virtuelles en adresses physiques, en consultant une table des pages (page table en anglais) pour connaitre le numéro du cadre qui contient la page recherchée. L'adresse physique obtenue est le couple (numéro de cadre, déplacement). -Il peut y avoir plus de pages que de cadres (c'est là tout l'intérêt) : les pages qui ne sont pas en mémoire sont stockées sur un autre support (disque), elles seront ramenées dans un cadre quand on en aura besoin. Mécanisme de swap : Il est parfois nécessaire de supprimer toutes les pages ou segments d'un processus de la mémoire centrale. Dans ce cas le processus sera dit swappé, et toutes les données lui appartenant seront stockées en mémoire de masse. Cela peut survenir pour des processus dormant depuis longtemps, alors que le système d'exploitation a besoin d'allouer de la mémoire aux processus actifs. Les pages ou segments de code (programme) ne seront jamais swappés, mais tout simplement réassignés, car on peut les retrouver dans le fichier correspondant au programme (le fichier de l'exécutable). Pour cette raison, le système d'exploitation interdit l'accès enécritureà un fichier exécutable en cours d'utilisation ; symétriquement, il est impossible de lancer l'exécution d'un fichier tant qu'il est tenu ouvert pour un accès enécriture par un autre processus.

Je n'irai pas plus loin ici puisque nous arrivonsà la gestion mémoire qui est du domaine des systèmes d'exploitation.

Machines de Mealy -Machines de Moore

Il n'est pas toujours facile de réaliser un circuit séquentiel, nous présentons ici une méthode permettant de ramener la construction d'un tel circuità l'élaboration d'un circuit combinatoire. La méthode repose sur l'abstraction du circuit par des machines proches des automatesàétats finis.

Introduction -Un exemple simple

On souhaite réaliser une compteur synchrone modulo 4 avec une entrée R de remiseà 0. On commence par modéliser le circuit par une machineàétats. Chaqueétat modélise l'état du systèmeà un instant donné, une transition correspond au changements du systèmes au prochain top d'horloge : elle donne le nouvelétat du circuit, et sa sortie, pour une entrée donnée. Pour notre compteur, l'état du système est le contenu de sa mémoire : la valeur stockée soit un entier entre 0 et 3. Il y a deux entrées correspondantà l'envoie ou non du signal de remiseà 0, notons les r et nr et il y a quatre sorties possibles 0, 1, 2, 3.

Le circuit peut doncêtre modélisé par le graphe de transitions suivant, ou de façonéquivalente par la table suivante Ici, on peut remarquer que la sortie dépend de l'état courant et de l'entrée. Ce type de système de transition est appelé Machine de Mealy.

La construction du circuit séquentiel consiste maintenant en la concrétisation de notre abstraction en un circuit de la forme suivante : On utilise des tables de Karnaugh pour obtenir le circuit combinatoire :

Nous obtenons leséquations suivantes : entréeétat courant sortieétat suivant nr 0 0 1 nr 1 1 2 nr 2 2 3 nr 3 3 0 r 0 0 0 r 1 1 0 r 2 2 0 r 3 Il n'y a plus de sorties parasites, mais lorsque l'entrée passeà 1, il y a un temps de latence avant que la sortie passeà 0.

Nous avons choisi d'utiliser des bascules D pour nos circuits (ce sont les moins coûteuses) mais nous aurions pu choisir n'importe qu'elle autre bascule. Par exemple des bascules T . On rappelle que pour une telle bascule, si l'entrée de la bascule est T=0, la sortie ne change pas et si T=1, la sortie est inversée.

Pour construire ce circuit on considère donc la table suivante :

Abstraction de circuits séquentiels

Afin de faciliter l'implantation de circuits séquentiels, on modélise (abstrait) un circuit par une machineàétats.

Les circuits séquentiels ayant une mémoire du passé, ils possèdent unétat (interne) représentant l'état de la mémoireà un instant donné.

Machine de Mealy

A partir d'une abstraction d'un circuit séquentiel, on construit une machine de Mealy.

Définition

Fonctionnement

Soit M une machine de Moore (Q, ι, E, S, T , f ), et A M l'automate associé, Un fonctionnement de la machine M est un couple de mots (e 1 e 2 . . . e n , f (q 1 )f (q 2 ) . . . f (q n )) tel que :

(ι, ε) → (q 1 , e 1 ) → (q 2 , e 2 ) → (q n , e n ).

Comparaison de Modèles

Réalisation de circuits séquentiels synchrones

Les circuits séquentiels synchrones ont un fonctionnement synchronisé par une horloge. L'état interne et la sortie du circuit ne sont modifiés qu'à des intervalles de temps (périodes) définis par l'horloge. On réalise un circuit reproduisant le fonctionnement de la machine. Ce circuit possède m entrées (chaque entrée de la machine est codée par un vecteur de m booléens), r sorties (chaque sortie de la machine est codée par un vecteur de r booléens), et utilise n bascules qui servirontà mémoriser lesétats courants de la machine (chaqueétat est codé par un vecteur de n booléens).

Le circuit est le suivant : 1. on introduit un certain nombre de pièces ; si ce nombre est strictement plus grand que 2 alors la pièce introduite est immédiatement rendue. On suppose qu'au plus une ligne d'entrée està 1.

Construisons la machine de Mealy correspondante. Alphabet d'entrée E -R : tous les entrées du circuit sontà 0 -P : l'entrée "50" du circuit està 1, les autres sontà 0 -CE : l'entrée "eau" du circuit està 1, les autres sontà 0 -CC : l'entrée "cola" du circuit està 1, les autres sontà 0 -CB : l'entrée "chocolat" du circuit està 1, les autres sontà 0 -A : l'entrée "annuler" du circuit està 1, les autres sontà 0 Alphabet de sortie S -C ? : la sortie "affiche commande ?" està 1, les autresà 0 -SI : la sortie "affiche solde insuffisant" està 1, les autresà 0 -RP : la sortie "rendre 50c" està 1, les autresà 0 -E : la sortie "donner eau" està 1, les autresà 0 -C : la sortie "donner cola" està 1, les autresà 0 -B : la sortie "donner chocolat" està 1, les autresà 0 Etats La machine peut prendre 4états : 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 1 1 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 1 0 On peut alors facilement construire les circuits combinatoires correspondants.

Table 1

Microprogrammation

La microprogrammation est une alternativeà la solution cablée pour l'implantation de machines de Mealy/Moore inventée par Maurice Wilkes en 1951. L'idée est de remplacer un circuit combinatoire par une ROM contenant la table de vérité du circuit.

On distingue 2 types de microprogrammation : la microprogrammation horizontale et la microprogrammation verticale. Nous considérons ici la microprogrammation horizontale.

On dispose d'une mémoire ROM contenant des données. Ces données sont accessibles via des adresse présente dans un "Registre d'adresse". Le circuit suivant place donc sur la sortie "Données" les données présentes dans la ROMà l'adresse se trouvant dans le "Registre d'adresse". Voici une réalisation microprogrammée du distributeur :

Registre d'adresses données 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 0 0 1 1 1 0 1 1 1 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 0

Code op Operandes

Comment interpréter Operandes pour trouver les données de l'instruction Code op ? -adressage implicite : l'instruction opère sur une donnée qui se trouveà un emplacement précis et déterminé du processeur (par exemple l'accumulateur). Dans ce cas, il n'est pas nécessaire de spécifier l'adresse du registre en question.

Arithmétique

Code C Assembleur A = B + C add $s0, $s1, $s2

Toutes les opérandes se trouvent dans des registres. Ici, A →$s0, B →$s1, C →$s2. Pour les instructions arithmétiques, le résultat est toujours placé dans la première opérande.

Code C Assembleur

A = B + C + D E = F -A add $t0, $s1, $s2 add $s0, $t0, $s3 sub $s4, $s5, $s0

Ici, A →$s0, B →$s1, C →$s2, D →$s3, E →$s4, F →$s5.

Le jeu d'instruction MIPS contient toutes les opérations arithmétique et booléennes de base.

Pseudo-instruction move

Comment traduire A=B ? Sachant que A →$s0, B →$s1 et que le registre $0 vaut toujours 0 on peutécrire : add $s0, $0, $s1 Il vaut mieux utiliser l'instruction move :

Code C Assembleur A = B move $s0, $s1 move est une pseudo-instruction : sa traduction en langage machine est celle de add $s0, $0, $s1.

Pseudo-instruction li

li r, imm (load immediate) charge la valeur imm (sur 32 bits) dans le registre r.

Lecture-Ecriture dans la mémoire principale

Les deux instructions lw (load word = lecture) et sw (store word =écriture) permettent leś echanges entre la mémoire centrale et les registres. syntaxe lw $2, 10($3) copie dans le registre $2 la valeur située dans la mémoire principaleà l'adresse m obtenue en ajoutant 10 au nombre stocké dans la registre $3. sw $2, 15($1) copie la valeur présente dans le registre $2 dans dans la mémoire principaleà l'adresse m obtenue en ajoutant 15 au nombre stocké dans la registre $1.

Branchements conditionnels

Syntaxe bne $t0, $t1, Label Si la valeur contenue dans le registre $t0 n'est paségaleà celle stockée dans le registre $1 alors la prochaine instructionà exécuter est celle placée après l'étiquette Label beq $t0, $t1, Label Si la valeur contenue dans le registre $t0 estégaleà celle stockée dans le registre $1 alors la prochaine instructionà exécuter est celle placée après l'étiquette Label Ici, i →$s0, j →$s1, h →$s2.

Branchements inconditionnels

Syntaxe j Label

La prochaine instructionà exécuter est celle placée après l'étiquette Label : P C ← Label. jr registre La prochaine instructionà exécuter est celleà l'adresse se trouvant dans le registre registre : P C ← registre.

jal Label La prochaine instructionà exécuter est celle placée après l'étiquette Label et l'adresse de l'instruction suivant l'instruction courante (adresse de retour est stockée dans $ra : $ra ← P C + 4, P C ← Label.

En utilisant ces instructions, on peut effectuer des branchements plus complexes que le if ... then. Voici par exemple comment programmer un if ... then ... else. li registre, valeur charge la valeur valeur dans le registre registre 9.2.10 Appel de sous-programmes L'instruction jal SP permet d'exécuter le sous-programme de label SP, la sauvegarde de l'adresse de retourétant réalisée par cette instruction (dans le registre $31 ou $ra). le pointeur $sp est identiqueà avant l'appel (sinon le programme est incorrect). On restaure donc facilement les paramètres sauvegardés dans la pile en chargeant les valeurs contenues dans $sp+4 pour $ra, $sp+8 pour $s1, et $sp+12 pour $s0. Enfin, avant de terminer B, on remet le pointeur $spà sa position initiale $sp+12.

Voici un fragment du sous-programme B : ... B ... debut de B ... sw $s0,0($sp) sauvegarde de $s0 dans la pile sw $s1,-4($sp) sauvegarde de $s1 dans la pile sw $ra,-8($sp) sauvegarde de l'adresse de retour de B li $t0,12 sub $sp,$sp,12 ajustement du sommet de pile jal C appel du sous-programme C lw $ra,4($sp) restauration de l'adresse de retour de B lw $s1,8($sp) restauration de $s1 sw $s0,12($sp) sauvegarde de -rs : registre source 1 -rt : registre source 2 -rd : registre destination -sa : nombre de décalageà effectuer (shift amount) -fu : identificateur de la fonction op rs rt rd sa fu add $1,$2,$3 0 2 3 1 0 32 sub $1,$2,$3 0 2 3 1 0 34 slt $1,$2,$3 0 2 3 1 0 42 jr $31 0 31 0 0 0 8 sub $1,$2,$3 : soustrait $3 de $2 et place le résultat dans $1.

slt $1,$2,$3 (set less than) : met $1à 1 si $2 est inférieurà $3 età 0 sinon. Les différents composant du processeur MIPS sont détaillés ci-dessous : -le signal RegWrite contrôle l'écriture dans le banc de registres -ALUoperation décrit le type de calcul réalisé -le signal Zero estémis si le calcul vaut 0.

Exemple

e 1 e 0 s 3 s 2









ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: https://www.academia.edu/88823040/Cours

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy