version en ligne - [PDF Document] (2024)

version en ligne - [PDF Document] (1)

ArchitecturesLogiciellesetMaterielles

P. Amblard, J.-C. Fernandez,

F. Lagnier, F. Maraninchi,

P. Sicard, Ph. Waille

version en ligne - [PDF Document] (2)

2

version en ligne - [PDF Document] (3)

IV

version en ligne - [PDF Document] (4)

IV

version en ligne - [PDF Document] (5)

Table des matieres

Introduction 1

1 Qu’est-ce qu’un ordinateur ? 51. Notion d’information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52. L’ordinateur : une machine qui execute . . . . . . . . . . . . . . . . . . . . . . 93. Ou sont le materiel et le logiciel ? . . . . . . . . . . . . . . . . . . . . . . . . . 144. Fonctionnalites des ordinateurs . . . . . . . . . . . . . . . . . . . . . . . . . . 175. Plan du livre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

I Outils de base de l’algorithmique logicielleet materielle 23

2 Algebre de Boole et fonctions booleennes 251. Algebre de Boole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262. Fonctions booleennes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283. Representation des fonctions booleennes . . . . . . . . . . . . . . . . . . . . . 314. Manipulation de representations de fonctions booleennes . . . . . . . . . . . . 385. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

3 Representation des grandeurs 491. Notion de codage d’informations . . . . . . . . . . . . . . . . . . . . . . . . . 492. Les naturels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513. Les relatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584. Lien entre l’arithmetique et les booleens . . . . . . . . . . . . . . . . . . . . . 645. Les caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656. Les nombres reels, la virgule flottante . . . . . . . . . . . . . . . . . . . . . . 667. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

4 Representation des traitements et des donnees : langage d’actions 751. Un langage d’actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762. Representation des donnees en memoire . . . . . . . . . . . . . . . . . . . . . 823. Traduction des affectations generales en acces au tableau MEM . . . . . . . . 904. Utilisation des pointeurs et gestion dynamique de la memoire . . . . . . . . . 915. Piles, files et traitements associes . . . . . . . . . . . . . . . . . . . . . . . . . 956. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

5 Representation des traitements et des donnees :machines sequentielles 1011. Machines sequentielles simples . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012. Machines sequentielles avec actions . . . . . . . . . . . . . . . . . . . . . . . . 109

version en ligne - [PDF Document] (6)

VI Table des matieres

6 Temps, donnees temporelles et synchronisation 1211. Interface entre un dispositif informatique et un environnement physique . . . 1222. Signaux logiques et representation par des chronogrammes . . . . . . . . . . . 1263. Problemes de synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274. Un exemple : la machine a cafe . . . . . . . . . . . . . . . . . . . . . . . . . . 133

II Techniques de l’algorithmique materielle 135

7 De l’electron aux dispositifs logiques 1371. Phenomenes a l’echelle atomique . . . . . . . . . . . . . . . . . . . . . . . . . 1372. Phenomenes a l’echelle electrique . . . . . . . . . . . . . . . . . . . . . . . . . 1403. Phenomenes a l’echelle logique . . . . . . . . . . . . . . . . . . . . . . . . . . 1434. Circuits logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485. Fabrication des dispositifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

8 Circuits combinatoires 1651. Notion de circuit combinatoire . . . . . . . . . . . . . . . . . . . . . . . . . . 1662. Assemblage de blocs de base... . . . . . . . . . . . . . . . . . . . . . . . . . . 1733. Algorithmique cablee : conception logique . . . . . . . . . . . . . . . . . . . . 1784. Etude de cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1865. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

9 Elements de memorisation 1911. Points de memorisation de bits : bascules et registres . . . . . . . . . . . . . . 1922. La memoire : organisation matricielle des points de memorisation . . . . . . . 2033. Realisation des memoires statiques . . . . . . . . . . . . . . . . . . . . . . . . 2074. Optimisations et techniques particulieres . . . . . . . . . . . . . . . . . . . . . 210

10 Circuits sequentiels 2151. Notion de circuit sequentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2162. Synthese des automates decrits par leur graphe . . . . . . . . . . . . . . . . . 2223. Synthese des circuits sequentiels par flots de donnees . . . . . . . . . . . . . 2334. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

11 Conception de circuits sequentiels par separation ducontrole et des operations 2431. Principe general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2442. Notion de partie operative type . . . . . . . . . . . . . . . . . . . . . . . . . . 2453. Partie controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2494. Etudes de cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2535. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

III Techniques de l’algorithmique logicielle 267

12 Le langage machine et le langage d’assemblage 2691. Le langage machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2702. Le langage d’assemblage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963. Traduction du langage d’assemblage en langage machine . . . . . . . . . . . . 3024. Un exemple de programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3025. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

version en ligne - [PDF Document] (7)

Table des matieres VII

13 Traduction des langages a structure de blocs en langage d’assemblage 3131. Cas des programmes a un seul bloc . . . . . . . . . . . . . . . . . . . . . . . . 3142. Cas des programmes a plusieurs blocs . . . . . . . . . . . . . . . . . . . . . . 3193. Traduction en langage d’assemblage : solutions globales . . . . . . . . . . . . 3344. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

IV A la charniere du logiciel et du materiel... 349

14 Le processeur : l’interprete cable du langage machine 3511. Les principes de realisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522. Exemple : une machine a 5 instructions . . . . . . . . . . . . . . . . . . . . . 3553. Une realisation du processeur . . . . . . . . . . . . . . . . . . . . . . . . . . . 3564. Critique et amelioration de la solution . . . . . . . . . . . . . . . . . . . . . . 3605. Extensions du processeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3646. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

V Architecture d’un systeme materielet logiciel simple 375

Un systeme materiel et logiciel simple 377

15 Relations entre un processeur et de la memoire 3811. Le bus memoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3812. Utilisation de plusieurs circuits de memoire . . . . . . . . . . . . . . . . . . . 3853. Acces a des donnees de tailles differentes . . . . . . . . . . . . . . . . . . . . . 3894. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

16 Circuits d’entrees/sorties 3971. Notion d’entrees/sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3972. Synchronisation entre le processeur et un peripherique . . . . . . . . . . . . . 3993. Connexion d’organes peripheriques . . . . . . . . . . . . . . . . . . . . . . . . 4004. Programmation d’une sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4025. Programmation d’une entree . . . . . . . . . . . . . . . . . . . . . . . . . . . 4086. Optimisation des entrees/sorties groupees . . . . . . . . . . . . . . . . . . . . 4097. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

17 Pilotes de peripheriques 4171. Structure d’un pilote de peripherique . . . . . . . . . . . . . . . . . . . . . . . 4182. Pilote pour un clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4193. Pilote pour un disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4234. Pour aller plus loin... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

18 Vie des programmes 4351. Interpretation et compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . 4362. Compilation separee et code translatable . . . . . . . . . . . . . . . . . . . . . 4423. Format des fichiers objets translatables et edition de liens . . . . . . . . . . . 454

19 Systeme de gestion de fichiers 4631. Situation du systeme de gestion de fichiers . . . . . . . . . . . . . . . . . . . . 4652. Structure des donnees et influence sur l’implantation . . . . . . . . . . . . . . 4663. Implantation dispersee sur un disque . . . . . . . . . . . . . . . . . . . . . . . 4704. Noms externes et autres informations attachees aux fichiers . . . . . . . . . . 476

version en ligne - [PDF Document] (8)

VIII Table des matieres

5. Etude de quelques fonctions du systeme de gestion de fichiers . . . . . . . . . 477

20 Demarrage du systeme, langage de commandes et interprete 4831. Demarrage du systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4842. Mecanisme de base : le chargeur/lanceur . . . . . . . . . . . . . . . . . . . . . 4853. Programmation de l’interprete de commandes . . . . . . . . . . . . . . . . . . 4954. Fonctions evoluees des interpretes de commandes . . . . . . . . . . . . . . . . 501

VI Architecture des systemes materielset logiciels complexes 503

21 Motivations pour une plus grande complexite 5051. Qu’appelle-t-on systeme complexe ? . . . . . . . . . . . . . . . . . . . . . . . . 5052. Scrutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5073. Mecanisme d’interruption : definition et types d’utilisations . . . . . . . . . . 5084. Plan de la suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510

22 Le mecanisme d’interruption 5111. Architecture d’un processeur pour la multiprogrammation . . . . . . . . . . . 5112. Introduction d’un mecanisme de scrutation elementaire . . . . . . . . . . . . . 5153. Un exemple detaille d’utilisation : mise a jour de la pendule . . . . . . . . . . 5214. Notion de concurrence et d’atomicite des operations . . . . . . . . . . . . . . 5285. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530

23 Partage de temps et processus 5311. Principe et definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5312. Structures de donnees associees aux processus . . . . . . . . . . . . . . . . . . 5363. Organisation du traitant de commutation . . . . . . . . . . . . . . . . . . . . 5394. Creation et destruction de processus . . . . . . . . . . . . . . . . . . . . . . . 5465. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550

24 Generalisation du mecanisme d’interruption et applications 5511. Classification des differentes sources d’interruption . . . . . . . . . . . . . . . 5522. Protection entre processus, notion de superviseur . . . . . . . . . . . . . . . . 5593. Entrees/sorties gerees par interruption . . . . . . . . . . . . . . . . . . . . . . 5654. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570

Index 571

Bibliographie 577

version en ligne - [PDF Document] (9)

Introduction

Ce qu’on trouvera dans ce livre

Ce livre suit d’assez pres l’enseignement dispense en Licence d’informatiquea l’Universite Joseph Fourier de Grenoble. L’enseignement a le meme titre :Architectures Logicielles et Materielles. Il est dispense en environ 150 heuresde cours, Travaux Diriges et Travaux Pratiques.

L’objectif est d’expliquer a de futurs specialistes d’informatique le fonction-nement de l’ordinateur. Pour cela nous faisons un certain nombre de choix, nousprenons parti.

Pour comprendre le fonctionnement, il faut se placer du point de vue duconcepteur d’ordinateur. Le lecteur trouvera donc dans ce livre une demarchede conception de machines. Il ne s’agit pourtant pas de lui faire croire aurealisme de cette conception.

En effet la veritable conception d’une machine, c’est-a-dire de sonmateriel — du microprocesseur a la memoire, en passant par la carte gra-phique — et de son logiciel — du systeme d’exploitation aux compilateurs —represente des centaines de milliers d’heures de travail de specialistes. Nous nedecrivons qu’une partie du travail, en choisissant les points qui nous semblentles plus significatifs dans cette conception. D’autre part nous insistons sur lesliaisons entre differents aspects de la conception. En particulier, l’une des ideesfortes de ce livre est l’etroite complementarite des aspects logiciels et materielsdes ordinateurs. L’idee centrale, et le chapitre central de ce livre, montrentdonc comment du materiel execute du logiciel.

Le contenu de ce livre ne devrait pas se perimer, sauf si des principesvraiment nouveaux apparaissent en informatique et se generalisent.

Ce qu’on ne trouvera pas dans ce livre

En revanche ce livre ne decrit pas les aspects les plus avances utilises dansles machines actuelles. Ces aspects font l’objet d’enseignements specifiques desystemes d’exploitation, de compilation ou d’architectures des machines, danslesquels, en general, on ne se preoccupe que d’un aspect. Ce livre constitueun prerequis pour de tels enseignements car il montre les relations entre les 3domaines.

version en ligne - [PDF Document] (10)

2 Introduction

Parmi les themes tres interessants que nous avons deliberement ecartes (etreserves pour le tome 2 !) figurent :

– L’etude fine des fonctionnalites d’un systeme d’exploitation particulier.Beaucoup de nos references sont inspirees d’unix1.

– L’etude de la hierarchie memoire (cache et memoire virtuelle), que nouspassons totalement sous silence.

– L’etude detaillee d’un langage d’assemblage d’un processeur donne. Beau-coup de nos references sont inspirees du sparc2 ou du Motorola 680003.

– L’etude des techniques de conception de circuits micro-electroniques. Parexemple nous ne parlons ni de consommation, ni de circuits asynchrones.

– L’etude des techniques d’optimisation des performances des proces-seurs. Nous ne developpons pas les techniques de pipeline, ni celles dereordonnancement dynamique du flot d’execution des instructions.

– Les entrees/sorties tres particulieres que constituent les acces d’un ordina-teur a un reseau, ce qui demanderait un developpement specifique.

Comment lire ce livre ?

Methode de travail

On peut lire ce livre comme un roman, de la premiere a la derniere page.On peut egalement le lire avec une salle de Travaux Pratiques a portee de

la main, pour essayer toutes les techniques evoquees, les comparer, les analyseren detail, etc.

On peut essayer de resoudre tous les exercices et envoyer les solutions auxauteurs, qui se feront un plaisir de les corriger :

[emailprotected] [emailprotected]

[emailprotected] [emailprotected]

[emailprotected] [emailprotected]

On peut enfin essayer de trouver des erreurs, de fond et de forme, et on yparviendra certainement.

Themes

On peut privilegier une approche centree sur les langages de programma-tion, leur traduction et la facon dont ils sont executes. Sur la figure 0.1 celacorrespond aux fleches en traits gras.

1marque deposee, et dans la suite de l’ouvrage nous ne preciserons plus que les noms desystemes et de machines sont, evidemment, deposes.

2marque deposee3marque deposee

version en ligne - [PDF Document] (11)

Introduction 3

20 : Interpretede commandes

18 : Vie desprogrammes

donnees

4 5 : Representationdes traitements et

15 : Liaisons memoireprocesseur

7 : Electronique

8 : Circuitscombinatoires

9 : Elements dememorisation

2 : Algebre de Boole

6 : Aspects temporels

14 : LE PROCESSEUR

1 : L’ORDINATEUR

10 11 : Circuitssequentiels

des grandeurs3 : Representation

19 : Gestion de fichiers

16 17 : Materiel etlogiciel d’entrees / sorties

21 a 24 :Systeme complexeProcessusInterruptions

machine etd’assemblage

12 13 : Langages

Fig. 0.1 – Relations de dependance des principales idees utilisees dans les 24 chapitres.La zone grisee correspond plutot au monde du logiciel, la zone blanche aumateriel.

version en ligne - [PDF Document] (12)

4 Introduction

On peut privilegier une approche de conception des circuits digitaux etd’architecture de machine. Sur la figure 0.1 cela correspond aux fleches entraits larges et hachures.

On peut privilegier une approche centree sur l’architecture de haut niveauet les systemes d’exploitation. Sur la figure 0.1 cela correspond aux fleches entraits pointilles.

Il n’en reste pas moins que les auteurs ont cherche a mettre l’accent sur laglobalite et la complementarite des 3 approches.

Index

Les mots en italique apparaissent souvent en index. Dans l’index, lesnumeros de page en gras indiquent les occurrences de definition des mots.Les autres numeros indiquent des occurrences d’utilisation des mots, parfoisanterieures a leur definition, parfois posterieures.

Remerciements

Les idees, principes, techniques, outils, methodes, presentes dans ce livrene sont pas les resultat de nos decouvertes. Nous avons recu des enseigne-ments, puis nous avons lu, essaye, enseigne. Sans ceux qui nous ont precedesce livre n’existerait pas. Sans celles et ceux qui ont enseigne avec nous le mo-dule Architectures Logicielles et Materielles au fil des annees il serait sansdoute plus pauvre. En particulier Catherine, Danielle, Joelle, Jean-Louis etJean-Paul reconnaıtront certaines de leurs bonnes influences. Les mauvaisesviennent d’ailleurs !

version en ligne - [PDF Document] (13)

Chapitre 1

Qu’est-ce qu’un ordinateur ?

Un ordinateur est une machine, presque toujours electronique, quiexecute des programmes. Ces programmes traitent des donnees. Une machineelectronique est un objet. Par opposition, les programmes et les donnees sontdes informations. Cette opposition est celle qui existe entre materiel et logi-ciel. L’ensemble du livre est consacre a montrer de facon detaillee comment cesdeux univers se rencontrent pour former l’architecture de l’ordinateur. Dans cepremier chapitre, nous faisons un tres rapide survol permettant de situer lesnotions avant de les decrire de facon detaillee.

Le paragraphe 1. decrit ce qu’est une information et sa representation.Cela nous permet de parler de programmes. Puis nous decrivons unemachine a executer les programmes et nous insistons sur la notiond’execution dans le paragraphe 2. Cela nous permet au paragraphe 3. demontrer les differents materiels et logiciels presents dans l’ordinateur.Nous evoquons enfin les usages de l’ordinateur au paragraphe 4.

1. Notion d’information

Une information est une entite abstraite, liee a la notion de connaissance.Nous nous interessons naturellement aux informations d’un point de vue tech-nique en informatique, non d’un point de vue journalistique. Nous donnonsdifferentes facettes de l’information et separons l’etude des informations decelle des objets.

1.1 Quelques aspects d’une information

Nous avons besoin pour cerner la notion d’information de donner l’originepossible d’une information et de montrer la necessite de ses representationspour pouvoir envisager les manipulations d’informations dans les ordinateurs.

version en ligne - [PDF Document] (14)

6 Qu’est-ce qu’un ordinateur ?

1.1.1 Origine d’une information

Une information peut etre en relation avec une grandeur physique, l’ori-gine etant par exemple mecanique (forme, dimensions, emplacements d’objets,intensite d’une force), electromagnetique (amplitude, frequence ou phase d’unsignal electrique, d’une onde electromagnetique), electrochimique (PH d’unliquide, potentiel electrochimique d’une cellule nerveuse).

1.1.2 Nom, valeur et combinaison d’informations

Une information a un nom : “la temperature mesuree au sommet de la TourEiffel”, “le caractere tape au clavier”, “le montant de mon compte en banque”.

Une information a une valeur a un certain moment : 37 degres, ’A’, 5 000 F.La plus petite information possible est une reponse par oui ou par non (on

parle de reponse booleenne) : le nombre est pair ou impair, le caractere est unelettre ou pas une lettre, le point de l’ecran est allume ou eteint, la lettre estune majuscule ou non, la touche de la souris est enfoncee ou non. Une tellepetite information constitue un bit.

L’ensemble des valeurs possibles peut etre fini (comme pour les caracteres),ou potentiellement infini (comme pour mon compte en banque !). Un en-semble infini de valeurs peut presenter des variations continues, c’est-a-direqu’entre deux valeurs possibles il y a une valeur possible. C’est le cas pour latemperature. Les variations sont discretes dans le cas contraire. Le solde demon compte en banque peut etre de 123,45 F ou de 123,46 F, mais pas d’unevaleur entre les deux, car la banque arrondit les sommes au centime le plusproche.

Differentes informations peuvent se combiner soit dans l’espace (les mon-tants des comptes en banque de differents clients) soit dans le temps (l’histo-rique des variations de mon compte).

Les combinaisons dans l’espace contiennent un nombre fini d’elements. Enrevanche un systeme informatique traite des informations qui peuvent varierun nombre non borne de fois au fil du temps. Il suffit de maintenir le systemeen etat de marche.

1.1.3 Representation et codage

Une information a une representation sous forme de grandeur(s) phy-sique(s) associee a une convention, ou code, d’interpretation. Si une informationest representee dans un code inconnu, elle n’est pas comprehensible.

La grandeur physique peut etre la position d’une aiguille sur un appareilde mesure. On passe parfois par une representation intermediaire sous formede suite de lettres et de chiffres, representes a leur tour par une grandeurphysique (traces sur un papier par exemple). Pour l’aiguille sur un cadran onparle de representation analogique ; si l’intermediaire des chiffres est mis en jeuon parle de representation numerique ou digitale. Cette difference se retrouve

version en ligne - [PDF Document] (15)

1. Notion d’information 7

entre les disques anciens et les disques compacts. Il est parfois necessaire derealiser par un dispositif electronique une conversion entre ces deux types derepresentation.

Un chiffre binaire, 0 ou 1, suffit a representer un bit. Un vecteur de bitsconstitue un mot. Les mots de 8 bits sont des octets.

Une meme information peut etre representee dans l’ordinateur de faconsdiverses : le caractere frappe au clavier est d’abord connu comme un couplede coordonnees d’une touche au clavier (la touche en deuxieme colonne de latroisieme ligne), puis par une sequence de variations de potentiel sur une ligneelectrique liant le clavier et l’ordinateur (combinaison temporelle), puis par unvecteur de chiffres binaires dont les composantes sont les unes a cote des autresen memoire (combinaison spatiale), puis par une representation sous forme dematrice de points allumes/eteints sur l’ecran.

Pour les informations structurees complexes (en raison des combinaisons)le codage constitue un langage. Les programmes sont ecrits dans des langagesde programmation, les figures sont decrites dans des langages de descriptionde figures, etc.

Dans le langage courant on assimile souvent l’information, sa valeur, sarepresentation.

1.2 Utilisation des informations dans l’ordinateur

Dans les ordinateurs les informations sont memorisees, transmises ettraitees. Nous retrouvons cette triple fonction dans le paragraphe 3.1.3 Eninformatique l’association du nom d’une information et de la representationde la valeur constitue une variable.

1.2.1 Stockage (ou memorisation) des informations

On peut copier, c’est-a-dire creer un nouvel exemplaire de l’informationen lui associant un nouveau representant physique. Mais c’est toujours lameme information : elle est simplement materialisee plusieurs fois. On peutaussi detruire un exemplaire de l’information : elle disparaıtra avec son dernierrepresentant. Une information est stockee dans une memoire si on ne veut pasqu’elle disparaisse.

1.2.2 Transmission des informations

Les informations traitees dans l’ordinateur peuvent provenir de disposi-tifs materiels (capteur de temperature par exemple). Elles peuvent provenird’un utilisateur via un clavier, une souris, . . .Une information sortante, sousla forme d’une tension sur un fil electrique, peut influencer un materiel parl’intermediaire d’un actionneur, comme un declencheur d’alarme. Differentssystemes d’interface permettent a l’ordinateur de communiquer avec le mondeexterieur.

version en ligne - [PDF Document] (16)

8 Qu’est-ce qu’un ordinateur ?

Les informations peuvent etre transmises d’un point a un autre. Des liai-sons par fils electriques ou par ondes electro-magnetiques (radio, infra-rouge,visible, . . .) nous sont familieres. A l’interieur d’un ordinateur la distance estparfois de moins d’un micron (10−6 m). Quand une fusee transmet vers la Terredes images de l’espace, la distance est de plusieurs millions de kilometres. Lesreseaux permettent les transmissions entre ordinateurs.

Il arrive que le codage de l’information comporte une certaine redondance.Cela peut permettre, si l’on garde l’information en exces, de detecter des er-reurs de transmission, ou, si le debit d’information est une priorite, de com-presser la representation avant de la transmettre.

1.2.3 Traitement des informations : donnees, programmes

On peut realiser des operations de combinaison d’informations pour genererde nouvelles informations. Dans le cas des ordinateurs, il s’agit tres souventd’operations arithmetiques de calcul et de comparaison. Etymologiquementl’ordinateur met de l’ordre.

Il existe des informations qui decrivent ces traitements appliques a d’autresinformations : “Diviser la distance parcourue par le temps de trajet. Le resultatest la vitesse” ; “Comparer deux caracteres et determiner le premier dansl’ordre alphabetique” ; “Convertir une information representee selon le code1 pour la representer selon le code 2”. Des enchaınements de tels ordres consti-tuent des programmes. Les autres informations sont nommees donnees. Lesordres elementaires sont des instructions. Une instruction indique un chan-gement d’etat dans l’ordinateur. L’etat de la machine avant l’instruction estdifferent de son etat apres.

Attention, les instructions peuvent etre considerees comme des donnees a uncertain moment. Par exemple quand le programmeur imprime son programme,les instructions du programme d’impression traitent le programme comme untexte ordinaire ; de meme le compilateur traite le programme a compiler commeune donnee.

On dit parfois que l’informatique concerne le traitement de l’information,mais il serait plus exact de parler du traitement d’une representation de l’in-formation. Cette representation peut etre finie (dans l’espace) ou infinie (dansle temps).

1.3 Information par rapport a objet,logiciel par rapport a materiel

Enfoncons quelques portes ouvertes pour distinguer la notion d’informationde celle d’objet. La distinction est de meme nature que celle qui distingue lelogiciel du materiel.

Un objet peut etre duplique. Cela donne deux objets. Si la representationd’une information est dupliquee il n’y a toujours qu’une information. Mais

version en ligne - [PDF Document] (17)

2. L’ordinateur : une machine qui execute 9

il y a probablement deux supports physiques. Les informations peuvent etrememorisees, evidemment pas les objets.

Une information peut voyager par telephone ou par courrier electronique.Un objet ne le peut pas.

Produire un objet suppose de la matiere premiere. La production d’objetest une activite economique du secteur secondaire. Produire une informationdemande de la matiere grise. La production d’information est une activite dusecteur tertiaire.

Lors de la realisation d’un objet, des defauts de fabrication peuvent ap-paraıtre. Une information peut etre consideree comme vraie ou fausse, maiselle n’a pas de defaut de fabrication.

Un objet peut tomber en panne, se degrader au fil du temps. Une infor-mation peut etre accessible ou non, dans un code comprehensible ou non. Lesupport de la representation d’une information peut s’abımer, la representationpeut disparaıtre.

1.4 Objet et description d’objet

Attention a ne pas confondre l’objet materiel et sa description ; la descrip-tion de l’objet est une information. Ainsi la description d’un ordinateur n’a pasde defauts de fabrication, ne peut tomber en panne, est reproductible, voyagesur un fil.

Par contre l’ordinateur lui-meme est un objet compose de fils, de silicium,de tolerie, de ventilateurs. Sa description est une information codee graphi-quement dans un schema ou textuellement par un ensemble d’equations ou deformules. Il existe des langages de description de materiel informatique.

Pour obtenir l’objet il faut savoir realiser la description. Le resultat de lafabrication de l’objet ordinateur doit etre teste. On doit verifier que l’objet estconforme a sa description du point de vue du fonctionnement. Ce test vise ladecouverte de defauts de fabrication. Apres un temps de bon fonctionnement,on peut refaire un test pour decouvrir ou localiser des pannes. Les defauts deconception sont d’une autre nature : ils concernent une difference entre la des-cription de l’ordinateur et l’intention du concepteur. On peut les assimiler auxbogues des programmes. Les programmes n’ont pas de defauts de fabrication.Ils peuvent comporter des fautes de typographie, de syntaxe ou des erreurs deconception.

2. L’ordinateur : une machine qui execute

L’ordinateur est un objet. Il execute des informations (les programmes)a propos d’autres informations (les donnees). Un ordinateur correspond a uncertain moule, un modele de calcul.

version en ligne - [PDF Document] (18)

10 Qu’est-ce qu’un ordinateur ?

0 0 1 1 ... 1

1 0 1 0 ... 1

de

Unite de calcul

calcul

Registres

Processeur Memoire centrale

m

n

10 1 0 1 0 ... 1

0 1 0 0 1 ... 0

1 1 1 1 0 ... 01 1 1 0 0 ... 1

2

3

2n − 1

CompteurProgramme

RegistreInstruction

0 0 1 0 ... 0

1 1 1 0 ... 0

Horloge InitialisationMot de m bits

Adresses

bus adresses

bus donnees

Lecture/Ecriture

Acces memoire

Pro

gram

me

Don

nee

s

Fig. 1.1 – Architecture simplifiee d’une machine de Von Neumann

2.1 Modele de calcul, machine de Turing

Un modele de calcul comporte un ensemble de transformations applicables aun ensemble de donnees. Il comporte aussi l’ensemble des regles de compositionde ces transformations. Prenons un exemple en geometrie ou calculer signifiedessiner : le calcul par la regle et le T glissant. En geometrie plane, en n’utilisantque la regle et le T glissant, il est possible de calculer la parallele a une droitepassant par un point donne, la perpendiculaire a une droite passant par unpoint, l’orthocentre d’un triangle, etc. L’utilisation de la regle et du T glissantconstitue un modele de calcul.

Si l’on ajoute le compas, on obtient un autre modele de calcul, plus puissant,c’est-a-dire permettant de construire d’autres figures.

En informatique, la machine abstraite de Turing est un modele de cal-cul. Le mathematicien britannique Turing [Gir95, Tur54, Las98] a defini uneclasse de fonctions calculables en composant (eventuellement recursivement)des fonctions elementaires. Il a defini un modele abstrait de machine et montreque cette machine pouvait effectivement calculer la classe de fonctions definie.Ce modele est un maximum, on ne connaıt pas de modele plus puissant. Cettemachine est toutefois tres rudimentaire, sa programmation est donc ardue. Ob-tenir un resultat suppose de nombreuses operations elementaires. La machinede Turing suppose l’existence d’un dispositif de memorisation de dimensioninfinie. Ce n’est donc pas un modele realiste.

version en ligne - [PDF Document] (19)

2. L’ordinateur : une machine qui execute 11

2.2 L’architecture de Von Neumann

Les travaux realises autour du mathematicien hongrois Von Neu-mann [BGN63] constituent le fondement de l’architecture des ordinateurs ac-tuels. Du point de vue theorique, on a pu demontrer que le modele concret deVon Neumann possede les proprietes de la machine abstraite de Turing.

Il y a quelques modeles de calcul en informatique qui ne sont pas de cetype : par exemple le calcul par reseaux de neurones formels.

Pratiquement tous les modeles informatiques de traitement se retrouventdans la categorie generale des automates, ou systemes sequentiels.

Les principes de la machine de Von Neumann, que nous allons decrire, sontencore en oeuvre dans la quasi totalite des ordinateurs contemporains. Il ya eu, naturellement, de nombreuses ameliorations. Une machine de Von Neu-mann (voir Figure 1.1) stocke des representations des informations digitales,en binaire. Elle comporte deux elements : une memoire et une unite centrale.On parle plus facilement aujourd’hui de processeur plutot que d’unite cen-trale. Habituellement les machines paralleles a plusieurs processeurs ne sontpas considerees comme des machines de Von Neumann.

2.2.1 La memoire centrale

Les informations sont codees sous forme numerique. Les instructions, lescaracteres, les couleurs, etc., sont representes par des suites de chiffres bi-naires. Les informations sont stockees dans une memoire dans des emplace-ments numerotes nommes mots. Le numero d’un emplacement est son adresse.Le maintien de la correspondance entre le nom de l’information et l’adresse dumot memoire ou est rangee une de ses representations est une tache difficile etune preoccupation permanente en informatique.

Une ecriture dans la memoire associe une valeur a une adresse (on parleaussi d’affectation). Apres une ecriture, on peut executer une ou plusieurslectures de la meme information. La lecture fournit la valeur associee a cetteadresse.

La memoire est a affectations multiples : on peut ecrire successivementplusieurs valeurs dans un mot. Chaque ecriture associe une nouvelle valeura l’adresse. Elle induit un changement de l’etat de la machine, en detruisantl’association precedente. Elle n’est pas reversible : il n’est pas possible d’annulerla nouvelle association pour acceder a nouveau a l’ancien contenu.

La memoire contient des donnees et des programmes constitues de suited’instructions. Le codage de l’information est tel que rien ne permet de re-connaıtre une representation de donnee et une representation d’instruction.Cette distinction n’aurait pas de sens puisqu’un programme peut meme creerdes donnees qui sont en fait des instructions. Cette possibilite est ce qui donnetoute sa specificite aux ordinateurs. Cela oppose le modele de type Von Neu-mann a celui dit de Harvard ou de Manchester dans lequel il existe deuxmemoires respectivement dediees aux donnees et aux instructions.

version en ligne - [PDF Document] (20)

12 Qu’est-ce qu’un ordinateur ?

2.2.2 Le processeur

Le processeur execute les instructions. Les instructions sont generalementexecutees dans l’ordre ou elles sont ecrites dans la memoire, mais certainesinstructions peuvent introduire des ruptures de cette sequentialite. La reglegenerale est donc la correspondance entre l’ordre de rangement en memoire etl’ordre d’execution.

L’instruction en cours d’execution est reperee par son adresse. Cette adresseest stockee dans une partie du processeur appele pointeur d’instruction, comp-teur ordinal ou compteur programme.

Le processeur est dote au minimum de deux elements de memorisationparticuliers appeles des registres : le compteur ordinal deja cite et le registred’instruction dans lequel le processeur stocke une copie de l’instruction encours d’execution.

Le processeur execute cycliquement la tache suivante dite d’interpretationdes instructions ou d’execution des instructions :

– Lecture de l’instruction a executer : le processeur transmet a la memoirel’adresse de l’instruction a lire, autrement dit le contenu du compteur ordi-nal, et declenche une operation de lecture. Il recoit en retour une copie del’instruction qu’il stocke dans son registre d’instruction.

– Decodage : le processeur examine le contenu du registre d’instruction etdetermine l’operation a effectuer. Si le contenu du registre ne correspondpas a une instruction valide, c’est une erreur. En effet, en fonctionnementnormal, le compteur programme pointe sur un mot memoire contenant uneinstruction. Le decodage est le moyen de verifier qu’une information estbien une instruction.

– Execution : le processeur effectue l’operation decrite par l’instruction. Cetteexecution met souvent en jeu une unite de calcul ou Unite Arithmetique etLogique. Cet operateur effectue des calculs sur les donnees stockees dansdes registres de calcul ou accumulateurs.

– Selection de l’instruction suivante : le processeur calcule l’adresse de l’ins-truction suivante. Cela se fait le plus souvent en ajoutant 1 au compteurordinal.

Une instruction de saut ou branchement force une rupture de l’ordre impli-cite d’execution des instructions defini par leur position dans la memoire.Son execution consiste a stocker dans le registre compteur ordinal une autreadresse que celle obtenue implicitement par incrementation de ce dernier. Enutilisant des branchements, on peut faire en sorte que l’execution globale duprogramme comporte plusieurs executions d’une meme instruction. Le texted’un programme est donc une representation finie d’un comportement qui dureeventuellement indefiniment. C’est l’essence meme de la programmation. Unalgorithme est un texte de taille finie.

version en ligne - [PDF Document] (21)

2. L’ordinateur : une machine qui execute 13

Coupleurde clavier d’ecran

Coupleur Coupleur

de disque

ClavierEcran Disque

Memoire

centrale

Bus donnees

Bus adresses

Processeur

Fils specialises

Fig. 1.2 – Architecture materielle simplifiee d’un ordinateur

2.2.3 Liaisons entre le processeur et la memoire

Le processeur dialogue avec la memoire via trois sortes de fils electriquesgroupes en paquets nommes bus : 1) le bus d’adresse transmet du proces-seur vers la memoire l’information adresse. 2) le bus de donnees transportele contenu de l’emplacement memoire auquel on accede. Le terme de bus devaleur aurait ete plus explicite : le processeur peut interpreter la valeur quitransite sur ce bus comme une donnee ou comme une instruction. 3) des si-gnaux complementaires precisent a quel instant a lieu l’acces (Acces memoire)et dans quel sens (Lecture/Ecriture). La figure 1.2 montre une telle organisa-tion.

2.2.4 Langages du processeur : langage machine etlangage d’assemblage

Pour etre interpretees par le processeur, les instructions d’un programmedoivent etre representees selon un certain code et stockees dans la memoirecentrale dans un format appele langage machine. Le langage machine decritl’ensemble des instructions comprises par le processeur et la convention decodage pour que celles-ci soient executables. On parle de jeu ou de repertoired’instructions. Le codage d’une instruction est un vecteur de 0 et de 1.

Donnons quelques exemples de ce que peuvent etre les instructions : “Ajou-ter 258 et le nombre contenu en memoire a l’adresse 315 puis ranger le resultata l’adresse 527”, “Si le nombre range en memoire a l’adresse 124 est posi-tif, alors sauter a l’execution de l’instruction a l’adresse 471, sinon continueren sequence, c’est-a-dire passer a l’instruction suivante dans la memoire”.Differents sous-vecteurs, ou champs, representent alors la valeur immediatede l’operande 258, ou bien l’adresse directe 315, ou encore le code operationaddition.

Un programme ecrit en langage machine a l’apparence d’une suite de

version en ligne - [PDF Document] (22)

14 Qu’est-ce qu’un ordinateur ?

chiffres binaires peu evocatrice pour un programmeur humain. C’est pour-quoi on utilise un langage dit d’assemblage, dans lequel on decrit exactementles memes instructions, mais sous une forme textuelle plus facile a manipulerque des paquets de 0 et de 1.

Le programe ecrit en langage d’assemblage doit necessairement etre traduiten langage machine pour etre execute. Le programme qui effectue cette tra-duction est l’assembleur. Un abus de langage frequent confond le langage et letraducteur. On emploie l’expression impropre de programmation en assembleurpour programmation en langage d’assemblage.

On parle de code source a propos d’un programme ecrit dans le langaged’assemblage et de format objet ou de format executable a propos du resultatde la traduction.

Le resultat de la traduction est une donnee qui peut etre en memoire, encours d’execution ou non. Il passe de l’etat de donnee a celui de programme encours d’execution au moment du lancement. Le lancement est une operationspeciale qui change le statut du programme. Elle consiste a affecter au comp-teur ordinal du processeur l’adresse de la premiere instruction du programmea executer.

Chaque processeur a son propre langage machine. Un programme en lan-gage machine ecrit pour le processeur X ne peut pas, en general, s’executer surun processeur Y. Dans le cas contraire X et Y sont dits compatibles.

Il existe des machines a jeu d’instructions complexe Complex InstructionSet Computer ou plus restreint Reduced Instruction Set Computer.

3. Ou sont le materiel et le logiciel ?

Dans une machine informatique se trouvent du materiel et des logiciels. Unefonction realisee par du logiciel sur une certaine machine peut etre realisee pardu materiel sur une autre. C’est le cas pour certains calculs ou transcodagescomplexes, par exemple le calcul sur des reels representes dans le codage virguleflottante. La mise en oeuvre d’un algorithme par un programme est classique.Sa mise en oeuvre par du materiel, par des techniques d’algorithmique cablee,est moins connue car moins facile a experimenter sur un simple ordinateurpersonnel.

3.1 Materiel

Le materiel est pourtant plus directement accessible a la vue. Nous allonsl’examiner selon trois criteres : son aspect, sa technologie et sa fonction.

3.1.1 Aspect du materiel

Une premiere approche du materiel consiste a le considerer selon son aspect.Un ordinateur peut ressembler a une caisse surmontee d’un ecran. N’oublions

version en ligne - [PDF Document] (23)

3. Ou sont le materiel et le logiciel ? 15

pas qu’un ordinateur peut parfois etre une armoire, ou une carte imprimee,voire simplement une puce ou circuit comme sur votre carte bancaire. L’ecrann’est pas necessaire a l’ordinateur. Ce n’est qu’un moyen de communiquer entrela machine et l’etre humain.

3.1.2 Technologie du materiel

Une deuxieme classification d’elements materiels se base sur les phenomenesmis en oeuvre.

Certains systemes sont purement electriques ou electroniques. Ces systemessont organises selon une hierarchie correspondant a la technologie de realisationutilisee : dans les caisses, il y a des cartes imprimees, sur lesquelles sont soudesdes boıtiers. Dans les boıtiers il y a des (le plus souvent une seule) pucescomprenant des transistors, resistances et condensateurs.

Pour l’acquisition de donnees externes, on utilise souvent des systemesmecaniques ou electromecaniques. Les claviers et souris sont de ce type. On aplus generalement des capteurs de pression, d’acceleration, etc., et des action-neurs de mouvements divers. L’ensemble peut constituer un robot. Differentscapteurs ou actionneurs peuvent se trouver sous forme de puce ou de compo-sants separes. Les microsystemes reunissent sur une seule puce capteurs, action-neurs et l’electronique de traitement. Des systemes electromecaniques sont uti-lises notamment pour la lecture ou l’enregistrement sur supports magnetiquesou optiques.

Certains systemes sont electro-optiques comme les ecrans, les diodeselectroluminescentes, les cameras ou appareils photo numeriques, les lecteursde code-barre, les scanners, etc.

Les ordinateurs pneumatiques, ou la pression dans des tubes tient lieu decourant electrique, sont assez rares.

3.1.3 Fonctions du materiel

La troisieme facon de caracteriser le materiel est de le faire d’apres sa fonc-tion. Les elements materiels ont differents types de fonctions : de memorisation,de traitement et de communication.

La memorisation stocke des informations dans la machine. Le cout et laduree du stockage et des operations de copie dependent fortement du mode derepresentation physique.

Si une information etait representee par un champ de menhirs, le stockageprendrait de la place, la duplication serait difficile (sauf pour Obelix). La dureede stockage serait en revanche de plusieurs siecles.

Dans l’ordinateur, l’information est representee par des signaux electriquesde faible puissance. La copie est rapide et de faible cout energetique. La dureede vie depend eventuellement d’une source d’alimentation electrique.

On distingue classiquement la memoire principale et la memoire secondaire.La memoire principale est directement accessible dans l’ordinateur. Elle com-

version en ligne - [PDF Document] (24)

16 Qu’est-ce qu’un ordinateur ?

porte une partie de memoire vive et une partie de memoire morte. Quand oncoupe l’alimentation electrique, la memoire morte ne perd pas les informationsqui y sont inscrites. La memoire morte ne peut pas etre facilement modifiee.La memoire secondaire contient des informations moins directement accessiblespar le processeur. Il faut passer par une interface. Ainsi les disques souples oudurs sont des memoires secondaires. Elles sont generalement permanentes :l’information y reste en l’absence d’alimentation electrique. La carte perforeea longtemps constitue un support de stockage en informatique. Son avantageest de pouvoir etre lue directement par l’utilisateur humain.

Une memorisation a lieu aussi dans le processeur qui garde temporairementdes copies de certaines informations dans ses registres.

La fonction de traitement est assuree par le processeur. Il peut lire ou ecrirele contenu de la memoire principale. Il peut ensuite, comme on l’a vu, executerles instructions lues.

D’autres circuits ont des fonctions de communication entre le processeuret la memoire ou entre le processeur et le monde exterieur. Ces circuits d’in-terfacage et de communication sont des coupleurs. Les communications avecle monde exterieur se font a travers des peripheriques comme les claviers, sou-ris, lecteur/graveur/enregistreurs de disques. D’autres types de coupleurs per-mettent de connecter l’ordinateur a d’autres ordinateurs via un reseau. Dansles applications industrielles ou une chaıne de production est pilotee par ordi-nateur il serait incongru de considerer la chaıne comme un peripherique ! Dupoint de vue du programmeur c’est pourtant le cas.

3.2 Les programmes et les donnees

Les programmes et les donnees peuvent etre enregistres sur des supportsmagnetiques ou en memoire vive ou morte. Ils peuvent etre presents (en par-tie) dans le processeur : a un instant donne l’instruction en cours d’executionest dans dans le registre d’instruction du processeur. Cette information estdupliquee, on ne l’enleve pas de la memoire pour l’executer. Les programmespeuvent etre affiches a l’ecran ou ecrits sur une feuille de papier.

Sur un meme disque optique ou magnetique, ou dans une memoire, onpeut trouver le texte source d’un programme et le format objet correspon-dant. Quand on achete un logiciel on n’achete generalement que le code objet.L’editeur se protege ainsi contre la possibilite pour le client de modifier le logi-ciel. On achete aussi le plus souvent des donnees : dictionnaire du verificateurorthographique, images des jeux, etc.

3.3 La vie du materiel et des programmes

Le materiel a une vie tres simple : avant la mise sous tension, il ne faitrien. Certaines informations sont stockees en memoire morte ou en memoiresecondaire. Aucun traitement n’a lieu ; a la mise sous tension, il se produit une

version en ligne - [PDF Document] (25)

4. Fonctionnalites des ordinateurs 17

reinitialisation automatique (reset), qui fait demarrer le systeme materiel dansson etat initial, et donc lance l’execution du logiciel. Une reinitialisation peutavoir lieu a n’importe quel instant sur commande de l’utilisateur.

Tout ordinateur (sauf de tres rares exceptions) est rythme par un si-gnal periodique nomme l’horloge. Ce signal cadence les changements d’etatsdans l’ordinateur. Un ordinateur dont la frequence d’horloge est de 250 Mhz(Megahertz) change d’etat avec une periode de 4 ns (nanosecondes, c’est-a-dire4.10−9 secondes). L’existence de cette horloge permet de gerer une pendule quidonne l’heure a l’utilisateur et date ses fichiers. La precision n’a pas besoind’etre a la nanoseconde pres evidemment. En revanche elle doit permettre dechanger de siecle !

La vie des programmes est plus agitee ! Certains programmes sont ins-crits en memoire morte en usine, par le constructeur de l’ordinateur. Pourla construction de petit* ordinateurs specialises, la technologie d’inscriptiondes memoires mortes est accessible assez facilement. Certains programmescomme les noyaux de systemes d’exploitation ou les jeux sur cartouche, sontgeneralement sur un tel support.

Certains programmes se trouvent en memoire vive. Ils n’y apparaissent paspar generation spontanee. Ils sont le resultat d’un cycle : edition, sauvegarde,traduction eventuelle, chargement (d’un support secondaire vers la memoirevive). Ces etapes sont generalement suivies d’un lancement.

L’ordinateur comporte les outils logiciels necessaire a ces actions : editeurde texte, gestion de fichiers, traducteur, chargeur, lanceur sont pilotes par unutilisateur humain par l’intermediaire d’un enchaıneur de travaux : l’interpretede commandes.

Dans les vieilles machines on pouvait entrer des programmes en memoire etforcer le compteur programme directement en binaire, avec des interrupteursa deux positions. Il n’y avait plus qu’a appuyer sur un bouton pour lancerl’execution. C’etait le bon temps !

4. Fonctionnalites des ordinateurs

Cette partie decrit differents usages de l’ordinateur. Cela nous permet en-suite de distinguer l’ordinateur de differentes machines programmables qui nesont pas des ordinateurs.

4.1 Les usages de l’ordinateur

Distinguons deux usages bien differents des ordinateurs.Certains ordinateurs ont atteint une destination finale ; c’est le cas par

exemple de la console de jeux, du traitement de texte de la dactylographe, dusysteme de reservation de la compagnie aerienne, de la station de travail en bu-

version en ligne - [PDF Document] (26)

18 Qu’est-ce qu’un ordinateur ?

reau d’etude de mecanique, du controleur de programmation du magnetoscope,ou de la calculette programmable.

D’autres ordinateurs n’ont pas encore atteint ce stade. Pour l’instant ilsne servent qu’a des informaticiens pour ecrire des programmes. Ils ne serventencore qu’a la mise au point d’une certaine destination finale. Souvent unmeme ordinateur peut servir a developper des jeux, un traitement de texte ouune calculette par simulation.

Certains ordinateurs peuvent etre utilises des deux manieres : les program-meurs de la compagnie aerienne changent les programmes sur la machine sansinterrompre les reservations, ce qui n’est pas forcement simple.

Sur certains ordinateurs il est possible d’utiliser des logiciels dits de Concep-tion Assistee par Ordinateur (CAO) pour concevoir des voitures, des moteursou les puces qui seront a la base d’un futur ordinateur.

4.1.1 Fonctionnalites des ordinateurs pour non programmeurs

Remarquons que ces machines sont souvent qualifiees de programmables,comme c’est le cas pour les magnetoscopes.

Dans une telle machine il faut pouvoir introduire des informations et lan-cer des executions. Si l’on regarde de plus pres, il faut pouvoir introduire desdonnees (les textes du traitement de texte, les operandes de la calculette nonprogrammable) et des programmes dans le langage de la machine program-mable visible. Par exemple pour le magnetoscope : enregistrer la chaıne x, deh1 a h2 heures, pendant N jours, tous les M jours. Le processeur n’execute pasdirectement ce type de programmes qui ne sont pas ecrits en langage machine.Le programme en langage machine qui est execute considere enregistrer, x, h1,h2, N et M comme des donnees. Ces programmations sont interpretees par unprogramme en langage machine qui est fourni avec la machine. Ce programmeest totalement invisible pour l’utilisateur.

Par ailleurs il faut pouvoir lancer un tel programme en langage machinequi prend ces parametres (enregistrer, h1,..) et s’execute en tenant compte deleurs valeurs.

Cette double fonctionnalite permettant une phase de programmation et unephase d’execution n’est pas facile a comprendre pour les utilisateurs non in-formaticiens. L’informaticien qui devra un jour ecrire un mode d’emploi d’unetelle machine doit s’en souvenir.

Dans de telles machines l’utilisateur peut parfois installer des programmesnouveaux qu’il se procure : jeux, nouvelle version de traitement de texte, etc.Ils sont deja en langage machine ; il faut pouvoir memoriser ces programmessur un disque et les lancer. On est tres proche alors d’un ordinateur.

4.1.2 Fonctionnalites des ordinateurs pour programmeurs

Dans ces machines il faut pouvoir ecrire des programmes et les traduireen langage machine puis les charger et les lancer. La traduction d’un pro-

version en ligne - [PDF Document] (27)

4. Fonctionnalites des ordinateurs 19

gramme ecrit dans un langage de haut niveau en un texte en langage ma-chine est une compilation. Il y a donc des programmes qui permettent d’ecrire,sauver, traduire, lancer des programmes. Sur les ordinateurs utilises pourle developpement de programmes, les programmes peuvent, comme sur lemagnetoscope, etre interpretes.

Sur les ordinateurs compliques ou plusieurs programmeurs travaillent enmeme temps chacun veut quand meme avoir l’impression d’avoir un ordinateurpour lui tout seul. C’est le cas de l’ordinateur de la compagnie aerienne quigere les places, permet la mise au point de programmes, etc.

L’ensemble des outils permettant l’edition, la sauvegarde et le lancementde programmes pour un ou plusieurs utilisateurs constitue un systeme d’ex-ploitation. Un systeme d’exploitation comporte 2 parties :

– Une partie basse fortement dependante des caracteristiques du materielcomme le type de processeur ou les types de peripheriques connectes (sourisa 1, 2 ou 3 boutons, claviers azerty ou qwerty, lecteurs de disquettesavec une vitesse de rotation plus ou moins grande). Des bibliotheques de pro-grammes de gestion des peripheriques, nommees les pilotes de peripheriques,sont toujours livrees avec l’ordinateur ou avec le peripherique. L’installa-tion de ces pilotes (drivers en anglais) cause bien des soucis aux utilisateursnovices. Cette partie basse comporte aussi les outils permettant de gererplusieurs utilisateurs simultanes de l’ordinateur.

– Une partie haute utilisant les primitives de la precedente pour offrir desservices de plus haut niveau. Par exemple : apres une edition de texte, on lesauvegarde en utilisant le programme de gestion de fichiers. Ce gestionnaireverifie si le fichier existe deja, si sa date enregistree est bien anterieure, etc.Mais la prise en compte de la vitesse de rotation du disque n’est pas dumeme niveau. Le systeme de gestion de fichiers suppose ces aspects plus basdeja resolus. De meme l’envoi d’un courriel (ou mel) utilise des parties deprogrammes qui ne dependent pas du nombre de boutons de la souris.

4.2 Tout ce qui est programmable est-il un ordinateur ?

On rencontre de nombreux appareils electromenagers dotes d’un sequenceurou programmateur. Ce dernier leur permet d’enchaıner automatiquement cer-taines actions, selon un ordre immuable fige lors de la construction de la ma-chine (l’utilisateur a parfois le choix entre plusieurs sequences predefinies).C’est le cas des machines a laver.

Une machine a laver a un comportement cyclique complexe, avecretroaction de l’environnement. Un moteur qui tourne declenche ou non desactions selon la programmation manifestee par la position de certains points decontacts electriques ; les actions continuent ou s’arretent selon le temps ecoule,les informations provenant du detecteur de temperature, le niveau d’eau, etc.Les actions correspondant aux contacts sont faites dans l’ordre ou les contactssont touches par un contacteur electrique.

version en ligne - [PDF Document] (28)

20 Qu’est-ce qu’un ordinateur ?

On pourrait imaginer un comportement plus complexe dans lequel uneaction est ou n’est pas faite selon le resultat de l’action precedente. Imaginonsun detecteur d’opacite de l’eau de rincage : si l’eau est trop opaque, un rincagesupplementaire a lieu.

Le materiel informatique a un tel comportement. Le processeur peutetre assimile a un moteur qui tourne. Le compteur programme, qui evolueperiodiquement, evoque ce comportement : il passe devant des contacts, ilpointe successivement sur des instructions, et effectue les actions correspon-dantes. Si les contacts disent de s’arreter ou d’aller plus loin des que l’actionest terminee, cela se produit. Les intructions peuvent etre conditionnelles. Ellespeuvent comporter des ruptures de sequence. Dans ce cas les instructions nesont plus executees dans l’ordre ou elles sont ecrites.

L’informatique est toutefois plus complexe qu’une simple machine a la-ver car un programme peut avoir comme resultat de creer et d’ecrire dans lamemoire un programme et de lui passer la main, c’est-a-dire de le lancer. Lesmachines a laver n’en sont pas capables.

5. Plan du livre

Le livre comporte six parties.La premiere partie donne des fondements pour toute l’informatique, logi-

cielle et materielle. Les outils mathematiques ne sont pas presentes ici poureux-memes mais pour etre utilises dans la suite. Les mots binaire, information,bit, automate, booleen, representation, etat, langage seront alors familiers.

La deuxieme partie donne les techniques propres au materiel. Nous ydecrivons toutes les etapes qui permettent de representer et traiter les vec-teurs de 0 et de 1 sur du materiel. Les mots puce, systeme sequentiel, memoire,circuit, transistor ne poseront plus de probleme.

La troisieme partie donne les techniques propres au logiciel. Apres cettepartie, on sait tout sur langage, langage d’assemblage, langage machine, saut,branchement, registre.

La quatrieme partie est centrale. On y explique comment le processeurexecute les instructions. Ceci est fait de facon detaillee, en s’appuyant sur lesconnaissances acquises dans les trois premieres parties. Apres cette partie ona compris comment du materiel peut traiter du logiciel.

La cinquieme partie donne tous les elements pour construire un ordinateurau sens ou nous venons de le definir. Cela suppose des ajouts de materiel autourdu processeur et de la memoire et l’introduction de programmes constituant lesysteme d’exploitation. Apres ce chapitre, on sait, de facon detaillee, commentmarche l’ordinateur et comment on le concoit. On pourrait donc s’arreter la.

La sixieme partie est necessaire pour le professionnel de l’informatique.On montre comment peut etre mis en place le systeme qui permet d’accepterplusieurs utilisateurs effectuant plusieurs taches simultanement, ou tout au

version en ligne - [PDF Document] (29)

5. Plan du livre 21

moins avec l’apparence de la simultaneite.

version en ligne - [PDF Document] (30)

22 Qu’est-ce qu’un ordinateur ?

version en ligne - [PDF Document] (31)

Premiere partie

Outils de base del’algorithmique logicielle et

materielle

version en ligne - [PDF Document] (32)

version en ligne - [PDF Document] (33)

Chapitre 2

Algebre de Boole et fonctionsbooleennes

George Boole, mathematicien anglais, a utilise pour la premiere fois en1850 une algebre a 2 elements pour l’etude de la logique mathematique. Il adefini une algebre permettant de modeliser les raisonnements sur les proposi-tions vraies ou fausses. Etudiee apres Boole par de nombreux mathematiciens,l’Algebre de Boole a trouve par la suite de nombreux champs d’application :reseaux de commutation, theorie des probabilites, recherche operationnelle(etude des alternatives).

Les premieres applications dans le domaine des calculateurs apparaissentavec les relais pneumatiques (ouverts ou fermes). Aujourd’hui, les ordinateurssont composes de transistors electroniques fonctionnant sur 2 modes : bloque oupassant (Cf. Chapitres 7 et 8). Ils utilisent une arithmetique binaire (Cf. Cha-pitre 3). L’algebre de Boole constitue un des principaux fondements theoriquespour leur conception et leur utilisation. Les circuits sont des implementationsmaterielles de fonctions booleennes.

Les fonctions booleennes peuvent etre representees et manipulees sousdifferentes formes. Ces representations ont des interets variant suivant de nom-breux criteres. Selon la technologie de circuit cible, certaines representationssont plus adequates pour arriver a une implementation optimisee. Unerepresentation peut bien convenir a certains types de fonctions et devenir trescomplexe, voire impossible a utiliser pour d’autres. Enfin, selon l’outil de CAO(Conception assistee par ordinateur) utilise, certaines formes sont acceptees(car bien adaptees a une representation sur machine) ou non.

Le paragraphe 1. presente les principales definitions concernant cettealgebre et les fonctions booleennes. Les differents moyens de representerces fonctions booleennes sont enumeres dans le paragraphe 2. Le para-graphe 3. decrit les differentes manipulations que l’on peut effectuer surces representations afin d’obtenir des formes permettant par la suite uneimplementation physique a moindre cout.

version en ligne - [PDF Document] (34)

26 Algebre de Boole et fonctions booleennes

1. Algebre de Boole

1.1 Operations

Soit l’ensemble B = {0, 1}. On definit une relation d’ordre total sur cetensemble en posant : 0 ≤ 1. A partir de cette relation d’ordre, on definit lesoperations suivantes sur les elements de B :

Addition : x + y = max(x, y)Multiplication : x.y = min(x, y)Complementation : x = 0 si x = 1 et x = 1 si x = 0On utilise les termes de somme, produit et complement pour les resultats

de l’addition, de la multiplication et de la complementation. Le resultat deces operations est detaille dans la table suivante :

a b a + b a.b a

0 0 0 0 11 0 1 0 00 1 1 0 -1 1 1 1 -

1.2 Definition

Soit A un ensemble non vide comportant deux elements particuliers notes0 et 1. On definit sur l’ensemble A deux operations binaires notees + et . etune operation unaire notee ¯.

(A, 0, 1, +, ., ¯) est une algebre de Boole s’il respecte les axiomes suivants :

1. L’addition et la multiplication sont commutatives et associatives.

∀a ∈ A,∀b ∈ A : a + b = b + a et a.b = b.a∀a ∈ A,∀b ∈ A,∀c ∈ A : (a + b) + c = a + (b + c) et (a.b).c = a.(b.c)

Remarque : On pourra ainsi noter de facon equivalente (a.b).c oua.b.c ; de meme : a + (b + c) ou a + b + c.

2. 0 est element neutre pour l’addition et 1 est element neutre pour lamultiplication.

∀a ∈ A : 0 + a = a∀a ∈ A : a.1 = a

3. L’addition et la multiplication sont distributives l’une par rapport al’autre : ∀a ∈ A,∀b ∈ A,∀c ∈ A : (a + b).c = a.b + a.c et (a.b) + c =(a + c).(b + c).

Remarque : L’usage a consacre la priorite de la multiplication surl’addition comme dans la notation algebrique usuelle. Par souci de sim-plification d’ecriture, on notera de facon equivalente : (a.b)+c ou a.b+c.

version en ligne - [PDF Document] (35)

1. Algebre de Boole 27

4. Pour tout element, la somme d’un element et de son complementaire estegale a 1 et le produit d’un element et de son complementaire est egal a0 : ∀a ∈ A : a + a = 1 et ∀a ∈ A : a.a = 0.

1.3 Exemples d’Algebres de Boole

L’algebre de Boole la plus simple est definie sur l’ensemble a deux elements :B = {0, 1}. Pour l’etude des raisonnements sur les propositions logiques,il existe des synonymes pour les noms des elements de cet ensemble et desoperations ; on parle alors de faux et vrai (au lieu de 0 et 1) et des operateurs etet ou (au lieu de la multiplication et de l’addition). Les definitions et les pro-prietes mathematiques restent identiques. Ces termes sont utilises aussi dansl’etude des circuits logiques.

L’ensemble des parties d’un ensemble E (note P(E)) muni des operationsd’intersection ensembliste (correspondant a .), d’union ensembliste (correspon-dant a +) et de complementaire ensembliste dans E (correspondant a ¯) formeune algebre de Boole. L’ensemble vide correspond a 0 et l’ensemble E a 1.

L’ensemble des nuplets de booleens muni des operations d’addition, de mul-tiplication et de complementation etendues aux vecteurs forme une algebre deBoole. (0, 0, . . . , 0) correspond a 0 et (1, 1, . . . , 1) a 1.

(x1, x2, ..., xn) + (y1, y2, ..., yn) = (x1 + y1, x2 + y2, ..., xn + yn)(x1, x2, ..., xn).(y1, y2, ..., yn) = (x1.y1, x2.y2, ..., xn.yn)

(x1, x2, ..., xn) = (x1, x2, ..., xn)

1.4 Principaux theoremes

Theoreme de dualite : Si (A, 0, 1, +, ., ¯) est une algebre de Boole alors(A, 1, 0, ., +, ¯) est aussi une algebre de Boole.

Ainsi les axiomes et regles de simplification peuvent se presenter sous deuxformes duales, l’une se deduisant de l’autre en remplacant les + par des . etles 1 par des 0 et inversem*nt.

Regles de simplification booleenne :

¯a = aduale←→ ¯a = a

a + 1 = 1duale←→ a.0 = 0

a + a = aduale←→ a.a = a

a + a.b = aduale←→ a.(a + b) = a

a + a.b = a + bduale←→ a.(a + b) = a.b

a.b + a.b = bduale←→ (a + b).(a + b) = b

a.b + a.c + b.c = a.b + a.cduale←→ (a + b).(a + c).(b + c) = (a + b).(a + c)

version en ligne - [PDF Document] (36)

28 Algebre de Boole et fonctions booleennes

x1 x2 x3 y

0 0 0 10 0 1 10 1 0 00 1 1 0

x1 x2 x3 y

1 0 0 11 0 1 11 1 0 01 1 1 1

Fig. 2.1 – Table de verite de la fonction : y = f(x1, x2, x3)

Regles de De Morgan

a.b = a + bduale←→ a + b = a.b

On peut generaliser a n variables :

x1.x2. . . . .xn = x1 + x2 + . . . + xnduale←→ x1 + x2 + . . . + xn = x1.x2. . . . .xn

2. Fonctions booleennes

2.1 Fonctions booleennes simples

2.1.1 Definitions

On appelle fonction booleenne simple une application de {0, 1}n dans{0, 1} :

(x1, x2, ..., xn)f7−→ f(x1, x2, ..., xn)

(x1, x2, ..., xn) est appelee variable booleenne generale. f est appelee fonctiona n variables. Une valeur donnee de (x1, x2, ..., xn) est appelee point de lafonction.

La facon la plus simple de definir une fonction est de donner la liste deses valeurs en chaque point. On peut le faire sous la forme d’un tableau quel’on appelle aussi table de verite. La figure 2.1 donne la table de verite d’unefonction a 3 variables.

L’ensemble des points de la fonction forme le domaine de la fonction. Ondit qu’une fonction couvre tous les points pour lesquelles elle vaut 1 (sous-ensemble du domaine pour lequel la fonction vaut 1). La fonction f definie parla table 2.1 couvre les points (0, 0, 0), (0, 0, 1), (1, 0, 0),(1, 0, 1) et (1, 1, 1).

Remarque : Une fonction booleenne peut servir a representer un ensemble :la fonction vaut 1 en chacun des points appartenant a l’ensemble. On parle defonction caracteristique.

2.1.2 Les fonctions a 2 variables

Les fonctions a deux variables sont definies sur les 4 points(0, 0), (0, 1), (1, 0), (1, 1). En chacun de ces 4 points une certaine fonction peutprendre une des deux valeurs 0 ou 1. Il y a donc 24 = 16 fonctions possibles.

version en ligne - [PDF Document] (37)

2. Fonctions booleennes 29

x1 x2 f0 f1 f2 f3 f4 f5 f6 f7

0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 1 1 1 11 0 0 0 1 1 0 0 1 11 1 0 1 0 1 0 1 0 1

x1 x2 f8 f9 f10 f11 f12 f13 f14 f15

0 0 1 1 1 1 1 1 1 10 1 0 0 0 0 1 1 1 11 0 0 0 1 1 0 0 1 11 1 0 1 0 1 0 1 0 1

Fig. 2.2 – Les tables de verite des 16 fonctions a deux variables

Les tables de verite des 16 fonctions a deux variables sont listees dans la fi-gure 2.2. f1 et f7 correspondent respectivement a la multiplication et l’additionalgebriques vues auparavant.

2.1.3 Duale d’une fonction

On appelle duale d’une fonction f la fonction notee f ∗ telle que : f ∗(X) =

f(X). On dit qu’une fonction est autoduale si f ∗(X) = f(X),∀X.

2.2 Fonctions booleennes generales

On appelle fonction booleenne generale une application F de {0, 1}n dans{0, 1}m :

(x1, x2, . . . , xn)F7−→ (f1(x1, x2, ..., xn), f2(x1, x2, ..., xn), . . . , fm(x1, x2, ..., xn)).

Une fonction booleenne generale est un m-uplet de fonctions simples :F = (f1, f2, . . . , fm).

2.3 Relations d’ordre

L’ordre defini sur B est etendu aux variables generales et aux fonctionsbooleennes.

La relation d’ordre partiel sur les variables booleennes generales est definiepar : (x1, x2, ..., xn) ≤ (y1, y2, ..., yn) si et seulement si ∀j, xj ≤ yj. Par exemple(0, 0, 1) ≤ (0, 1, 1). En revanche, (1, 0, 1) et (0, 1, 0) ne sont pas comparables.

La relation d’ordre partiel sur les fonctions booleennes simples est definiecomme suit. La fonction f est inferieure a la fonction g si et seulement si pourtout point P : f(P ) ≤ g(P ) ; c’est-a-dire si tous les points couverts par f sontcouverts par g.

Remarque : Si f et g sont respectivement les fonctions carateristiques desensembles A et B, f ≤ g signifie que A est inclus dans B.

version en ligne - [PDF Document] (38)

30 Algebre de Boole et fonctions booleennes

La relation d’ordre partiel sur les fonctions booleennes generales est definiecomme suit. La fonction generale F = (f1, f2, . . . , fm) est inferieure a la fonc-tion G = (g1, g2, . . . , gm) si pour tout i dans 1..m, on a fi ≤ gi.

2.4 Fonctions phi-booleennes

Une fonction booleenne partielle est une fonction booleenne dont la valeurn’est pas definie en chaque point. Dans la pratique les fonctions partiellessont utilisees pour definir des fonctions dont la valeur en certains points estindifferente ou dont la valeur des entrees en certains points est impossible.

On peut coder une fonction partielle f par une fonction totale dont lecodomaine est complete par une valeur appelee Φ. La valeur Φ est associeeaux points non determines de f . Une telle fonction est dite phi-booleenne.

Definition On appelle fonction phi-booleenne une application f de {0, 1}n

dans {0, 1, Φ} : (x1, x2, ..., xn)f7−→ f(x1, x2, ..., xn).

Remarque : Le choix de la lettre Φ vient de sa forme qui peut etre vuecomme la superposition d’un 1 et d’un 0.

Exemple E2.1 : Une fonction phi-booleenneSoit la fonction a 4 variables f(x1, x2, x3, x4) qui vaut 1 si l’entier compris entre0 et 9, code en binaire sur 4 bits correspondant aux valeurs de x1, x2, x3, x4, estpair et 0 sinon. Cette fonction est partielle puisque sa valeur est indifferentepour les points correspondant a des valeurs comprises entre 10 et 15. Onpeut la coder en fonction phi-booleenne en associant la valeur Φ a chacun despoints (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0) et (1, 1, 1, 1).

Bornes d’une fonction phi-booleenne Soit f une fonction phi-booleenne.La borne superieure de f est obtenue en remplacant tous les Φ par des 1. Elleest notee SUP(f). La borne inferieure de f est obtenue en remplacant tous lesΦ par des 0. Elle est notee INF(f). Si nous etendons la relation d’ordre donneesur B sur {0, 1, Φ} en posant 0 ≤ Φ ≤ 1, nous avons : INF(f) ≤ f ≤ SUP(f).Le tableau ci-dessous donne les bornes superieure et inferieure d’une fonctionphi-booleenne :

x1 x2 f INF(f) SUP(f)0 0 Φ 0 11 0 1 1 10 1 Φ 0 11 1 0 0 0

version en ligne - [PDF Document] (39)

3. Representation des fonctions booleennes 31

3. Representation des fonctions booleennes

Comme nous l’avons vu precedemment la facon la plus simple de representerune fonction est de donner la liste de ses valeurs. Cette representation, diteen extension, n’est malheureusem*nt plus possible des que le nombre de va-riables augmente. En effet une fonction a n variables comporte 2n valeurs.De nombreux types de representation plus compactes, dites en comprehensionexistent. Leur utilisation varie principalement suivant leur degre de complexiteet de facilite de manipulation a des fins d’implementation materielle (Cf. Cha-pitre 8).

Nous donnons dans cette partie trois types de representations, tres uti-lisees aujourd’hui : les expressions algebriques, les tableaux de Karnaugh et lesBDD. Outre les representations des fonctions simples nous montrons commentrepresenter une fonction generale a l’aide de la representation des m fonctionssimples qui la composent.

3.1 Expressions algebriques

3.1.1 Definitions

Expression booleenne algebrique : Toute fonction booleenne peut etrerepresentee par une expression algebrique construite a partir des noms desvariables simples de la fonction, des constantes 0 et 1, et des operations del’algebre de Boole. Par exemple, f(x1, x2) = x1.(x2 + x1.x2) ou g(x1, x2) =1.(0 + x1.x2).

Cette representation n’est pas unique. Par exemple, x1.(x2 + x1.x2) + x2 etx1 + x2 sont deux expressions algebriques d’une meme fonction.

Litteral : On appelle litteral l’occurrence d’une variable ou de soncomplement dans une expression algebrique. Les litteraux apparaissant dansl’expression de la fonction f definie ci-dessus sont : x1, x2, x2.

Monome : On appele monome un produit de p litteraux distincts. Parexemple, x1.x2.x3. Un monome est dit canonique pour une fonction s’il contienttoutes les variables de la fonction. Chaque ligne de la table de verite corres-pond a un monome canonique. On note dans le monome x si la variable x vaut0, x si elle vaut 1. Dans la table 2.1 la deuxieme ligne correspond au monomecanonique x1.x2.x3.

Forme polynomiale : On dit qu’une expression est sous forme polynomialesi elle est ecrite sous forme de somme de monomes. Par exemple, f(x1, x2) =x1 + x1.x2.

version en ligne - [PDF Document] (40)

32 Algebre de Boole et fonctions booleennes

3.1.2 Theoreme de Shannon

Soit f(x1, x2, ..., xn) une fonction simple de Bn dans B :

∀i ∈ 1..nf(x1, x2, ..., xn) = xi.f(x1, x2, . . . , 0, ..., xn) + xi.f(x1, x2, . . . , 1, ..., xn)

f(x1, · · · , xi−1, 1, xi+1, · · · , xn) et f(x1, · · · , xi−1, 0, xi+1, · · · , xn) sont ap-peles cofacteurs positif et negatif de f par rapport a la variable xi. Ils sontnotes respectivement fxi

et fxi.

La decomposition de Shannon sur la variable xi s’ecrit : f = xi.fxi+xi.fxi

.Cette decomposition est unique.

Il existe la forme duale du theoreme de Shannon :f(x1, x2, ..., xn) = (xi + f(x1, x2, . . . , 1, ..., xn)).(xi + f(x1, x2, . . . , 0, ..., xn))

3.1.3 Formes de Lagrange

En appliquant successivement le theoreme de Shannon sur toutes les va-riables de la fonction, on obtient une forme polynomiale composee de tous lesmonomes canoniques affectes de coefficients correspondant aux valeurs de lafonction.

Par exemple, pour une fonction a deux variables on obtient :

f(x1, x2) = x1.f(0, x2) + x1.f(1, x2)f(x1, x2) = x1.(x2.f(0, 0) + x2.f(0, 1)) + x1.(x2.f(1, 0) + x2.f(1, 1))f(x1, x2) = x1.x2.f(0, 0) + x1.x2.f(0, 1) + x1.x2.f(1, 0) + x1.x2.f(1, 1)

Cette forme est appelee premiere forme de Lagrange. Toute fonctionpossede une et une seule forme de ce type. C’est une expression canonique.On simplifie en general cette forme en supprimant tous les monomes dont lecoefficient est 0 et en enlevant les coefficients a 1.

Exemple E2.2 : Premiere forme de Lagrange d’une fonctionSoit h une fonction a deux variables definie par latable ci-contre. Son expression algebrique sous lapremiere forme de Lagrange est :h(x1, x2) = x1.x2.1 + x1.x2.1 + x1.x2.0 + x1.x2.0 =x1.x2 + x1.x2 qui se simplifie en x1.

x1 x2 y0 0 10 1 11 0 01 1 0

En utilisant la forme duale du theoreme de Shannon, on obtient la deuxiemeforme de Lagrange, un produit de sommes appelees monales.

3.1.4 Expressions polynomiales des fonctions a 2 variables

La figure 2.3 donne l’expression polynomiale des 16 fonctions de deux va-riables booleennes.

En logique, la somme est aussi appelee disjonction alors que dans le domainedes circuits, c’est l’operation ou exclusif qui est appelee disjonction.

version en ligne - [PDF Document] (41)

3. Representation des fonctions booleennes 33

Fonctions Expressions Noms usuelsf0 0f1 x1.x2 et, and, produitf2 x1.x2

f3 x1

f4 x1.x2

f5 x2

f6 x1.x2 + x1.x2 ou exclusiff7 x1 + x2 ou, or, sommef8 x1 + x2 ni, non ou, norf9 x1.x2 + x1.x2 conjonctionf10 x2 complement de x2

f11 x1 + x2

f12 x1 complement de x1

f13 x1 + x2 implicationf14 x1.x2 exclusion, non et, nandf15 1 tautologie

Fig. 2.3 – Expression polynomiale des fonctions a deux variables

3.2 Tableaux de Karnaugh

3.2.1 Definition

Un tableau de Karnaugh est une representation particuliere de la table deverite permettant de manipuler facilement (a la main) les differentes formesalgebriques polynomiales d’une fonction ; nous le definissons ici et verrons auparagraphe 4. comment l’utiliser.

Un tableau de Karnaugh se presente comme une table a plusieurs entrees,chaque variable de la fonction apparaissant sur une des entrees. Par exemple,la figure 2.7 represente un tableau de Karnaugh pour une fonction a 3 variableset la figure 2.5 le tableau de Karnaugh d’une fonction a 4 variables.

Dans un tableau de Karnaugh, une seule variable change de valeur entredeux cases voisines verticalement ou horizontalement (on parle de cases adja-centes). Dans l’exemple de la figure 2.5, entre les cases de la deuxieme et latroisieme colonne seule la variable a change. Le tableau peut etre vu comme unhypercube ou chaque sommet correspond a un point de la fonction. Deux som-mets sont adjacents s’il existe dans l’hypercube une arete entre eux (Cf. Figure2.4).

version en ligne - [PDF Document] (42)

34 Algebre de Boole et fonctions booleennes

(0,0,0)

(1,1,1)

(1,0,0)

(1,0,1)

(0,1,0)

(1,1,0)

(0,1,1)

a

c

b

(0,0,1) 00 01 11 10

1

O O

O

*

(a) (b)

Fig. 2.4 – a) Representation sur un hypercube a 3 dimensions d’une fonction a troisvariables a, b et c. b) Presentation du tableau de Karnaugh associe ; les casesmarquees d’un O sont adjacentes a la case marquee d’une etoile.

cdab

1

00 01 11 10

00

01

11

10

0 0 1 1

1 1 0 0

00 0 0

a.d

0 0 1

a.c.d

Fig. 2.5 – Un tableau de Karnaugh a 4 variables

3.2.2 Obtention d’une somme de monomes a partir d’un tableaude Karnaugh

En dimension 2, les colonnes et lignes d’un tableau de Karnaugh sontagencees de telle facon qu’un monome de la fonction corresponde a un rectanglede 2n cases adjacentes portant la valeur 1. Un tel regroupement de cases cor-respond a la simplification d’une somme de monomes en un seul monome. Lescases de la premiere ligne (resp. colonne) sont adjacentes a celle de la derniere.Ainsi les 4 cases des coins d’un tableau de Karnaugh a 4 variables peuventaussi former un monome. Une fois les regroupements effectues l’obtention desvariables du monome se fait aisem*nt. Ce sont celles qui ne changent pas devaleur entre les differentes cases correspondant au monome.

Sur l’exemple de la figure 2.5, le monome correspondant au regroupementde 4 cases est a.d puisque a possede la valeur 1 pour ces 4 cases et d possedela valeur 0 pour ces 4 cases. Il correspond a la simplification suivante a partirdes 4 monomes canoniques : a.b.c.d+a.b.c.d+a.b.c.d+a.b.c.d = a.b.d.(c+ c)+

version en ligne - [PDF Document] (43)

3. Representation des fonctions booleennes 35

abcd

abcd

e=1e=0

00 01 11 10

00

01

11

10

1

1 001

00 0

01

01 1

1

00 01 11 10

00

01

11

10

1

1 1

1

00 0

1

00

1

1

Fig. 2.6 – Un tableau de Karnaugh a 5 variables

a.b.d.(c + c) = a.b.d + a.b.d = a.d.(b + b) = a.d.Ce type de representation est bien adapte aux fonctions de 2 a 5 variables.

Les fonctions a 5 variables peuvent etre representees sur deux tableaux deKarnaugh a 4 variables (l’un pour une des variables a 0, l’autre pour cettememe variable a 1). Deux cases situees a la meme place sur les 2 tableaux sontadjacentes. Sur la figure 2.6, les 2 regroupements grises sont un seul monome :a.c.d. Il correspond a la simplification a partir des 4 monomes canoniquessuivants : a.b.c.d.e+ a.b.c.d.e+ a.b.c.d.e+ a.b.c.d.e = a.c.d.e.(b+ b)+ a.c.d.e.(b+b) = a.c.d.e + a.c.d.e = a.c.d.(e + e) = a.c.d.

L’expression polynomiale de la fonction definie par les tableaux de Kar-naugh de la figure 2.6 est a.c.d + a.c.e + a.d.e + a.b.c.d.

On peut proceder de la meme maniere pour des fonctions a 6 variables endessinant 4 tableaux a 4 variables, au-dela cela devient inextricable.

3.2.3 Obtention d’un produit de monaux

On peut obtenir facilement une forme composee des monaux d’une fonction(forme duale) a partir de son tableau de Karnaugh. Pour cela on regroupe lescases adjacentes comportant des 0. Les variables du monal sont celles qui nechangent pas mais sont donnees sous forme complementee par rapport a leurvaleur.

L’expression algebrique sous forme produit de monaux de la fonction fdefinie par le tableau de Karnaugh de la figure 2.7 est : f(a, b, c) = (a+c)(b+c).

3.3 Graphes de decision binaire

Les graphes de decision binaire (en anglais Binary Decision Diagram :BDD) ont ete introduits par Akers et Bryant dans les annees 80 ([Bry86]).Ils sont utilises dans les outils de C.A.O. de synthese logique depuis une di-

version en ligne - [PDF Document] (44)

36 Algebre de Boole et fonctions booleennes

0 0 0 1

11 1 10

1

00 01 11 10cab

b + ca + c

Fig. 2.7 – Monaux sur un tableau de Karnaugh

f

1

xi

fxi fxi

Fig. 2.8 – La decomposition de Shannon representee par un arbre binaire

zaine d’annees. Ils permettent de representer et de manipuler des fonctionsbooleennes de grande taille.

Nous allons definir tout d’abord les arbres de Shannon, un BDD etantun graphe acyclique oriente ayant les memes chemins que l’arbre de Shan-non associe mais dans lequel il n’y a pas de redondances. Tout l’interet desBDD est que l’on sait les construire, a cout algorithmique interessant, a partird’une autre representation (par exemple, une forme algebrique) sans avoir aconstruire l’arbre de Shannon (Cf. Paragraphe 4.3).

3.3.1 Arbre de Shannon

On peut representer la decomposition de Shannon par un arbre binaire oula racine est etiquetee par la variable de decomposition, le fils droit par lecofacteur positif et le fils gauche par le cofacteur negatif (Cf. Figure 2.8).

Si l’on itere la decomposition de Shannon avec cette representation sur lesdeux cofacteurs, pour toutes les variables de f , on obtient un arbre binaire,appele arbre de Shannon, dont les feuilles sont les constantes 0 et 1 et lesnoeuds sont etiquetes par les variables de la fonction (Cf. Figure 2.9-a sanstenir compte des parties grisees).

Un tel arbre est une representation equivalente a la table de verite de lafonction. Les valeurs de la fonction se trouvent sur les feuilles de l’arbre. Pourune valeur donnee de la fonction, la valeur de chaque variable est donnee parl’etiquette de l’arc emprunte pour aller de la racine a la feuille correspondante.Sur l’exemple de la figure 2.9-a, la fonction f a comme premiere forme deLagrange : f(a, b, c) = a.b.c + a.b.c + a.b.c + a.b.c + a.b.c.

Une fois fixe un ordre total sur les variables, etant donne l’unicite de ladecomposition de Shannon, la representation sous forme d’arbre de Shannon

version en ligne - [PDF Document] (45)

3. Representation des fonctions booleennes 37

f

1101

c c

bb

a

f

001 1 1 0 1 1

a

bb

c c c c

Fig. 2.9 – L’arbre de Shannon d’une fonction f a 3 variables a, b, c avec l’ordre : a <<b << c et le resultat de la mise en commun de 3 sous-arbres identiques.

est unique.

3.3.2 Redondance dans les arbres de Shannon

On definit la taille d’un arbre de Shannon par le nombre de ses noeuds.Un arbre de Shannon est de taille 2n − 1, n etant le nombre de variables de lafonction representee.

Il existe dans cette representation des redondances. Par exemple, certainssous-arbres sont identiques. La figure 2.9-b montre la mise en commun de troissous-arbres identiques (ceux qui sont en grises sur la partie a de la figure).

En considerant les feuilles comme des sous-arbres elementaires, le graphene possede plus qu’un seul noeud a 1 et un seul noeud a 0. Pour l’exemple dela figure 2.9 on obtient le graphe de la figure 2.10-a.

On peut egalement eliminer les noeuds tels que tous les arcs sortants ont lameme cible. Sur l’exemple precedent, on supprime ainsi deux noeuds (Cf. Fi-gure 2.10-b).

Le graphe sans redondance est appele graphe de decision binaire reduit.Dans le cas ou il possede le meme ordre de decomposition des variables surtous ses chemins, on parle de ROBDD (en anglais Reduced Ordered BDD). UnROBDD est encore canonique. La taille effective du ROBDD depend de l’ordrechoisi pour les variables. Un probleme est de trouver un ordre optimal.

D’autres methodes de simplification de BDD consistent a ajouter des infor-mations supplementaires sur les arcs, on parle alors de BDD types. Le lecteurpourra trouver des informations detaillees sur ces methodes dans [Bry86].

version en ligne - [PDF Document] (46)

38 Algebre de Boole et fonctions booleennes

f

a

b

c c

b

1 0

f

a

b

c c

b

1 0

f

a

c

b

01

(b)(a)

Fig. 2.10 – a) La mise en commun des feuilles a 1 et a 0. b) La suppression de noeudsqui n’apportent pas d’information.

4. Manipulation de representations

de fonctions booleennes

Un circuit est en general specifie par une fonction booleenne. Nous ver-rons dans le chapitre 8 comment peut etre realise le processus de synthesed’une fonction booleenne vers une technologie cible. Selon les outils, la formede depart de la fonction dans ce processus influe enormement sur la formedu circuit resultant et en particulier sur ses performances en terme de rapi-dite de calcul, surface en millimetres carres, consommation electrique, etc. Cescriteres de performance peuvent etre traduits de facon plus ou moins precise encriteres simples d’optimisation sur les formes des fonctions booleennes. Nousjustifierons ces criteres au chapitre 8.

Nous indiquons dans ce paragraphe quelques formes particulieres etquelques methodes pour manipuler l’expression d’une fonction booleenne ades fins d’optimisation en vue d’une implementation physique.

Les premieres methodes basees sur les tableaux de Karnaugh ont vu lejour dans les annees 50 [Kar53]. Elles permettent d’obtenir une forme po-lynomiale minimisee de facon manuelle. Des algorithmes permettant de trouverune forme polynomiale minimale ont ensuite ete developpe dans les annees 60et 70 [Kun65, Kun67]. Devant l’augmentation de la complexite des fonctions etdes formes necessaires pour une implementation dans des technologies de plusen plus variees, des methodes basees sur des representations plus compactes,en particulier graphe de decision binaire, ont vu le jour depuis.

version en ligne - [PDF Document] (47)

4. Manipulation de representations de fonctions booleennes 39

4.1 Formes particulieres pour l’expression d’unefonction booleenne

La plupart des technologies cibles actuelles (Cf. Chapitre 8) necessitent desdecompositions des fonctions en expressions d’une forme particuliere.

Pour certaines cibles technologiques une forme non polynomiale, appeleeforme factorisee, peut etre necessaire. Le critere de minimisation est le nombrede litteraux apparaissant dans l’expression de la fonction. Par exemple, laforme algebrique de la fonction : f(a, b, c, d) = a.(b.(c + d)) + a.b possede6 litteraux. Des methodes ont ete mises au point permettant d’automatiserla recherche de formes factorisees a nombre de litteraux minimal. Le lecteurpourra trouver des details sur ces methodes dans [BRWSV87]. Il est a noter queces methodes sont aujourd’hui souvent employees sur des formes en ROBDDs.

On peut vouloir aboutir a une representation de forme quelconque mais anombre de variables limite, par exemple, un ensemble de fonctions d’au plus8 variables. On peut souhaiter une forme polynomiale a nombres de monomeset de variables limites, par exemple, un ensemble de fonctions d’au plus 10monomes possedant chacun au plus 6 variables. Il peut aussi etre necessaire derepresenter les fonctions avec un ensemble de formes fixees. Ce sont en generaldes formes de petite taille (nombre de variables inferieur a 6) avec des formespolynomiales ou factorisees fixees strictement. On parle alors de bibliotheque.On devra par exemple aboutir a un ensemble de fonctions possedant une desformes suivantes : a + b, a.b, a.b, a.b + a.c ou a.b + a.b.

Le probleme est donc dans tous les cas de partir d’une fonction booleenneet d’aboutir a un ensemble de fonctions respectant la ou les formes imposeespar la technologie cible. Des algorithmes propres a chaque technologie ont etedeveloppes.

Les criteres d’optimisation sont alors le nombre de fonctions (qui est lie a lasurface du circuit resultant) et le nombre d’etages de sous-fonctions imbriquees(qui est lie au temps de calcul du circuit). Le nombre d’etages maximal estappele chemin critique.

Exemple E2.3 Soit la fonction f definie par l’expression algebrique :f(a, b, c, d) = a.b.c + a.b.c + c.d + c.d. Regardons les solutions auxquelles onpeut aboutir avec des formes cibles differentes.

Si l’on veut aboutir a des fonctions possedant au plus trois variables :f(a, b, c, d) = SF + c.d + c.d avec SF = a.b.c + a.b.c. Le nombre de litterauxest 11. Le nombre de fonctions imbriquees maximal est egal a 2 : (f, SF ). Unenouvelle fonction appelee sous-fonction SF a ete introduite pour parvenir aun ensemble de fonctions respectant le critere.

Si l’on veut aboutir a des fonctions possedant au plus deux monomes detrois variables : f(a, b, c, d) = SF1 + SF2 avec SF1 = a.b.c + a.b.c et SF2 =c.d + c.d. Deux sous fonctions ont ete introduites. Le nombre de litteraux est12 . Le chemin critique est egal aussi a 2.

version en ligne - [PDF Document] (48)

40 Algebre de Boole et fonctions booleennes

Si l’on veut aboutir a des fonctions de la forme a + b ou a.b ou a.b oua.b + a.c ou a.b + a.b : f(a, b, c, d) = SF1 + SF2 avec SF1 = a.SF3 + a.SF4 etSF2 = c.d + c.d. De plus SF3 = b.c et SF4 = b.c. Le nombre de litteraux est14. Le chemin critique est egal ici a 3 (f, SF1, SF3).

4.2 Obtention d’une forme polynomiale

De nombreuses technologies de realisation des circuits necessitent une formepolynomiale. Le critere d’optimisation est alors le nombre de monomes ap-paraissant dans la forme polynomiale puis le nombre de variables dans cesmonomes. Un certain nombre de techniques de simplification respectant cecritere ont ete mises au point et integrees dans les outils modernes de CAO.

Nous montrons ici comment obtenir une forme polynomiale reduite a partird’un tableau de Karnaugh. Cette methode peut etre pratiquee a la main pourdes fonctions ayant moins de 6 variables.

4.2.1 Definitions

Monome premier : un monome m est dit premier pour une fonction f sil’on a : m ≤ f et s’il n’existe pas m′ 6= m tel que m ≤ m′ et m′ ≤ f .

Base : on appelle base d’une fonction booleenne une forme polynomiale de lafonction composee uniquement de monomes premiers. On appelle base completela base composee de tous les monomes premiers de la fonction.

Base irredondante : une base est dite irredondante si, des que l’on otel’un des monomes qui la composent, on n’a plus une base de la fonction. Unefonction booleenne peut avoir plusieurs bases irredondantes.

Le but de la minimisation est donc d’obtenir une base irredondantepossedant le minimum de monomes.

4.2.2 Obtention d’une forme polynomiale minimale a partir d’untableau de Karnaugh

On peut obtenir de facon tres visuelle les monomes premiers sur un tableaude Karnaugh a 2 dimensions en cherchant les paves de cases adjacentes valant1, les plus grands possible.

Exemple E2.4 La fonction representee sur la figure 2.11 possede 5monomes premiers : M1 = b.c, M2 = b.c.d, M3 = a.b.d, M4 = a.c.d,M5 = a.b.c. Elle possede 2 bases irredondantes : M1 + M2 + M4 + M5et M1 + M2 + M3. L’expression minimale (en nombre de monomes) de lafonction est : f = b.c + b.c.d + a.b.d

version en ligne - [PDF Document] (49)

4. Manipulation de representations de fonctions booleennes 41

abcd

00 01 11 10

00

01

11

10

1 0

1 0

00

1 1

10

01

1 1

Fig. 2.11 – La base complete d’une fonction booleenne

4.2.3 Probleme de la minimisation polynomiale

Le nombre de monomes premiers et de bases irredondantes d’une fonctionpeut etre tres grand et une solution tres longue a trouver. Le probleme de ladetermination d’une base irredondante minimale est un probleme NP-complet.La methode consiste a trouver la base complete puis a extraire toutes les basesirredondantes par essais successifs de suppression de chaque monome. Devantl’accroissem*nt de la taille des fonctions a manipuler, les outils de CAO sontpourvus de minimiseurs qui sont bases sur des algorithmes a base d’heuristiquesdiverses.

Cas des fonctions phi-booleennes : Les monomes premiers d’une fonctionphi-booleenne sont ceux de sa borne superieure. Une base d’une fonction phi-booleenne est une somme de monomes premiers telle que tous les points dela borne inferieure sont couverts par au moins un de ses monomes premiers.La methode pour trouver une forme minimale d’une fonction phi-booleenneconsiste a trouver tous les monomes premiers de la borne superieure puis atrouver toutes les bases irredondantes par rapport a sa borne inferieure.

Une fonction phi-booleenne est une fonction totale codant une fonctionpartielle et telle que chacun des Φ correspond a une valeur indifferente. On peutpar consequent associer a ce Φ la valeur 1 ou bien la valeur 0. Pratiquement,on va remplacer certains Φ par des 0 et d’autres par des 1 de facon a obtenirun minimum de monomes.

Exemple E2.5 Le monome represente sur le tableau de Karnaugh de lafigure 2.12-a n’est pas premier pour f car il est plus petit que a.c qui est unmonome de la borne superieure. Les deux monomes a.c et b.c.d de la figure2.12-c suffisent pour couvrir les points de la borne inferieure.

version en ligne - [PDF Document] (50)

42 Algebre de Boole et fonctions booleennes

abcd

abcd

abcd

00 01 11 10

00

01

11

10 0

10

00 01 11 10

00

01

11

10

1 0

10

1

1

10

Φ

Φ Φ

00 01 11 10

00

01

11

10

1 1 0 0

0 1 1 0

11

1 10

(b)(a) (c)

1 Φ

1

00

1 1 0

0Φ Φ

Fig. 2.12 – a) Une fonction Phi-Booleenne f . b) La base complete de la borne superieurede f . c) La seule base irredondante de f .

Cas des fonctions generales : Dans le cas d’une fonction generale F =(f1, f2, . . . , ft) de Bn dans Bt, le critere de minimisation est le nombre demonomes de l’ensemble des t fonctions simples qui composent la fonctiongenerale.

Un monome general M est un couple (m, (v1, . . . , vt)) ou m est un monomed’une des fonctions fi (i = 1, . . . , t) et (v1, . . . , vt) est un vecteur booleen. Ildefinit la fonction generale : (v1.m, . . . , vt.m). Par exemple, le monome generalassocie a un monome m ne figurant que dans l’expression de la fonction f2

est : (m, (0, 1, 0, . . . , 0)) ; le monome general associe au monome p figurant dansl’expression de chacune des fonctions fi (i = 1, . . . , t) est : (p, (1, 1, . . . , 1)).

Soient M et M ′ deux monomes generaux : M = (m, (v1, v2, . . . , vt)) etM ′ = (m′, (v′1, v

′2, . . . , v

′t)).

On definit un ordre sur les monomes generaux : M ≤ M ′ ⇔ (m ≤ m′) et(v1, v2, . . . , vt) ≤ (v′1, v

′2, . . . , v

′t).

De la meme facon que pour une fonction simple, on definit les monomesgeneraux premiers. Un monome general M est dit premier pour une fonctiongenerale F si l’on a : M ≤ F et s’il n’existe pas M ′ 6= M tel que M ≤ M ′ etM ′ ≤ F .

La methode de minimisation en utilisant des tableaux de Karnaugh consistea prendre tous les regroupements de cases maximaux sur plusieurs tableaux ala fois. Un regroupement de plusieurs cases dans un des tableaux de Karnaughpeut ne pas etre maximal dans ce tableau mais correspondre a un monomepremier general parce qu’il apparaıt dans plusieurs tableaux a la fois.

Pour obtenir tous ces monomes premiers generaux on cherche d’abord tousles monomes premiers de chaque fonction composant la fonction generale. Onfait ensuite tous les produits possibles de ces monomes entre eux, le produitde deux monomes generaux etant defini par : M.M ′ = (m.m′, (v1 + v′1, v2 +

version en ligne - [PDF Document] (51)

4. Manipulation de representations de fonctions booleennes 43

abcd

abcd

f2f1

00 01 11 10

00

01

11

10

1

1 001

00 0

01

01 1

1

00 01 11 10

00

01

11

10

1

1 1

1

00 0

1

00

1

1

Fig. 2.13 – Les bases completes des fonctions f1 et f2

abcd

abcd

f2f1

M1

00 01 11 10

00

01

11

10

1

1 001

00 0

01

01 1

1

00 01 11 10

00

01

11

10

1

1 1

1

00 0

1

00

1

1

M2

M7

M6

M5

M3

M4

Fig. 2.14 – La base complete de la fonction generale F = (f1, f2)

v′2, . . . , vt + v′t)). Enfin, on ne garde que les monomes les plus grands.

Exemple E2.6 Sur la figure 2.13 sont representees les deux bases completesdes fonctions f1 et f2. Ces deux bases sont irredondantes.

Sur la figure 2.14 est representee la base complete de la fonction generaleF = (f1, f2). Les monomes grises sont des monomes generaux premiers obtenuspar produits des monomes : (a.b.c.d, (1, 0)) et (a.b.c, (0, 1)) pour (a.b.c.d, (1, 1))et (a.d, (1, 0)) et (c.d, (0, 1)) pour (a.c.d, (1, 1)).

Dans cet exemple, le monome general M7 = (a.c.d, (1, 1)) est premier car iln’existe pas de monome plus grand que a.c.d a la fois dans f1 et f2. Le monomegeneral M5 = (a.d, (0, 1)) est premier car dans f2, il n’existe pas de monomeplus grand que (a.d) et (a.d) n’est pas un monome de f1. La fonction generaleF = (f1, f2) possede 7 monomes premiers generaux M1 = (a.d, (1, 0)), M2 =(a.c, (1, 0)), M3 = (c.d, (0, 1)), M4 = (a.b.c, (0, 1)), M5 = (a.d, (0, 1)), M6 =(a.b.c.d, (1, 1)), M7 = (a.c.d, (1, 1)). Les deux bases irredondantes generales de

version en ligne - [PDF Document] (52)

44 Algebre de Boole et fonctions booleennes

abcd

abcd

f2f1

00 01 11 10

00

01

11

10

1

1 001

00 0

01

01 1

1

00 01 11 10

00

01

11

10

1

1 1

1

00 0

1

00

1

1

Fig. 2.15 – La base irredondante minimale de la fonction generale F

F sont : M1+M2+M3+M5+M6 et M2+M5+M6+M7 et les 4 monomesde la base irredondante minimale : M6, M7, M5 et M2.

4.3 Obtention de BDDs reduits ordonnes

L’utilisation des BDDs est aujourd’hui largement repandue car c’est unerepresentation tres compacte et particulierement adaptee a l’obtention deformes factorisees et a la decomposition en sous-fonctions.

Nous donnons ici les principes de base pour construire un BDD reduit or-donne a partir d’une expression booleenne algebrique. Le lecteur pourra trouverla justification et des details d’implementation logicielle de cette constructiondans [KB90].

Nous avons vu qu’un BDD est un graphe de Shannon dans lequel il n’y apas de redondances. Il s’agit de construire le BDD sans construire l’arbre deShannon complet. Pour cela, on construit recursivement le BDD en evitant defabriquer un sous-arbre deja construit.

Soit un ordre donne sur les variables de la fonction. On effectue a chaqueetape de la recursion la decomposition de Shannon suivant la variable cou-rante et l’on construit le BDD a partir des BDDs des cofacteurs positif etnegatif de f. Pour fixer les idees, nous donnons figure 2.16 un algorithme despecification fonctionnelle de la construction d’un BDD a partir d’une expres-sion algebrique booleenne. Lors de la mise en oeuvre de cet algorithme, il fauteviter de construire deux fois le meme objet.

La fonction RepCanonique fabrique un nouveau BDD a partir d’une variableet de deux BDDs differents, si le BDD a construire n’existe pas, dans le cascontraire elle donne le graphe correspondant au BDD qui existait deja. Pourla mettre en oeuvre, il faut definir une table avec adressage disperse (hashcodeen anglais), la fonction de dispersion portant sur la variable et les pointeursdes BDD fils. La comparaison de deux BDDs consiste en la comparaison despointeurs associes aux racines des graphes.

version en ligne - [PDF Document] (53)

4. Manipulation de representations de fonctions booleennes 45

Notations :/1\ : le BDD representant la valeur 1/0\ : le BDD representant la valeur 0/G, r, D\ : un arbre binaire de racine r, de fils gauche G et de fils droit D

Fonction principale :LeBdd (e : une expression algebrique) −→ un BDD{ e etant une expression booleenne, LeBdd(e) est le BDD associe a e. }LeBdd (1) = /1\LeBdd (0) = /0\LeBdd (e1 op e2) = TBop (LeBdd(e1), LeBdd(e2))LeBdd (op e) = TUop (LeBdd(e))

Fonctions intermediairesTBop (b1, b2 : deux BDD) −→ un BDD{ b1 et b2 sont deux BDD. Il existe une fonction TBop par operateur bi-naire traite : elle fabrique le BDD resultat de l’application de l’operateuren question aux deux BDD b1 et b2. }

TUop (b : un BDD) −→ un BDD{ b est un BDD. Il existe une fonction TUop par operateur unaire prisen compte : elle produit le BDD resultat de l’application de l’operateurau BDD b }

RepCanonique (x une variable ; b1,b2 : deux BDD) −→ un BDD{ RepCanonique(x, b, b) = b. x etant une variable, b1 et b2 deux BDDsdifferents, RepCanonique(x, b1, b2) est le BDD de racine x, de filsgauche b1 et de fils droit b2. Ce BDD n’est construit que s’il n’existepas dans l’ensemble des BDD deja construits }

Exemple pour l’operateur OR{ On applique les regles de simplification triviales associees a l’operateuror : vrai or e = vrai, faux or e = e, e or e = e }TBor (1,b) = /1\TBor (0,b) =bTBor (b, 1) = /1\TBor (b, 0) = bTBor (b, b) = bTBor (b1, b2) =

selon b1, b2 { b1 6= b2 }/Ax, x, Ax\ = b1 et /Bx, x, Bx\ = b2 :

RepCanonique (x, TBor(Ax, Bx), TBor(Ax, Bx))/Ax, x, Ax\ = b1 et /By, y, By\ = b2 :

si x << y alors RepCanonique (x, TBor(Ax, b2), TBor(Ax, b2))sinon RepCanonique (y, TBor(b1, By), TBor(b1, By))

Fig. 2.16 – Construction d’un BDD a partir d’une expression algebrique booleenne

version en ligne - [PDF Document] (54)

46 Algebre de Boole et fonctions booleennes

5. Exercices

E2.7 : Proposition logiqueUn etudiant dit : je vais faire du ski s’il fait beau ou s’il ne fait pas beau etque je n’ai pas d’examen a reviser. Cet etudiant est-il serieux ? sportif ? Pourrepondre donner une forme plus simple de cette proposition logique.

E2.8 : Expression booleenne algebrique de la majoriteTrois personnes doivent voter bleu ou rouge. Demontrer en passant par lesexpressions booleennes algebriques correspondantes que si la majorite est pourle bleu alors, s’ils changent tous d’avis, la majorite sera pour le rouge.

E2.9 : De MorganDemontrer les formules de De Morgan a partir des tables de verite des fonctionssomme, produit et complement.

E2.10 : Regles de simplification booleenneDemontrer les regles de simplification suivantes a partir des axiomes del’algebre de Boole.

a + a.b = aa + a.b = a + ba.b + a.b = ba.b + a.c + b.c = a.b + a.c

E2.11 : Expression booleenneDonner une expression booleenne de la fonction f(a, b, c) qui vaut 1 si et seule-ment si la majorite de ses trois variables vaut 1.

E2.12 : Ou exclusifDemontrer que l’operateur ou-exclusif (note ⊕) defini par x1 ⊕ x2 = x1.x2 +x1.x2 est associatif.

E2.13 : Theoreme de ShannonDemontrer la premiere forme du theoreme de Shannon.

E2.14 : Formes de LagrangeObtenir la deuxieme forme de Lagrange de la fonction f(x1, x2) = x1.x2+x1.x2

a partir de la deuxieme forme du theoreme de Shannon.

E2.15 : Poids d’un vecteur booleenOn appelle poids d’un vecteur booleen le nombre de 1 de ce vecteur. le vecteur(0, 1, 1, 0) a un poids de 2. Donner des expressions booleennes des fonctionssimples p2, p1 et p0 qui correspondent au codage en base 2 du poids d’un vec-teur de 4 variables booleennes x1, x2, x3, x4.

version en ligne - [PDF Document] (55)

5. Exercices 47

a

d

c

f

e

bg

Fig. 2.17 – Representation du chiffre 3 sur un afficheur 7 segments

E2.16 : Tableau a 4 variablesDonner une base irredondante minimale de la fonction f(a, b, c, d) = a.b.c +a.b.d + a.b.d + b.c.d + a.b.c + a.c.d + a.c.d .

E2.17 : Tableau a 5 variablesDonner une base irredondante minimale de la fonction f(a, b, c, d, e) = a.b +b.c.e + a.b.d.e + a.b.d.e + a.c.d.e.

E2.18 : Afficheur 7 segmentsSoit un afficheur a cristaux liquides comportant 7 segments, comme il y en asur la plupart des calculettes.

On veut realiser les 7 fonctions booleennes (a, b, c, d, e, f , g) a 4 variables(e4, e3, e2, e1) qui correspondent aux 7 segments (Cf. Figure 2.17). La fonctionbooleenne vaudra 1 si le segment doit etre allume pour la representation duchiffre decimal donne en binaire par (e4, e3, e2, e1). Par exemple le chiffre 3(e3e2e1e0 = 0011) en entree donne a = b = c = g = d = 1.

Ces 7 fonctions sont phi-booleennes car on ne veut representer que leschiffres decimaux (0...9). Sur 4 bits on a aussi les entrees de 10 a 15 quicorrespondent donc a des points a Φ pour les 7 fonctions. Attention le 6 etle 9 pouvant avoir differentes representations sur l’afficheur, nous choisirons icide representer le 6 avec le segment a allume et le 9 avec le segment d allume.

Donner les tableaux de Karnaugh de ces 7 fonctions. Donner une baseirredondante minmale generale de la fonction generale F = (a, b, c, d, e, f, g).

Donner les ROBDDs de a, b et c avec differents ordres sur les variables.

version en ligne - [PDF Document] (56)

48 Algebre de Boole et fonctions booleennes

version en ligne - [PDF Document] (57)

Chapitre 3

Representation des grandeurs

Dans le chapitre 1 nous avons vu que l’ordinateur ne traite pasveritablement l’information mais ses representations. La representation del’information se fait a travers un code. Pour des raisons technologiques quiapparaissent dans le chapitre 7 la representation de toute information est unvecteur de booleens, ou bits. Les bits sont identifies individuellement, le plussouvent par un simple numero. On parle de representation digitale de l’infor-mation. Physiquement un booleen, ou bit, est l’etat d’un fil electrique. L’ordi-nateur etant alimente par un generateur continu, la tension basse (la masse)represente le 0 (ou Faux), la tension haute (l’alimentation) represente le 1 (ouVrai). Il existe cependant de nombreuses applications ou des appareils de me-sure donnent des tensions electriques proportionnelles a la grandeur mesuree.On parle dans ce cas de representation analogique de l’information. Pour etretraitees par un ordinateur standard (on dit numerique, ou digital, par oppo-sition a analogique) ces tensions sont converties par des circuits specifiques(Convertisseurs Analogiques Numeriques, ou, a contrario, Numeriques Analo-giques).

Dans ce chapitre, nous donnons dans le paragraphe 1. les elements dece que signifie un codage par des booleens. Nous etudions ensuite lesrepresentations des nombres, et, ce qui va avec, les techniques de calculsur ces representations. Nous distinguons la representation des naturels(au paragraphe 2.), et celle des entiers relatifs (au paragraphe 3.). Larepresentation de nombres reels est brievement evoquee dans le para-graphe 6., celle des caracteres dans le paragraphe 5. La notion de taillede la representation est presente en permanence.

1. Notion de codage d’informations

1.1 Codage binaire

A un instant donne N fils electriques sont chacun a 0 ou a 1. Il est necessaired’identifier chacun des fils par un numero, par exemple entre 0 et N − 1. L’en-

version en ligne - [PDF Document] (58)

50 Representation des grandeurs

semble des N fils peut se trouver dans une des 2N configurations possibles. LesN fils peuvent representer 2N informations differentes. On parle aussi des 2N

valeurs possibles d’une information. Il y a la une difference entre le vocabulairecourant et un vocabulaire technique.

Pour evaluer le nombre de valeurs differentes representables sur N bits, ilest commode d’avoir en tete les valeurs des petites puissances de 2 et les ordresde grandeurs des grandes : 20 = 1 ; 21 = 2. Les puissances suivantes sont4, 8, 16, 32, 64, 128, 28 = 256 et 210 = 1024. Comme 1000 est proche de1024, il est facile de completer la suite : 210 ≈ 103, 220 ≈ 106, 230 ≈ 109,240 ≈ 1012.

Les prefixes d’unites correspondants sont kilo, mega, giga, tera. Un kilo-bit correspond donc a 1024 bits et non a 1000 bits.

Reperer un element parmi un ensemble de 256 elements suppose de le lo-caliser par un numero code sur 8 bits. Dans certains contextes ce numero estappele une adresse. Reperer un element parmi un ensemble de 4 giga-elementssuppose de le localiser par un numero code sur 32 bits.

La notation de logarithme a base 2 est parfois utilisee : si 2N = M, log2 M =N ; ainsi pour representer P valeurs differentes il faut au moins R bits, ouR est l’entier immediatement superieur au logarithme a base 2 de P . Ainsilog2 2048 = 11 et pour representer 2050 valeurs differentes il faut 12 bits.

La correspondance entre la representation par un vecteur de booleens et lavaleur se fait par une convention, un code. L’ensemble des valeurs codables estcaracteristique du domaine (nombres, couleurs...) Par exemple, si une gammede temperature va de - 10 a + 40 degres, et si la temperature est codee sur9 bits, la precision peut etre de l’ordre du dizieme de degre (29 = 512 codespossibles pour 50 degres). Si la temperature est codee sur 12 bits la precisionest de l’ordre du centieme (212 = 4096 codes possibles pour 50 degres).

1.2 Un exemple : le codage des couleurs

On trouve dans la documentation du micro-ordinateur Commodore 64 letableau de la figure 3.1 indiquant le code sur 4 bits b3b2b1b0 des 16 couleursaffichables par cette machine. On trouve dans la documentation de micro-ordinateurs PC (carte CGA) le tableau de la figure 3.2, donnant un autrecodage.

La question Comment est represente rouge ?, ou Que represente 0 0 1 0 ?n’a de sens que si le code est precise. De meme, la conversion d’un code al’autre n’a un sens que pour les couleurs qui sont representees dans les deuxcodes (brun, bleu pale, ...).

Les deux couleurs noir et cyan ont le meme codage dans les deux codes,ce qui est fortuit. Dans le deuxieme code, chaque bit a une interpretation. Lebit 3 correspond a la presence d’une composante pale, le bit 2 a la presenced’une composante rouge, le bit 1 au vert et le bit 0 au bleu. On trouve souventle sigle RGB (Red, Green, Blue) dans ce contexte. Une telle interpretation

version en ligne - [PDF Document] (59)

2. Les naturels 51

b3b2b1b0 b3b2b1b0 b3b2b1b0

0 0 0 0 noir 0 1 0 1 vert 1 0 1 0 rose0 0 0 1 blanc 0 1 1 0 bleu 1 0 1 1 gris fonce0 0 1 0 rouge 0 1 1 1 jaune 1 1 0 0 gris moyen0 0 1 1 cyan 1 0 0 0 orange 1 1 0 1 vert pale0 1 0 0 violet 1 0 0 1 brun 1 1 1 0 bleu pale

1 1 1 1 gris pale

Fig. 3.1 – Codage des couleurs du Commodore 64

b3b2b1b0 b3b2b1b0 b3b2b1b0

0 0 0 0 noir 0 1 0 1 violet 1 0 1 0 vert pale0 0 0 1 bleu 0 1 1 0 brun 1 0 1 1 cobalt0 0 1 0 vert 0 1 1 1 gris 1 1 0 0 rose0 0 1 1 cyan 1 0 0 0 noir pale 1 1 0 1 mauve0 1 0 0 rouge 1 0 0 1 bleu pale 1 1 1 0 jaune

1 1 1 1 blanc

Fig. 3.2 – Codage des couleurs pour PC, carte CGA

individuelle de chaque bit n’existe pas dans le premier code.

1.3 Codage 1 parmi n

Un codage particulier est utilise dans certaines applications materielles oulogicielles : le codage appele 1 parmi n. Pour ce code, on utilise autant de bitsque d’informations a coder. Pour reprendre l’exemple des couleurs, chacuneserait codee sur b15,.. b0, et chaque bit correspondrait alors a une couleur.

2. Les naturels

2.1 Representation des entiers naturels

2.1.1 Numeration de position

Les entiers naturels peuvent etre ecrits de differentes facons (voir parexemple [Ifr94]). Le systeme des Romains est encore present dans certainesnotations, les dates des livres par exemple.

La meilleure representation est la numeration de position dans une basechoisie. En base 10, ou systeme decimal, on choisit 10 symboles differents, les10 chiffres decimaux 0, 1, . . . , 9. Ils representent les valeurs des 10 premiersnaturels. Les naturels suivants s’ecrivent avec plusieurs chiffres : un chiffre desunites, un chiffre des dizaines, des centaines, des milliers, etc.

Si un naturel X s’ecrit en base β sur N chiffres xN−1 xN−2... x1 x0, lacorrespondance entre la valeur du naturel X et celles des chiffres est donnee

version en ligne - [PDF Document] (60)

52 Representation des grandeurs

par l’equation :

X =N−1∑i=0

βi × valeur(xi) ou, pour simplifier : X =N−1∑i=0

βixi

La correspondance est telle que l’ecriture d’un naturel dans une base donneeest unique. Dans la suite nous ne precisons plus que c’est toujours la va-leur du chiffre (et non le chiffre lui-meme) qui intervient dans les expressionsarithmetiques. En base β, sur N chiffres, tous les naturels compris au sens largeentre 0 et βN − 1 sont representables. Les nombres plus grands peuvent etrerepresentes par leur reste modulo βN . C’est ce qui se produit sur les compteurskilometriques des voitures : si le compteur a 5 chiffres, quand on a parcouru100 012 kilometres, le compteur marque 00 012. Une situation analogue a lieupour les angles ou on ne donne que le representant dans l’intervalle [0, 2.π[. Eninformatique on rencontre le terme de chiffre de poids faible, pour le chiffre desunites et, si un naturel est ecrit sur 7 chiffres, celui de chiffre de poids le plusfort pour le chiffre des millions. L’usage dans la vie courante est de ne pas ecrireles 0 en poids forts. A certains endroits, pour des raisons materielles, c’est uneobligation. Le compteur kilometrique des voitures par exemple. En informa-tique, on les ecrit tres souvent. Les machines ont un format pour representerles nombres, c’est-a-dire un nombre de chiffres pre-etabli. Quand ce nombre dechiffres est mal choisi, comme par exemple representer une date avec seulementdeux chiffres decimaux pour l’annee, les consequences sont ennuyeuses. Dansles documents ecrits ou il y a risque d’ambiguıte, on ecrit la base en indice. Labase elle-meme est alors ecrite en base decimale (ou base 10). Par exemple, lenombre qui s’ecrit 147 en base 10 s’ecrit 1042 en base 5 :

14710 = 100100112 = 1739 = 9316 = 10425 = 121103

Il existe une autre representation conventionnelle : le decimal code en bi-naire (DCB) dans laquelle chaque chiffre decimal est ecrit en binaire sur 4 bits.On a alors 14710 = 0001 0100 0111dcb.

Technique de conversion Pour montrer la technique de conversion d’unebase a une autre, prenons deux exemples.

– Passage de la base 10 a la base 5.

14710 = 2910 ×5 + 2

= (5 ×5 + 4 )× 5 +2

= ((1 ×5) + 0 )× 5 +4)× 5 +2

= (((0× 5) + 1 ) ×5 +0)× 5 +4)× 5 +2

Les restes successifs dans la division par 5 sont 2, 4, 0 et 1. Le chiffre desunites est 2, celui de rang superieur est 4, etc. 14710 = 10425, c’est-a-dire :14710 = 1× 53 + 0× 52 + 4× 51 + 2× 50.

version en ligne - [PDF Document] (61)

2. Les naturels 53

– Passage de la base 2 a la base 10.

100100112 = 1× 27 + 1× 24 + 1× 21 + 1× 20

100100112 = 1× 12810 + 1× 1610 + 1× 2 + 1 = 14710

2.1.2 Representations binaire, hexadecimale

Ce principe de la numeration de position peut s’appliquer avec une baseentiere quelconque superieure ou egale a 2. Si la base est 2 on parle denumeration binaire, pour la base 8 de numeration octale, pour la base 16d’hexadecimal. En base 2, sur N chiffres, tous les naturels compris au senslarge entre 0 et 2N − 1 sont representables. On pourrait parler de chiffre desdeuzaines, des quatraines, ou des seizaines mais ces mots ne sont pas dans lelexique courant. L’interet de la base 2 est que les deux chiffres 0 et 1 peuventfacilement etre representes par les deux booleens 0 et 1, ou par les etats baset haut d’un fil electrique. Ce codage des nombres est le seul utilise dans lesordinateurs. Nous emploierons les termes de chiffres binaires ou de bits indis-tinctement.

Les 16 chiffres hexadecimaux sont 0, 1, . . . , 8, 9, A,B,C, D, E, Frepresentant les valeurs des naturels de 0 a 15. On a evidemmentvaleur(A) = 10, . . ., valeur(F ) = 15.

On peut aisem*nt convertir un nombre ecrit en base 16 vers la base 2et reciproquement. Il suffit pour cela de convertir par tranches de 4 chiffresbinaires, ou d’un chiffre hexadecimal. Ainsi dans l’exemple suivant figurentles deux ecritures l’une en dessous de l’autre :

3 4 7 B 80011 0100 0111 1011 1000

En effet le chiffre hexadecimal B represente le naturel 1110, qui en binaires’ecrit 1011, et 347B816 = 001101000111101110002.

On remarque la une analogie avec le passage de l’ecriture decimale al’ecriture en langue naturelle. Ici figurent l’ecriture d’un nombre en basedecimale et son ecriture en francais (les espaces ne sont pas significatifs) :

104 730 105cent quatre millions sept cent trente mille cent cinq

2.2 Operations sur les vecteurs booleens representantles naturels

Etant donnes deux naturels A et B, representes respectivement par M etN bits, on cherche a trouver un procede de calcul, ou de fabrication, des bitsrepresentant A + B, A − B, A × B, . . . (une approche tres complete se trouvedans [Mul89]).

version en ligne - [PDF Document] (62)

54 Representation des grandeurs

Nous devons nous preoccuper du nombre de bits necessaires pourrepresenter le resultat du calcul. Pour la somme c’est max(M, N) + 1, pourle produit M + N . Pour simplifier ce probleme, nous supposerons, sauf men-tion contraire, que les deux nombres sont codes sur N bits, et que N est unepuissance de 2. Si ce n’est pas le cas, il est toujours possible de completer Aou B en poids forts. Si A et B sont codes sur 2p bits, A+B est code sur 2p +1bits et A×B est code sur 2p+1 bits. La somme de deux nombres codes sur Nchiffres est representable sur N + 1 chiffres. Le chiffre de poids fort de cettesomme est egal a 0 ou 1. Ceci est valable dans toutes les bases.

2.2.1 Extension et reduction de format

Si un naturel est code sur N bits et qu’il faille le coder sur M bits, avecM > N , il suffit d’ajouter des 0 en poids forts. A l’inverse, si la representationde C a k bits a 0 en poids forts, C peut etre represente sur k bits de moins.

Par exemple 000011002 = 11002.

2.2.2 Addition

A et B etant representes sur N bits, aN−1, . . . , a0, et bN−1, . . . , b0, la sommeS de A et B s’ecrit sur N + 1 bits sN , . . . , s0

Deux questions se posent : comment obtenir les si a partir des ai et des bi,et peut-on representer S sur N bits ?

Pour obtenir les chiffres de la somme, examinons brievement le procedepour la base 10 que l’on apprend a l’ecole : les ai et bi sont compris entre 0et 9. La base est 10. On applique un procede iteratif, en commencant par lespoids faibles, et en propageant une retenue d’etage (ou tranche) de 1 chiffreen etage de 1 chiffre vers les poids forts.

A chaque etage i le calcul du report 1 sortant repsi de l’etage est fonctiondes chiffres ai et bi de A et B a cet etage et du report entrant dans cet etagerepei. Le report entrant dans l’etage 0 est evidemment nul. Le report sortantde l’etage j, repsj est le report entrant de l’etage j+1 repe(j+1).

repsi = 1 si ai + bi + repei ≥ 10 etrepsi = 0 si ai + bi + repei < 10

le chiffre si de la somme a l’etage i est la somme modulo 10 de ai, bi et repei,c’est-a-dire :

si = ai + bi + repei − 10 si repsi = 1 etsi = ai + bi + repei si repsi = 0

1Nous emploierons le terme de report pour l’addition et, plus loin, celui d’emprunt pourla soustraction. La langue courante utilise le terme de retenue dans les deux cas.

version en ligne - [PDF Document] (63)

2. Les naturels 55

ai bi repei repsi = si =maj(ai, bi, repei) ⊕(ai, bi, repei)

0 0 0 0 00 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 1

Fig. 3.4 – Table d’addition

s

a

b

s

a

b

s

a

b

s

a

bN−1

N−1

N−1 0

reps(N−1)

j+1

j+1

j+1

j

j

j

e(j+1) sjrep = rep

1

1

1

s

a

b

repe0

Fig. 3.3 – Schema de principe d’un additionneur

En binaire le procede est identique mais les ai et bi valent 0 ou 1. Les deuxfonctions de calcul du report et du chiffre de somme sont definies pour destriplets de nombres 0 ou 1.

La fonction report sortant d’un etage d’addition binaire est la fonctionmajorite. On la note maj. maj(x, y, z) vaut 1 si et seulement si x + y + z ≥ 2.

La fonction calculant le chiffre de somme est la somme modulo 2 de 3entiers. On la note ⊕.

⊕(x, y, z) = (x + y + z) si maj (x, y, z) = 0⊕(x, y, z) = (x + y + z − 2) si maj (x, y, z) = 1.

Les tables d’addition pour un etage sont donnees par la figure 3.4.Pour l’addition de deux nombres a N bits, les formules sont donnees par

les equations suivantes qui utilisent les reports intermediaires ri ou ri+1 est laretenue sortante de l’etage numero i :

s0 = ⊕(a0, b0, 0) r1 = maj (a0, b0, 0)si = ⊕(ai, bi, ri) ri+1 = maj(ai, bi, ri) ∀i. 1 ≤ i ≤ N − 1

De plus, puisque la somme est sur N + 1 bits, sN = rN .

version en ligne - [PDF Document] (64)

56 Representation des grandeurs

Dans ce cas sN s’appelle souvent La retenue. Si on cherche a representer lasomme S sur N bits, ce n’est possible que si sN vaut 0. Si sN vaut 1, la sommeest trop grande et ne peut etre representee sur N bits.

Remarque : Dans les processeurs, apres une addition, ce bit de retenueest disponible dans le mot d’etat sous le nom de bit indicateur C (en anglaisreport se dit Carry). Il vaut 1 si la somme de deux naturels codes sur N bitsn’est pas representable sur N bits. On utilisera ce bit dans la programmationen langage machine au chapitre 12.

2.2.3 Multiplication et division entiere par une puissance de 2

On sait multiplier par 10 un nombre ecrit en base 10 en ajoutant un 0 enpoids faible de sa representation. Il en est de meme en base 2. Et si l’on ajoutedeux 0 en poids faible de l’ecriture binaire, on obtient l’ecriture binaire dunombre multiplie par 4. Le produit d’un nombre sur N bits par 2k s’ecrit surN + k bits, les k bits de poids faibles etant a 0.

On sait obtenir la representation decimale du quotient entier par 10 d’unnaturel en otant le chiffre des unites de sa representation decimale. De memepour la base 2, si l’on supprime 3 chiffres en poids faible, on obtient l’ecrituredu quotient entier par 8. Le quotient entier d’un nombre sur N bits par 2k

s’ecrit sur N − k bits.On sait obtenir la representation decimale du reste modulo 10 en ne gardant

que le chiffre des unites de la representation decimale. De meme pour la base 2,si l’on garde les 4 chiffres en poids faible, on obtient l’ecriture du reste modulo16. Le reste modulo 2k d’un nombre s’ecrit sur k bits.

Le tableau suivant illustre differentes multiplications et divisions entieres.Tous les nombres y sont ecrits en binaire sur 6 bits. Il y a donc parfois deszeros en poids forts.

Ecriture Ecriture Ecriture Ecriture Ecriturede N en de N en de N × 2 en de N/4 en de N mod 8 endecimal binaire binaire binaire binaire

5 000101 001010 000001 00010113 001101 011010 000011 00010129 011101 111010 000111 00010128 011100 111000 000111 00010035 100011 impossible 001000 000011

2.2.4 Multiplication generale

Si deux naturels A et B sont codes sur N bits, leur produit est code sur2 × N bits. Si N vaut 1, le produit de A et B est facile a calculer. Sinon,comme dans l’exercice E3.14 on decompose A et B en parties faible et forte.

version en ligne - [PDF Document] (65)

2. Les naturels 57

Le produit P est la somme des 4 produits partiels :

P1 = Afort ×Bfort × 2N/2 × 2N/2

P2 = Afort ×Bfaible × 2N/2

P3 = Afaible ×Bfort × 2N/2

P4 = Afaible ×Bfaible

Remarquons qu’effectuer l’addition de P1 et P4 est tres facile. L’un des deuxnombres n’a que des 0 la ou l’autre a des chiffres significatifs.

Une autre expression du produit reprend simplement l’ecriture binaire :puisque 1410 = 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20, on a aussi 1410 × 13 =1× 23 × 13 + 1× 22 × 13 + 0× 21 × 13 + 1× 20 × 13. On a vu que le calcul duproduit de 13 par une puissance de 2 revient a ecrire 1101 suivi du bon nombrede 0. La multiplication se reduit alors a une suite d’additions et de decalages.

2.2.5 Soustraction

La difference D = A−B de deux naturels A et B n’est definie que si A > B.

Remarque : Un probleme est celui de la detection des cas valides et in-valides. En informatique comparer deux nombres necessite de calculer leurdifference. On ne peut donc pas raisonnablement comparer deux nombresavant de calculer leur difference si elle existe. Dans un systeme informatique,on calcule toujours ce que l’on croit etre la difference, puis on se preoccupede savoir si la difference est representable ou non. Si oui, elle est le resultatobtenu.

Comme pour l’addition, l’operation se fait tranche par tranche, en com-mencant par les poids faibles et avec propagation d’un bit d’emprunt vers lespoids forts. Le calcul fait apparaıtre le bit d’emprunt a l’etage de poids plusfort. On peut produire une table de soustraction en base 2, analogue a la tabled’addition du paragraphe 2.2.2, tenant compte du bit d’emprunt entrant ee etfaisant apparaıtre le bit d’emprunt sortant es et le bit de resultat di (Cf. Fi-gure 3.5-(a)).

On a le resultat suivant : Si A et B sont codes sur N bits la difference estun naturel (c’est-a-dire A ≥ B) si et seulement si l’emprunt sortant de l’etagede rang N − 1 est nul.

Reprenons la table d’addition du paragraphe 2.2.2, en remplacantsystematiquement les bits de reports entrants et sortants par leurcomplementaire booleen. De meme remplacons le bit de l’operande B par soncomplementaire. On retrouve la table de la soustraction (Cf. Figure 3.5-(b)).

Si l’on applique l’algorithme d’addition avec A et le complementaire de Bet si l’on prend soin de complementer en entree et en sortie tous les bits dereport, on obtient l’algorithme de soustraction de A−B.

version en ligne - [PDF Document] (66)

58 Representation des grandeurs

(a)

ai bi ee es di

0 0 0 0 00 0 1 1 10 1 0 1 10 1 1 1 01 0 0 0 11 0 1 0 01 1 0 0 01 1 1 1 1 (b)

ai bi re rs si

0 1 1 0 00 1 0 1 10 0 1 1 10 0 0 1 01 1 1 0 11 1 0 0 01 0 1 0 01 0 0 1 1ai bi ee es di

Fig. 3.5 – (a) Table de soustraction et (b) table d’addition modifiee

On peut aussi utiliser les expressions pour chaque etage :

es = 1 si ai < bi + ee c’est-a-dire si ai − (bi + ee) < 0es = 0 si ai ≥ bi + ee

di = ai − (bi + ee) si es = 0di = 2 + ai − (bi + ee) si es = 1

Remarque : Dans les processeurs, apres une soustraction, lecomplementaire du bit d’emprunt sortant est disponible dans le mot d’etatsous le nom de bit indicateur C. Il vaut 0 si la difference de deux naturelscodes sur N bits est positive, donc representable sur N bits.

3. Les relatifs

3.1 Representation des entiers relatifs

Pour representer des entiers relatifs par un vecteur de N booleens, lapremiere idee qui vient a l’esprit est de representer la valeur absolue sur N −1bits et de reserver un bit pour le signe. Cette idee simple est correcte. Onparle de representation en signe et valeur absolue. Une autre representationest habituellement utilisee. Elle presente des similitudes avec la representationd’un angle quelconque par un nombre reel dans l’intervalle [− π, + π[. Nous al-lons la decrire d’abord de facon tres intuitive. Pour cela nous considerons desnombres sur 4 chiffres. Le meme raisonnement vaut pour toute autre taille.Quand on achete une voiture neuve, le compteur kilometrique indique 0000.Il indique ensuite 0001, puis 0002. Les voitures a compteur binaire feraientapparaıtre 0001 puis 0010. Imaginons que le compteur decompte lorsque l’onroule en marche arriere. Avec une voiture neuve, il afficherait successivement9999, puis 9998. Un compteur binaire montrerait 1111, puis 1110.

On decide de representer -1 par 1111, puis -2 par 1110, comme sur le comp-teur kilometrique. Reste a fixer une convention. En effet si l’on roule quinze

version en ligne - [PDF Document] (67)

3. Les relatifs 59

kilometres en marche arriere le compteur affiche aussi 0001, et l’on risque decroire que l’on a parcouru 1 kilometre en marche avant ! La convention habi-tuelle est la suivante : les relatifs strictement positifs vont de 0001 a 0111 (soitde 1 a 7) ; les relatifs strictement negatifs vont de 1111 a 1000 (soit de -1 a-8) ; 0 reste code 0000.

La convention est choisie pour que le bit de poids fort de la representationsoit un bit de signe. Il vaut 1 pour les nombres strictement negatifs. Sur Nbits les nombres representables sont ceux de l’intervalle [−2N−1, 2N−1 − 1].Ce systeme s’appelle codage en complement a 2 (parfois complement a 2N

puisqu’il y a N bits). Au passage remarquons que l’intervalle des nombresrepresentables n’est pas symetrique par rapport a 0. C’est obligatoire. Avecune base paire, on represente un nombre pair de nombres. Il ne peut y en avoirautant de strictement positifs que de strictement negatifs, sauf si 0 a deuxrepresentations.

De facon moins intuitive, si un relatif Y s’ecrit en complement a 2 sur Nchiffres binaires : yN−1, yN−2, . . . , y1, y0, la correspondance entre la valeur durelatif Y et celles des chiffres est donnee par l’equation :

Y = (−2N−1 × yN−1) +N−2∑i=0

2i × yi

ou, ce qui est equivalent, par :

Y = (−2N × yN−1) +N−1∑i=0

2i × yi

La correspondance est telle que l’ecriture est unique comme pour le cas desnaturels dans une base donnee.

Remarquons que si l’on considere les deux vecteurs binaires representantun relatif et son oppose, et si l’on interprete ces deux vecteurs comme lesrepresentations en binaire de deux naturels, la somme de ces deux naturelsest 2N . C’est l’origine du nom complement a 2N . Ainsi, sur 4 bits, 0101 code5. En complement a 2, sur 4 bits -5 est represente par 1011. En base 2, 1011represente le naturel 11, et 11 + 5 = 16.

Conversion Une difficulte notable vient d’apparaıtre, la meme que pour lescouleurs en debut de chapitre. La question Que represente 100011 ? ou Com-ment est represente l’entier K ? n’a pas de sens. Il faut a chaque fois preciserdans quelle convention, binaire pur ou complement a 2. Comme pour les cou-leurs, on peut avoir besoin de convertir d’une convention a l’autre les nombresqui sont representables dans les deux (comme le brun et le bleu pale, pourles couleurs). Pour les nombres sur N bits ce sont les nombres de l’intervalle[0, 2N−1 − 1]. Ils ont la meme representation dans les deux codes (comme lecyan et le noir qui ont le meme code dans l’exemple des couleurs).

version en ligne - [PDF Document] (68)

60 Representation des grandeurs

3.2 Operations sur les vecteurs booleens representantles relatifs

3.2.1 Extension et reduction de format

Si un relatif Y est code sur N bits, il suffit de reporter le bit de signe de Yen poids forts M −N fois pour obtenir son codage M bits (avec M > N).

Si les k bits de plus forts poids de la representation de C sont identiques,C peut etre represente sur k− 1 bits de moins. On ne perd pas le bit de signe.Par exemple : 11111010c2 = 1010c2.

3.2.2 Addition

Soient A et B representes en complement a 2 par aN−1, aN−2, . . . , a1, a0

et bN−1, bN−2, . . . , b1, b0. On a :

A = (−2N−1)× aN−1 +N−2∑i=0

2i × ai, B = (−2N−1)× bN−1 +N−2∑i=0

2i × bi

Comme pour les naturels, determinons si la somme peut etre representablesur N bits et comment les bits de la somme peuvent etre exprimes. On pose :

α =N−2∑i=0

2i × ai, β =N−2∑i=0

2i × bi, γ = (α + β) modulo 2N−1

avec :

α ∈ [0, 2N−1 − 1], β ∈ [0, 2N−1 − 1], γ ∈ [0, 2N−1 − 1].

On a evidemment :

A = −2N−1 × aN−1 + α

et, de meme,

B = −2N−1 × bN−1 + β.

Soit re defini par :

α + β = re × 2N−1 + γ.

re vaut donc 1 ou 0. C’est le report sortant du calcul de α +β. γ est la sommeα + β privee de son bit de poids fort re.Soit S la somme de A et de B.

S = −2N−1× (aN−1 + bN−1) + (α + β) = −2N−1× (aN−1 + bN−1− re) + γ

Les valeurs possibles de aN−1 + bN−1 − re sont -1, 0, 1 ou 2 puisque les troisnombres aN−1, bN−1, re sont des chiffres binaires.

version en ligne - [PDF Document] (69)

3. Les relatifs 61

Nombre de bits necessaires pour representer S La premiere questionest : S est-il representable sur N bits en complement a 2 ? C’est-a-dire a-t-on−2N−1 ≤ S ≤ 2N−1 − 1 ? Examinons les deux cas ou la reponse est non.

Premier cas : S < −2N−1

−2N−1 × (aN−1 + bN−1 − re) + γ < −2N−1

−2N−1 × (aN−1 + bN−1 − re − 1) < −γ2N−1 × (aN−1 + bN−1 − re − 1) > γ

Puisque γ ∈ [0, 2N−1 − 1], cette inegalite ne peut etre verifiee avec certi-tude que si

aN−1 + bN−1 − re − 1 ≥ 1 c’est-a-dire si aN−1 + bN−1 − re − 1 = 1.

Ce qui ne se produit que si aN−1 = bN−1 = 1 et re = 0. Si l’on posers = maj(aN−1, bN−1, re), on a dans ce cas rs = 1 = re.

Deuxieme cas : S > 2N−1 − 1

−2N−1 × (aN−1 + bN−1 − re) + γ > 2N−1 − 1−2N−1 × (aN−1 + bN−1 − re) + γ ≥ 2N−1

−2N−1 × (aN−1 + bN−1 − re + 1) ≥ −γ2N−1 × (aN−1 + bN−1 − re + 1) ≤ γ

Cette inegalite ne peut etre verifiee avec certitude que si

aN−1 + bN−1 − re + 1 ≤ 0 c’est-a-dire si aN−1 + bN−1 − re + 1 = 0

Ce qui ne se produit que si aN−1 = bN−1 = 0 et re = 1.

Dans ce cas rs = maj (aN−1, bN−1, re) = 0 = re.

Dans tous les autres cas −2N−1 ≤ S ≤ 2N−1 − 1, c’est-a-dire pour

aN−1 = bN−1 = 0, re = 0aN−1 = bN−1 = 1, re = 1aN−1 = 1, bN−1 = 0, re quelconqueaN−1 = 0, bN−1 = 1, re quelconque

la somme S de A et B est representable sur N bits en complement a 2. On aalors rs = re. Le tableau suivant recapitule les differents cas.

aN−1 bN−1 re rs Interpretation aN−1 + bN−1 − re

1 1 0 1 Premier cas : S < −2N−1 20 0 1 0 Deuxieme cas : S > 2N−1 − 1 -10 0 0 0 Somme representable 01 1 1 1 Somme representable 11 0 x x Somme representable x0 1 x x Somme representable x

version en ligne - [PDF Document] (70)

62 Representation des grandeurs

Notons s = ⊕(aN−1, bN−1, re). Deux expressions booleennes decrivent lavaleur du bit de debordement V apres une addition :

V = aN−1.bN−1.s + aN−1.bN−1.sV = rs ou exclusif re

La premiere apparaıt souvent dans les documents des constructeurs de proces-seurs. L’exercice E3.9 propose de montrer l’equivalence des deux expressions.

L’interpretation est facile : aN−1 etant interprete comme le bit de signe d’unoperande, bN−1 comme l’autre et s comme le bit de signe du resultat calculepar le processeur, le cas aN−1 = 1, bN−1 = 1, s = 0 signifierait que la sommede deux negatifs est positive. Cela se produit si re = 0.

Calcul des bits de S On se pose une deuxieme question : comment calculerla representation en complement a 2 de S, si elle existe, c’est-a-dire commenttrouver le vecteur sN−1, sN−2, . . . , s1, s0 tel que

S = −2N−1 × sN−1 +i=N−2∑

i=0

2i × si

On sait que

S = −2N−1 × (aN−1 + bN−1 − re) + γ, avec γ ∈ [0, 2N−1 − 1]

En identifiant bit a bit les deux ecritures, on voit que pour i ∈ [0, N − 2],les si ne sont rien d’autres que les chiffres binaires de γ.

De plus, puisque aN−1 + bN−1 − re vaut 0 ou 1, car S est representable surN bits, alors −(aN−1 + bN−1 − re) = ⊕(aN−1, bN−1, re).

On a reconnu dans re et rs les reports entrant et sortant du dernier etaged’addition binaire normale des vecteurs ai et bi. Ce qui signifie que les chiffresbinaires de l’ecriture de S s’obtiennent de la meme facon que les chiffres binairesde la somme des deux naturels representes en binaire pur par les ai et les bi.C’est la tout l’interet du codage en complement a 2.

Remarque : Cette propriete est d’une portee pratique considerable.Elle signifie que le meme mecanisme d’addition peut ajouter deux vecteurs bi-naires sans avoir a tenir compte de l’interpretation, binaire pur ou complementa 2, qui est faite des operandes et du resultat. Les chiffres binaires du resultat,si celui-ci est representable, sont identiques quelle que soit l’interpretation.On retrouvera cette propriete dans le chapitre 12 ou l’on verra que la memeinstruction du langage machine convient pour l’addition, independamment ducode choisi, et dans le chapitre 8 ou l’on verra que le meme circuit combinatoireadditionneur convient pour l’addition independamment du code choisi.

Mais, attention, l’information disant si le resultat est representable ou nonn’est pas la meme. En binaire pur le resultat de l’addition est representablesi et seulement si rs = 0. En complement a 2 le resultat de l’addition estrepresentable si et seulement si rs = re.

L’exercice corrige E3.6 donne des exemples qui concretisent ces equations.

version en ligne - [PDF Document] (71)

3. Les relatifs 63

Ecriture de l’oppose Soit A un relatif represente sur N bits en complementa 2 par aN−1 aN−2, . . . , a1 a0. On a :

A = (−2N × aN−1) +N−1∑i=0

2i × ai

Complementons chaque bit de A (en remplacant ai par 1− ai), le resultat estun nombre A′ defini par :

A′ = −2N × (1 − aN−1) +N−1∑i=0

2i × (1 − ai)

Si l’on ajoute A et A′ modulo 2N on obtient −1. A + A′ = −1, c’est-a-direA = −A′ − 1, c’est-a-dire −A = A′ + 1 (toutes ces egalites sont modulo 2N).

Cela donne le procede technique pour obtenir la representation de l’opposede A : on forme le complementaire bit a bit A′ de A et on lui ajoute 1. Commel’operation est modulo 2N , on ne tient pas compte d’eventuels reports. Unautre procede consiste a recopier tous les bits en commencant par les poidsfaibles jusqu’au premier 1 inclus puis a inverser les suivants.

Attention toutefois car, sur N bits, l’oppose de −2N−1 n’est pasrepresentable.

3.2.3 Soustraction

Puisque l’addition est connue, ainsi que le passage a l’oppose, la soustrac-tion ne pose pas de problemes : il suffit de se souvenir que A−B = A +−(B).

Comme pour l’addition, les constructeurs de processeurs donnent l’expres-sion booleenne du bit V de debordement apres une soustraction :

V = aN−1.bN−1.s + aN−1.bN−1.s

L’exercice E3.9 revient sur cette expression.

3.2.4 Multiplication et division par une puissance de 2

Multiplier par 2 un nombre code en complement a 2 se fait, comme pourun naturel, en ajoutant un 0 en poids faible.

Diviser par 2 consiste, comme pour les naturels, a decaler tous les chiffresd’une position vers les poids faibles, mais c’est la partie entiere du quotientqui est obtenue.

La difference notable est que si l’on travaille sur un nombre de bits fixe, cedecalage doit se faire en maintenant le bit de poids fort, le bit de signe.

Cela explique pourquoi dans les jeux d’instructions des processeurs il y atoujours deux types de decalages vers les poids faibles, l’un nomme logique,dans lequel un 0 est insere en poids fort, l’autre nomme arithmetique ou le bitde signe est maintenu.

version en ligne - [PDF Document] (72)

64 Representation des grandeurs

La division par 2 des entiers relatifs, qui revient a diviser par 2 la valeurabsolue de l’entier en conservant son signe, necessite quelques precautions pourles entiers negatifs impairs.

Le decalage arithmetique ne tient en effet aucun compte de la valeur du bitde poids faible. Or changer de 0 a 1 le bit de poids faible d’un entier pair a poureffet d’en augmenter la valeur absolue s’il est positif ou nul, et au contraire dela diminuer s’il est negatif.

Pour en tenir compte, il faut au prealable ajouter 1 aux seuls entiers negatifsavant d’effectuer le decalage vers les poids faibles. Si l’entier est pair, ceci nemodifie que le bit de poids faible qui est ensuite ignore lors du decalage.

Si l’entier est impair, cette operation le ramene a l’entier pair de valeurabsolue immediatement inferieure. Ainsi, pour l’entier -7, on appliquera enfait le decalage sur l’entier -6.

Ecriture Ecriture Ecriture Ecriturede N en de N en de N × 2 en de N/4 endecimal complement a 2 complement a 2 complement a 2

13 001101 011010 00001129 011101 impossible 000111-6 111010 110100 111101-7 111001 110010 111110-21 101011 impossible 110110

4. Lien entre l’arithmetique et les booleens

Le fait que les chiffres binaires 0 et 1 se representent par les booleens 0 et1 amene souvent a faire des amalgames de types. Ainsi on assimile parfois aet 1 − a (en traitant le booleen a comme un entier). En deduire l’existenced’une soustraction booleenne est une grosse erreur.

Les vecteurs booleens peuvent representer des nombres, on vient de le voir.On a vu dans le chapitre 2 que les operations booleennes existent aussi sur lesvecteurs : l’addition booleenne, nommee aussi OU bit a bit, la multiplicationbooleenne, nommee aussi ET bit a bit et la complementation.

Que signifieraient ces operations appliquees a des vecteurs representant desentiers ? Elles gardent leurs proprietes algebriques, mais sont peu interessantesarithmetiquement. L’addition booleenne ne correspond pas a l’addition desnaturels ou des relatifs representes par les deux vecteurs. De meme pour lamultiplication. On obtient, par exemple, sur 8 bits :

011100002 ET 010110112 = 11210 ET 9110 = 010100002 = 8010

011100002 OU 010110112 = 11210 OU 9110 = 011110112 = 12310

La seule operation interessante pour l’arithmetique est la troncature : pourtronquer un naturel A, represente sur N bits, a P bits (avec P < N), il suffitde calculer le ET entre A et un vecteur ayant des 0 en poids forts et P 1 enpoids faibles : 0 . . . 01 . . . 1. Ce vecteur represente le naturel 2P − 1.

version en ligne - [PDF Document] (73)

5. Les caracteres 65

On a donc A ET (2P − 1) = A modulo 2P .Si un naturel X est code sur n bits, on peut le decomposer en deux

naturels p et q, respectivement codes sur k et n − k bits. Si p est la partiepoids fort et q la partie poids faible, selon le tableau :

n− 1 n− k n− k − 1 0p q

k bits n− k bitson a les relations suivantes :

X = p× 2n−k + q, q = X modulo 2n−k, p = X div 2n−k

Le ET, le OU et le OU exclusif sur les vecteurs de N bits servent aussi : aconnaıtre le bit de rang i d’un nombre X (en calculant X ET 2i) ; a forcer a0 le bit de rang i d’un nombre X (par X ET (2N − 1 − 2i) ) ; a forcer a 1 lebit de rang i d’un nombre X (par X OU 2i) ; a inverser le bit de rang i d’unnombre X (par X OUEX 2i ).

5. Les caracteres

Les caracteres alphabetiques, numeriques, typographiques (parenthese, vir-gule, etc.) et certains caracteres non imprimables (fin de ligne, fin de fichier,etc.) sont habituellement representes sur 7 bits selon un code normalise nommecode ASCII pour American Standard Code for Information Interchange (Cf. Fi-gure 3.6).

Le code ASCII est tel que : l’entier representant un chiffre vaut la valeurdu chiffre plus 48 ; les entiers correspondant aux codes de deux lettres sontordonnes comme les deux lettres dans l’alphabet si les deux lettres sont toutesles deux en majuscules ou en minuscules ; la difference entre le code d’unemajuscule et de la minuscule correspondante est 32, c’est-a-dire une puissancede 2.

Sur une machine unix la commande man ascii fournit en hexadecimalle tableau des codes correspondant aux caracteres. Comme on le voit sur lafigure 3.6, 2316 est le code hexadecimal de # et 2016 celui de l’espace ; del, decode 7F16, est le caractere d’effacement. Les codes inferieurs a 1F represententdes caracteres non affichables.

Ce code ne permet pas de representer les lettres accompagnees de diacri-tiques (accents, cedille, trema, tilde, petit rond, etc.) dans les langues qui lesutilisent (c’est-a-dire presque toutes les langues europeennes !). Des extensionsa 8 bits, puis a 16 sont proposees (UNICODE), mais les standards sont diffi-ciles a etablir. Le probleme de pouvoir coder en binaire l’ensemble de toutesles formes ecrites des principales langues ecrites du monde n’est pas encoretotalement resolu. Cela pose de nombreux problemes lors des transmissions defichiers contenant des textes.

version en ligne - [PDF Document] (74)

66 Representation des grandeurs

20 21 ! 22 ” 23 # 24 $ 25 % 26 & 27 ’28 ( 29 ) 2A * 2B + 2C , 2D - 2E . 2F /30 0 31 1 32 2 33 3 34 4 35 5 36 6 37 738 8 39 9 3A : 3B ; 3C < 3D = 3E > 3F ?40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G48 H 49 I 4A J 4B K 4C L 4D M 4E N 4F O50 P 51 Q 52 R 53 S 54 T 55 U 56 V 57 W58 X 59 Y 5A Z 5B [ 5C \ 5D ] 5E ˆ 5F60 ‘ 61 a 62 b 63 c 64 d 65 e 66 f 67 g68 h 69 i 6A j 6B k 6C l 6D m 6E n 6F o70 p 71 q 72 r 73 s 74 t 75 u 76 v 77 w78 x 79 y 7A z 7B { 7C | 7D } 7E ˜ 7F del

Fig. 3.6 – Code ASCII

6. Les nombres reels, la virgule flottante

Les nombres rationnels sont generalement representes par un couple d’en-tiers. Mais ils sont peu utilises en tant que tels dans les ordinateurs a basniveau. Seuls les langages evolues les manipulent et le soin de realiser lesoperations est alors a la charge du compilateur ou de l’interpreteur. Lesnombres reels sont representes et manipules a bas niveau dans la plupart desordinateurs contemporains. Il existe des circuits de calcul sur des reels et, parvoie de consequence, des instructions dans le langage machine qui manipulentdes reels. Ces reels sont-ils des irrationnels ? Evidemment non. Des reels nonrationnels ont necessairement une suite infinie non periodique de decimales. Lesrepresenter en base 2 ne change rien : ils ont une suite infinie non periodiquede duomales.

On represente en machine un ensemble fini de reels, en fait des rationnels,selon une technique tres proche de la representation dite scientifique des cal-culettes. Au lieu de representer −123, 5 par −1.235 × 102, on le representepar −1, 1110111 × 26 (car 12310 = 11110112). −1, 1110111 recoit le nom demantisse et 6 celui d’exposant.

La representation en decimal en notation scientifique a toujours un chiffre(un seul) avant la virgule, chiffre qui n’est 0 que pour la representation de 0. Lameme propriete vaut pour le binaire et le seul chiffre possible avant la virguleetant 1, il n’est pas necessaire de le representer explicitement. On parle de 1cache, et c’est ce qui explique la composante (1+ fr) dans le tableau ci-dessous.

Le nombre de chiffres de la mantisse fixe la precision representable. L’exer-cice E3.15 sensibilise a la precision dans une representation basee sur le memeprincipe que la virgule flottante.

La norme I.E.E.E. 754 fixe les formats possibles de la mantisse, de l’ex-posant, du signe. Selon cette norme, il existe 3 formats de representation :les reels sont codes sur 32, 64 ou 128 bits. Dans chaque cas la representation

version en ligne - [PDF Document] (75)

7. Exercices 67

Taille totale 32 bits 64 bits 128 bits

Taille de S 1 bit 1 bit 1 bit0 ≤ s ≤ 1Taille de E 8 bits 11 bits 15 bits

0 ≤ e ≤ 28,11,15

Taille de F 23 bits 52 bits 112 bits0 ≤ f ≤ 223,52,112

Valeur de la fr = f × 2−24 fr = f × 2−53 fr = f × 2−113

partie fractionnaire fr

Valeur normale de e 0 < e < 255 0 < e < 2047 0 < e < 32767Valeur de X (−1)s × 2e−127 (−1)s × 2e−1023 (−1)s × 2e−16383

cas normal e 6= 0, f 6= 0 ×(1 + fr) ×(1 + fr) ×(1 + fr)Valeur de X (−1)s × 2−126 (−1)s × 2−1022 (−1)s × 2−16382

si e = 0 ×(0 + fr) ×(0 + fr) ×(0 + fr)X = 0 si de plus f = 0Cas particuliers : e = 255 2047 32767

Fig. 3.7 – Representation des reels

comporte 3 champs nommes S (signe), E (exposant) et F (mantisse, ou plutotpartie fractionnaire). Nommons s, e, f le naturel represente par le champ debits S, E, F et fr la valeur de la partie fractionnaire.

Le tableau de la figure 3.7 donne les correspondances entre s, e et f et lavaleur du reel X represente selon la taille. Les cas particuliers correspondentaux cas infinis.

7. Exercices

E3.1 : Expression booleenne d’une propriete arithmetiqueConsiderons un naturel A code sur N bits. Donner l’expression booleennecaracterisant les bits de A pour que 10× A soit aussi codable sur N bits.

E3.2 : Reste modulo 2N − 1Retrouver dans ses cahiers d’ecole elementaire la technique de la preuve par9. Se rememorer comment l’on obtient le reste modulo 9 d’un naturel a partirde son ecriture en base 10 (a chaque fois qu’il y a au moins 2 chiffres on lesajoute). Ecrire un nombre en octal. Appliquer la technique precedente sur leschiffres octaux. Verifier que l’on obtient le reste modulo 7. Calculer de memele reste modulo 15 d’un naturel a partir de son ecriture hexadecimale.

E3.3 : Manipulation du complement a 2Ecrire sur 4 bits les relatifs de -8 a +7. Ecrire sur 5 bits les relatifs de -16 a+15. Se persuader que la definition intuitive, celle du compteur de voiture, etles deux equations donnant la correspondance entre valeur et ecriture donnent

version en ligne - [PDF Document] (76)

68 Representation des grandeurs

bien les memes resultats. Se persuader de l’unicite de l’ecriture. Reperer -8(sur 4 bits), et -16 (sur 5) comme un cas particulier dont l’oppose n’est pasrepresentable.

E3.4 : Ecriture des nombres a virguleSe persuader que l’ecriture 0,011 (en base 2), peut valablement representerle nombre 0,375 (en decimal), c’est-a-dire 1/4 + 1/8. Les nombres a virgulerepresentables en base 2 et les nombres representables en base 10 ne sont pasles memes. Dans quel sens est l’inclusion, pourquoi ?

E3.5 : Comparaison d’entiersPour comparer deux entiers une solution est de calculer leur difference. Maisce n’est pas necessaire. La comparaison ayant pour but de dire si les deuxentiers sont egaux, et, sinon, quel est le plus grand, trouver des algorithmes decomparaisons de deux entiers a partir de leurs representations binaires sur Nbits :

– dans le cas ou les deux nombres sont naturels,

– dans le cas ou les deux sont signes (et representes en complement a 2),

– dans le cas ou un nombre est signe et l’autre non.

On pourra completer cet exercice apres l’etude des circuits combinatoires.

E3.6 : Additions en binaire pur et en complement a 2Dans le tableau 3.8, on montre des resultats d’addition. La table se presentecomme une table d’addition, lignes et colonnes. Elle est donc symetrique.Chaque information numerique est representee de 4 facons : un vecteur de4 bits, ecrits en petit* chiffres ; un naturel compris entre 0 et 15 (son ecritureen binaire est le vecteur de 4 bits) ; un entier relatif entre -8 et +7 (son ecritureen complement a 2 est le vecteur de 4 bits).

Dans chaque case du tableau figurent ces 3 representations, la valeur dureport sortant r3 provenant de l’addition restreinte aux 3 premiers bits, lavaleur du report sortant r4 provenant de l’addition sur 4 bits. Les resultatscorrects sont encadres. Les resultats incorrects ne le sont pas.

L’objet de l’exercice est de retrouver, d’apres ce tableau, les modes de calculdes indicateurs C et V precisant respectivement si le resultat est correct ounon en binaire (pour C) et en complement a 2 (pour V). On peut faire le memetravail pour la soustraction. La table n’est pas symetrique dans ce cas.

E3.7 : Signification et test des indicateursQuels sont les entiers codables sur 32 bits en complement a 2 et dont la valeurabsolue est aussi codable sur 32 bits en complement a 2 ?

Pour resoudre la suite de cet exercice, il faut connaıtre la programmationen langage d’assemblage.

Dans le programme suivant en langage d’assemblage, il manque unmnemonique d’instruction de branchement conditionnel, il a ete remplace par

version en ligne - [PDF Document] (77)

7. Exercices 69

(0011) (0100) (0101) (1011) (1100) (1101)

3b 4b 5b 11b 12b 13b

+3c2 +4c2 +5c2 −5c2 −4c2 −3c2

(0011) (0110) (0111) (1000) (1110) (1111) (0000)

3b 6b 7b 8b 14b 15b 0b

+3c2 +6c2 +7c2 −8c2 −2c2 −1c2 0c2

r3 = 0 r3 = 0 r3 = 1 r3 = 0 r3 = 0 r3 = 1r4 = 0 r4 = 0 r4 = 0 r4 = 0 r4 = 0 r4 = 1

(0100) (0111) (1000) (1001) (1111) (0000) (0001)

4b 7b 8b 9b 15b 0b 1b

+4c2 +7c2 −8c2 −7c2 −1c2 0c2 +1c2

r3 = 0 r3 = 1 r3 = 1 r3 = 0 r3 = 1 r3 = 1r4 = 0 r4 = 0 r4 = 0 r4 = 0 r4 = 1 r4 = 1

(0101) (1000) (1001) (1010) (0000) (0001) (0010)

5b 8b 9b 10b 0b 1b 2b

+5c2 −8c2 −7c2 −6c2 0c2 +1c2 +2c2

r3 = 1 r3 = 1 r3 = 1 r3 = 1 r3 = 1 r3 = 1r4 = 0 r4 = 0 r4 = 0 r4 = 1 r4 = 1 r4 = 1

(1011) (1110) (1111) (0000) (0110) (0111) (1000)

11b 14b 15b 0b 6b 7b 8b

−5c2 −2c2 −1c2 0c2 +6c2 +7c2 −8c2

r3 = 0 r3 = 0 r3 = 1 r3 = 0 r3 = 0 r3 = 1r4 = 0 r4 = 0 r4 = 1 r4 = 1 r4 = 1 r4 = 1

(1100) (1111) (0000) (0001) (0111) (1000) (1001)

12b 15b 0b 1b 7b 8b 9b

−4c2 −1c2 0c2 +1c2 +7c2 −8c2 −7c2

r3 = 0 r3 = 1 r3 = 1 r3 = 0 r3 = 1 r3 = 1r4 = 0 r4 = 1 r4 = 1 r4 = 1 r4 = 1 r4 = 1

(1101) (0000) (0001) (0010) (1000) (1001) (1010)

13b 0b 1b 2b 8b 9b 10b

−3c2 0c2 +1c2 +2c2 −8c2 −7c2 −6c2

r3 = 1 r3 = 1 r3 = 1 r3 = 1 r3 = 1 r3 = 1r4 = 1 r4 = 1 r4 = 1 r4 = 1 r4 = 1 r4 = 1

Fig. 3.8 – Table d’addition

version en ligne - [PDF Document] (78)

70 Representation des grandeurs

bxx. A l’etat initial, le registre i0 contient une valeur entiere x. A l’etat fi-nal, le registre i2 contient 1 si la valeur absolue de x est codable sur 32 bitsen complement a 2, et alors i3 contient cette valeur absolue ; le registre i2

contient 0 si cette valeur absolue n’est pas codable ; dans ce cas la valeur dei3 n’est pas pertinente.

cmp i0, 0 ! si i0 ≥ 0bge pos

neg : subcc 0, i0, i3 ! i3 prend pour valeur (-i0)bxx spemov 1, i2 ! OK prend pour valeur vraiba fin

pos : mov 1, i2mov i0, i3 ! si pos. la valeur absolue est le nombreba fin

spe : mov 0, i2 ! OK prend pour valeur fauxfin : ! etat final

Pourrait-on remplacer le bge de la deuxieme ligne par un bpos ? Par quelmnemonique faut-il remplacer bxx ?

E3.8 : Arithmetique satureeEn arithmetique saturee, il n’y a ni retenue, ni debordement. Quand le resultatest trop grand, il est remplace par le plus grand nombre representable dans lesysteme de numeration utilise. Quand le resultat est trop petit, il est remplacepar le plus petit nombre representable dans le systeme de numeration utilise.

Ainsi sur 8 bits, avec des exemples ecrits en decimal :

– En binaire pur : 20010 +SatBinpur 8010 = 25510 au lieu de 28010

8010 −SatBinpur 20010 = 010 au lieu de −12010

– En complement a 2 : 10010 +SatCompl2 8010 = 12710 au lieu de 18010

−8010 −SatCompl2 10010 = −12810 au lieu de −18010

Question 1 : Pour resoudre cette question, il faut connaıtre la programmationen langage d’assemblage.

On suppose que A et B sont deux entiers, codes sur 32 bits (attention lesexemples sont sur 8 bits). Ils sont ranges dans des registres 32 bits d’un proces-seur ne disposant pas des operations en format sature. Comme les operationsen arithmetique saturee n’existent pas, il convient de les remplacer par un petitprogramme qui produise le resultat voulu. Ecrire les instructions qui effectuentla soustraction saturee en binaire pur de A et B et range le resultat dans unregistre.

Ecrire les instructions qui effectuent l’addition saturee en complement a 2de A et B et range le resultat dans un registre.

Question 2 : On peut revenir sur cet exercice apres le chapitre sur lescircuits combinatoires.

Donner la description detaillee d’une Unite Arithmetique qui effectue surdeux entiers A et B : l’addition et la soustraction (A + B ou A − B), en binaire

version en ligne - [PDF Document] (79)

7. Exercices 71

pur et en complement a deux, en arithmetique normale et en arithmetiquesaturee, selon 3 bits de commande.

Remarque : Les operations en arithmetique saturee font partir de l’ex-tension MMX du jeu d’instruction des processeurs pentium de intel. Ellesservent notamment en representation des images. Si un octet represente leniveau de gris d’un pixel, par exemple 0 pour noir et 255 pour blanc, on peuteclaircir un pixel en augmentant sa luminosite 2, mais il ne faut pas allerau-dela de 255.

E3.9 : Expression du bit de debordementSoit maj (x, y, z) = x.y + x.z + y.z. Montrer que

maj (x, y, z) = maj (x, y, z)

On note ⊕ le OUEXCLUSIF ou XOR. Montrer que

a.b.(a⊕ b) = a.b.(a⊕ b) = 0

On pose les equations booleennes :

s = a⊕ b⊕ re (on note parfois s = ⊕(a, b, re))rs = maj (a, b, re)

On connaıt deux expressions decrivant la valeur du bit de debordement V apresune addition :

V = a.b.s + a.b.s et V = rs ⊕ re

Montrer que les deux expressions sont equivalentes. Le bit V pour la soustrac-tion est donne par :

V = aN−1.bN−1.s + aN−1.bN−1.s

Montrer que la aussi V = rs ⊕ re.

E3.10 : Relation entre binaire pur et complement a 2Soit un vecteur de bits yN−1 yN−2, . . . , y1 y0. Soit Yb le naturel represente parce vecteur pour l’interpretation binaire pur. Soit Yc2 le relatif represente par cevecteur pour l’interpretation complement a 2. Donner des relations entre Yb,Yc2 et yN−1.

E3.11 : Representation de la somme de deux entiers relatifsMontrer que, si l’addition de deux nombres relatifs codes en complement adeux deborde, alors la retenue C est l’inverse du bit de signe : V =⇒ C = (N)

La figure 3.9 donne quelques elements de reponse. On y represente les 8 caspossibles de valeurs pour le bit poids fort dans une addition en complementa deux. Trouver des entiers codes sur 4 bits dans [−8, 7] pour chacun des cas.Retrouver chacun des cas dans le tableau 3.8. Faire le meme travail pour lasoustraction.

version en ligne - [PDF Document] (80)

72 Representation des grandeurs

aP bP re rs = sP = V =maj(aP , bP , re) ⊕(aP , bP , re) re ⊕ rs

signe A signe B indic. C indic. N indic. V0 0 0 0 0 00 0 1 0 1 10 1 0 0 1 00 1 1 1 0 01 0 0 0 1 01 0 1 1 0 01 1 0 1 0 11 1 1 1 1 0

Fig. 3.9 – Representation de la somme de deux entiers relatifs.

E3.12 : Recuperation du resultat d’une addition qui deborde (casdes entiers positifs)On considere deux entiers positifs A et B, et l’entier U = A + B. On supposeque A et B sont representes en binaire pur sur 32 bits, respectivement dansles registres %l0 et %l1 du sparc. On effectue l’addition grace a l’instructionADDcc %l0, %l1, %l2.

A et B, entiers positifs, etant supposes representes sur 32 bits, sont doncdans l’intervalle [0, 232 − 1]. Lorsque U est representable en binaire pur sur 32bits (c’est-a-dire lorsque U ≤ 232 − 1), on obtient sa representation dans leregistre %l2 a l’issue de l’instruction d’addition.

Lorsque U n’est pas representable en binaire pur sur 32 bits (c’est-a-direU > 232−1), on dit que l’addition deborde. Mais dans ce cas U est representablesur 64 bits (33 suffiraient). Ecrire un programme en langage d’assemblage quidonne toujours la somme U dans deux registres %l3, %l2.

On peut evidemment faire l’exercice analogue pour la difference.

E3.13 : Recuperation du resultat d’une addition qui deborde (casdes entiers relatifs)On reprend l’exercice precedent, dans le cas de la representation en complementa 2. On considere deux entiers relatifs A et B, et l’entier U = A+B. On supposeque A et B sont representes en complement a deux sur 32 bits, respectivementdans les registres %l0 et %l1 du sparc. On effectue l’addition grace a l’ins-truction ADDcc %l0, %l1, %l2.

A et B, entiers relatifs, etant supposes representes sur 32 bits, sont doncdans l’intervalle [−231, 231 − 1] Lorsque U est representable en C2 sur 32 bits(c’est-a-dire −231 ≤ U ≤ 231− 1), on obtient sa representation dans le registre%l2 a l’issue de l’instruction d’addition.

Lorsque U n’est pas representable en C2 sur 32 bits (c’est-a-dire U <

2”Plus blanc que blanc, c’est quoi comme couleur ?” demandait Coluche dans un de sestextes !

version en ligne - [PDF Document] (81)

7. Exercices 73

−231 ou U > 231 − 1), on dit que l’addition deborde. Mais dans ce cas Uest representable sur 64 bits (33 suffiraient). Ecrire un programme en langaged’assemblage qui donne toujours la somme U dans deux registres %l3, %l2.

On peut evidemment faire l’exercice analogue pour la difference.

E3.14 : Description recursive de l’addition de 2 naturelsDecrire l’addition de deux naturels comme une operation recursive sur la tailledes deux naturels, selon l’indication suivante.

Si le nombre N de bits de A et B vaut 1, la somme de A et B est facile acalculer, elle est representable sur 2 bits. Si N est une puissance de 2 superieurea 1, N/2 est entier ; on peut couper A et B en deux parties AfortAfaible etBfortBfaible, chacune sur N/2 bits ; on a alors A = Afort × 2N/2 + Afaible.

Calculons un report intermediaire rinter :

rinter = 1 si Afaible + Bfaible ≥ 2N/2

rinter = 0 si Afaible + Bfaible < 2N/2

On a alors, pour les poids faibles :

Sfaible = Afaible + Bfaible si rinter = 0Sfaible = Afaible + Bfaible − 2N/2 si rinter = 1

et, pour les poids forts :

SN = 1 si Afort + Bfort + rinter ≥ 2N/2

SN = 0 si Afort + Bfort + rinter < 2N/2

Sfort = Afort + Bfort + rinter si SN = 0Sfort = Afort + Bfort + rinter − 2N/2 si SN = 1

E3.15 : Precision en representation flottanteLes pieces de monnaies courantes en France sont 5, 10, 20 et 50 centimes et 1,2, 5, 10, 20 Francs. On represente ces pieces par un code binaire.

La premiere partie du code est l’analogue d’une mantisse de 3 bits m2, m1,m0. Elle prend les valeurs 001, 010 ou 101 pour representer 1, 2 ou 5 (centimes,dizaine de centimes, francs ou dizaine de francs).

La deuxieme partie du code est l’exposant de 10 affectant les centimes (00pour les centimes, 01 pour les dizaine de centimes, 10 pour les Francs et 11pour les dizaines de Francs). L’exposant est code sur 2 bits e1, e0.

Les codes des differentes pieces sont donc donnes par le tableau de la fi-gure 3.10.

Il serait possible de completer ce code pour representer des sommes d’argentutilisant 2 pieces. On a alors des sommes de 3, 4, 6 ou 7 unites. On obtiendraitune table d’addition pour cette representation :

01001 + 10101 = 11101(20 centimes + 50 centimes = 70 centimes).

version en ligne - [PDF Document] (82)

74 Representation des grandeurs

m2 m1 m0 e1 e0 piece m2 m1 m0 e1 e0 piece

1 0 1 0 0 5 centimes 0 1 0 1 0 2 Francs0 0 1 0 1 10 centimes 1 0 1 1 0 5 Francs0 1 0 0 1 20 centimes 0 0 1 1 1 10 Francs1 0 1 0 1 50 centimes 0 1 0 1 1 20 Francs0 0 1 1 0 1 Franc

Fig. 3.10 – Codage des valeurs de pieces de monnaie francaise.

Etudier la technique d’addition dans cette representation, en particulier le casou 50 centimes + 50 centimes font 1 Franc et autres cas semblables.

Toutefois, on a aussi :

00111 + 01001 = 00111(10 Francs + 20 centimes = 10 Francs)

car cette representation ne comporte pas assez de chiffres significatifs pourdistinguer 10 et 10,2.

Etudier les possibilites offertes par un allongement de la mantisse sur6 bits par exemple. Etudier la technique d’addition nouvelle. Etudier lesrepresentations de sommes d’argent utilisant 3, 4, ou N pieces.

Dans la representation en virgule flottante classique, la mantisse a 24chiffres. Cela permet de ne negliger les centimes que pour des sommessuperieures a 224 centimes. C’est suffisant pour la comptabilite domestique,mais insuffisant pour une comptabilite d’entreprise par exemple.

version en ligne - [PDF Document] (83)

Chapitre 4

Representation des traitementset des donnees : langaged’actions

La programmation des dispositifs informatiques s’appuie sur un ensemblede modeles mathematiques simples, qui permettent de representer formelle-ment les donnees et les traitements qui leur sont appliques. Les langages ditsde haut niveau qu’on utilise pour ecrire des programmes (Pascal, Ada, C,...) sont des modeles de traitements et de donnees. Le langage machine d’unprocesseur particulier, ou un langage d’assemblage defini pour ce processeur,sont egalement des modeles de traitements, qualifies de modeles de bas ni-veau. Cette notion de niveau correspond au niveau d’abstraction auquel on seplace pour ecrire des programmes : les modeles de bas niveau sont prochesde la machine, alors que les modeles de haut niveau permettent de s’en abs-traire ; d’ailleurs les programmes ecrits en langage de haut niveau peuvent etrerendus independants de la machine sur laquelle on les execute. La definitionrigoureuse de la semantique de ces modeles, a tous les etages, est indispensablepour assurer la correction des diverses transformations necessaires pour passerd’une representation de traitement dans un langage de haut niveau a un objetexecutable par une machine.

Ceci est valable en ce qui concerne le logiciel — les etapes de la compilationd’un langage de haut niveau vers un langage machine particulier (Cf. Cha-pitres 12, 13, 18) — aussi bien que pour le materiel — les etapes de la traduc-tion d’un langage de description de circuits vers une realisation a l’aide d’unetechnologie particuliere (Cf. Chapitres 8, 11 et 10).

Les objectifs de ce chapitre et du suivant sont : a) definir les langages etles modeles mathematiques utilises ; b) donner les elements necessaires a lacomprehension de l’utilisation de ces objets mathematiques pour representerdes traitements informatiques ; c) donner la premiere etape de traduction desmodeles de haut niveau vers des modeles de plus bas niveau. L’etape suivanteest la traduction en langage d’assemblage (Cf. Chapitre 13).

version en ligne - [PDF Document] (84)

76 Representation des traitements et des donnees...

Le paragraphe 1. presente un petit langage d’actions (structuresde donnees et structures de controle). Le paragraphe 2. etudie larepresentation en memoire des types de base et des structures dedonnees ; nous introduisons le tableau MEM qui modelise la memoired’un ordinateur. Le paragraphe 3. montre comment transformersystematiquement les affectations du langage d’actions en acces au ta-bleau MEM. Le paragraphe 4. illustre sur un exemple de constructionde sequence chaınee le probleme de l’allocation dynamique de memoirenecessaire a la manipulation des structures de donnees recursives commeles sequences chaınees et les arbres. Le dernier paragraphe s’interesse a lafois aux traitements et aux donnees : la section 5. introduit les structuresde piles et de files, en etudiant a la fois la representation en memoire etles algorithmes associes.

1. Un langage d’actions

Le langage d’actions que nous decrivons brievement ci-dessous est tirede [SFLM93]. Nous supposons connues les notions de variable dans un lan-gage de programmation imperatif, de type des donnees.

1.1 Lexique : nommage des types et variables

Un algorithme commence toujours par un lexique, qui nomme en particulierles types et les variables utilises :

entier18 : le type entier dans [−218−1, 218−1 − 1]a, b, c : des entier18

1.2 Types de base et types construits

1.2.1 Types de base

La representation des types de base entier naturel, entier relatif, reel etcaractere par des vecteurs de booleens a ete vue au chapitre 3. On se donneune notation de ces types de base : entier, caractere, reel, booleen. Pour lesentiers on s’autorise une specification d’intervalle ; on ecrira par exemple :entier dans [0..255].

1.2.2 Construction de types, structures de donnees usuelles

Nous etudions ici les structures de donnees offertes par les constructeurs detypes usuels des langages de programmation (n-uplets, tableaux, pointeurs).

Pour decrire un type construit et le nommer, on ecrit :T : le type ...

ou les pointilles doivent etre completes par une expression de type, utilisantl’un des constructeurs decrits ci-dessous.

version en ligne - [PDF Document] (85)

1. Un langage d’actions 77

N-uplets Le constructeur de type n-uplet permet de grouper des informa-tions de types differents et de les manipuler comme un tout. On notera cesgroupements par des chevrons :

T1 : le type ...T2 : le type ...Structure12 : le type < x : un T1, y : un T2 >S : un Structure12

x et y sont des noms qui designent les champs de la structure. T1 et T2 sontdes types quelconques definis par ailleurs. Etant donne un objet S de typeStructure12, on accede aux informations elementaires du n-uplet par l’operationde selection des champs, notee . ; on ecrit ainsi S.x, S.y.

Le constructeur n-uplet correspond aux struct des langages C et C++, auxrecord des langages Pascal et Ada.

Tableaux Le constructeur de type tableau permet de grouper des informa-tions de meme type et d’y acceder par un indice. On note les tableaux par descrochets :

Elem : le type ...Tab : le type tableau sur [...] de Elem

En general [...] doit etre complete par la notation d’un type intervalle. EnPascal ou Ada, ces intervalles peuvent eux-memes etre definis d’apres des typesenumeres generaux. En C les tableaux sont toujours definis sur un intervalle dela forme [0..N], ou N est un entier strictement positif. Pour la suite de l’expose,nous nous restreignons a des intervalles d’entiers. On ecrira par exemple :

Tab : le type tableau sur [42..56] d’entiersT : un Tab { T est une variable de type Tab }L’acces aux elements du tableau est note par des crochets : T[42], T[43],

ou encore T[a+b], si a et b sont des noms de variables de type entier, dontles valeurs sont telles que a+b appartient a l’intervalle [42..56]. On peut aussiutiliser une notation indicee : T42, Ta+b.

L’acces aux elements par un indice permet de parcourir tous les elementsd’un tableau dans une boucle. En anticipant sur la notation des traitements(paragraphes 1.4 et 1.5), on ecrit typiquement :

Tab : le type tableau sur [42..56] d’entiersT : un Tabi parcourant [42..56]

T[i] ←− 2 * i

Pointeurs La notion de pointeur des langages de programmation commePascal, C, Ada, etc. est intimement liee a celle d’adresse. Nous revenons surce constructeur de type dans le paragraphe 2.

Le mot pointeur est un constructeur de type. Etant donne un type T, onappelle pointeur de T le type des adresses memoire d’objets de type T.

version en ligne - [PDF Document] (86)

78 Representation des traitements et des donnees...

L’operation de dereferencage s’applique a un objet de type pointeur de Tet son resultat est un objet de type T. On la note de maniere postfixee parune fleche verticale vers le haut : p↑ est l’objet dont l’adresse est p. On ecritpar exemple :

T : un type ; adT : le type pointeur de T ; t1 : un T ; pt : une adTt1 ←− pt↑Les variables de type pointeur peuvent avoir une valeur particuliere notee

NIL, qui signifie pointeur sur rien (Cf. Paragraphe 2.4.3).

1.3 Operateurs de base et expressions

Les expressions du langage sont formees a partir de noms de variablesdeclarees dans le lexique, de constantes des types de base, d’operateurspredefinis et d’appels de fonctions.

1.3.1 Expression conditionnelle et operateurs booleens

Une expression conditionnelle a la forme suivante : si C alors E1 sinon E2,ou C est une expression de type booleen et E1, E2 deux expressions de memetype, quelconque. Noter que les 2 expressions ci-dessous sont equivalentes, bienque differemment factorisees :

(si C1 alors E1 sinon E2) + (si C1 alors E3 sinon E4)si C1 alors E1+E3 sinon E2+E4

Pour les booleens, on considere les operateurs de base et, ou, non, ouexcl,etc. herites de l’algebre de Boole (Cf. Chapitre 2). On y ajoute les operateursbooleens dits sequentiels (ou non stricts) etpuis, oualors (en Ada : andthen,orelse).

La semantique de ces operateurs peut etre decrite par une transformationen expression conditionnelle :

expr1 etpuis expr2 { est identique a : } si expr1 alors expr2 sinon fauxexpr1 oualors expr2 { est identique a : } si expr1 alors vrai sinon expr2

1.3.2 Operateurs sur les nombres et les caracteres

Operations arithmetiques : On utilisera toutes les operationsarithmetiques usuelles : addition, multiplication, division, soustraction,etc., sur les types numeriques introduits ici, c’est-a-dire le type entier et letype reel.

Pour les entiers strictement positifs on considere egalement le reste et lequotient de la division entiere, en evitant les problemes de definition dus ausigne des operandes :

reste, quotient : deux entiers > 0 −→ un entier > 0{ reste(a,b) = r et quotient (a,b) = q si et seulement si a = bq + r,avec 0 ≤ r < b }

L’operation reste est souvent appelee modulo.

version en ligne - [PDF Document] (87)

1. Un langage d’actions 79

Operations sur les caracteres : On peut introduire sur le type de basecaractere des fonctions comme :

EstLettre ?, EstMajuscule ?, EstChiffre ?, ... : un caractere −→ un booleenMajusculeDe, MinusculeDe : un caractere −→ un caractere

Les premieres permettent de determiner a quel sous-ensemble de caracteres ap-partient un caractere donne. Les deuxiemes sont des fonctions de conversions.Par exemple : MajusculeDe (’a’) = ’A’.

Notons que, grace aux proprietes du code ASCII (Cf. Chapitre 3), toutesces fonctions peuvent etre codees en operations arithmetiques ou booleennessimples sur la representation en binaire des caracteres. Par exemple, pour pas-ser des majuscules aux minuscules il suffit d’inverser un bit, puisque l’ecartentre les codes de deux lettres correspondantes est une puissance de 2.

1.4 Affectation

L’action de base dans un langage d’actions est l’affectation, qui permet demodifier la valeur d’une variable. On la note par une fleche orientee a gauche :

X ←− exprT[3+z].u ←− expr

La partie gauche d’une affectation doit pouvoir designer un emplacementmemoire (nous y revenons dans le paragraphe 3.) ; la partie droite est uneexpression, dont le type doit etre compatible avec le type de la partie gauche.

Les langages de programmation proposent des notions de compatibilite detypes plus ou moins riches, des verifications statiques associees, ainsi que desconversions dynamiques implicites. Nous nous contenterons ici d’exiger que lestypes des parties gauche et droite soient identiques.

Toutefois on peut avoir besoin d’ecrire x ←− y, ou x est un reel et y un en-tier. Le codage binaire des entiers etant fort different de celui des reels (Cf. Cha-pitre 3), la representation en memoire de la variable y est necessairementdifferente de celle de x.

Pour mettre en evidence la conversion que cache ainsi l’affectation,nous utiliserons des fonctions de conversion de type (ou de changement derepresentation memoire) explicites :

EntierVersReel : un entier −→ un reel{ EntierVersReel (a) est le reel de valeur a }

Naturel31 : le type entier sur [0, 232−1 − 1]Entier32 : le type entier sur [−232−1, 232−1 − 1]Naturel31VersEntier32 : un Naturel31 −→ un Entier32{ NaturelVersEntier (n) est l’entier de valeur n }

Nous revenons sur la traduction en assembleur de ces fonctions au cha-pitre 13. Nous verrons en particulier que la traduction en langage d’assemblagede la fonction Naturel31VersEntier32 est un programme vide ! Au chapitre 3,paragraphe 3.1, nous signalions deja ce cas.

version en ligne - [PDF Document] (88)

80 Representation des traitements et des donnees...

1.5 Structures conditionnelles et iteratives

On se donne les constructions si ... alors ... sinon et si ... alors ... usuellesdans tous les langages de programmation imperatifs. Notons que l’on peut iciomettre la partie sinon, alors que c’est impossible pour une expression condi-tionnelle, qui doit avoir une valeur dans tous les cas. Autrement dit, ne rienfaire est une action particuliere.

Noter que les 3 actions suivantes sont equivalentes :

X ←− (si C1 alors E1 sinon E2) + (si C1 alors E3 sinon E4)X ←− (si C1 alors E1+E3 sinon E2+E4)si C1 alors X ←− E1+E3 sinon X ←− E2+E4

Une construction moins courante est le selon, qui permet de decrire uneanalyse par cas exhaustive et sans duplication de cas, pour les valeurs d’uneou plusieurs expressions de type quelconque. Dans l’exemple qui suit, A1, A2et A3 representent des actions quelconques.

X : un entierY : un caractereselon X, Y

X ≥ 0 et Y = ’a’ : A1X ≥ 0 et Y 6= ’a’ : A2X < 0 : A3

Cette structure generale doit souvent etre codee par une serie d’expressionsconditionnelles si ... alors ... sinon enchaınees, comme en Pascal, en C, ... Lesstructures case et switch de ces langages ne permettent en effet que desconditions de la forme expr = constante, pour des types dont les constantesont une notation dans le langage, c’est-a-dire les entiers, caracteres, typesenumeres. La structure selon a conditions quelconques existe en Lisp (cond),mais sa semantique est sequentielle et les differentes conditions ne sont pasnecessairement exhaustives.

Nous utilisons par ailleurs 3 structures iteratives : parcourant (qui corres-pond au for de Pascal, C, Ada, ...), tantque (qui correspond au while dePascal, C et Ada), repeter ... jusqu’a (qui correspond au do ... while de C,au repeat ... until de Pascal, au loop ... while de Ada).

La semantique de ces constructions est precisee par leur traduction en ma-chines sequentielles a actions (ou organigrammes) au chapitre 5.

On peut deja ramener la structure parcourant a une structure tantque :i parcourant [a .. b] : A{ Est equivalent a : }

i : un entier sur [a .. b+1]i ←− atantque i ≤ b :

A ; i ←− i + 1

version en ligne - [PDF Document] (89)

1. Un langage d’actions 81

1.6 Fonctions et actions parametrees

Pour definir une fonction on ecrira :

ExpressionCompliquee (a, b : deux entiers) −→ un entier{ a et b sont les noms des parametres, de type entier, de la fonction nommeeExpressionCompliquee. Le resultat est de type entier egalement }lexique local :

x : un entier { Pour des calculs intermediaires }algorithme

x ←− (a+b)*2{ Description du resultat de la fonction : }ExpressionCompliquee (a,b) : x + x*x

Pour definir une action on ecrira :

CalculerExpressionCompliquee : une action(les donnees a, b : deux entiers ;{ parametres dont la valeur est utilisee par l’action }

le resultat r : un entier) { parametre dont la valeur est modifiee par l’action }lexique local :

x : un entier { Pour des calculs intermediaires }algorithme

x ←− (a+b)*2 ; r ←− x + x*x

Un contexte d’utilisation de la fonction ExpressionCompliquee et de l’actionCalculerExpressionCompliquee est decrit ci-dessous :

u, v, w, w1, w2 : des entiersw ←− ExpressionCompliquee (u, v) + ExpressionCompliquee (2*u, v−1)CalculerExpressionCompliquee (u, v, w1) ;CalculerExpressionCompliquee (2*u, v−1, w2) ;w ←− w1+w2

Les noms qui apparaissent dans la liste de parametres de la definition d’uneaction ou fonction sont appeles parametres formels. Les expressions qui appa-raissent entre parentheses dans les appels de fonctions ou actions sont appelesparametres effectifs ou arguments. Les parametres effectifs donnees sont desexpressions quelconques du type defini par le parametre formel correspondant.Les parametres effectifs resultats sont des expressions qui pourraient figurer enpartie gauche d’affectation, c’est-a-dire qui designent un emplacement memoire(Cf. Paragraphe 2.2.1 du chapitre 13 pour comprendre cette contrainte).

Les noms definis dans le lexique local ont une portee reduite au corps del’action ou fonction : cela signifie qu’ils ne sont pas utilisables ailleurs dans letexte d’un programme. D’autre part deux variables locales de deux actions oufonctions differentes peuvent porter le meme nom.

version en ligne - [PDF Document] (90)

82 Representation des traitements et des donnees...

1.7 Entrees/Sorties

On utilisera les actions Lire et Ecrire, pour tout type de donnees, et avec unnombre quelconque de parametres.

Les parametres de Lire sont des resultats, ceux de Ecrire sont des donnees.Une utilisation typique est decrite ci-dessous :lexique : x, y : des entiersEcrire (”Donnez deux entiers : ”) ; Lire (x, y)Ecrire (”Somme des deux entiers : ”, x+y)

2. Representation des donnees en memoire

Nous avons vu au chapitre 3 les principes de codage des types de base enbinaire. Ce paragraphe traite de deux aspects : 1) la representation binaire desvaleurs des variables d’un langage de programmation (types simples, tableaux,structures, etc.), a partir du codage binaire des types de base ; 2) l’installationdes variables d’un programme en memoire.

Les choix de representation des types structures sont en general guidespar une notion de cout (simplicite, complexite en memoire ou en temps) desoperations de base a realiser sur les objets du type considere.

2.1 Une modelisation de la memoire : le tableau MEM

Nous introduisons le tableau MEM, comme abstraction de la memoire d’unordinateur. C’est un tableau a une seule dimension, indice par les naturels d’unintervalle [0..tmem-1], et dont les elements representent les unites adressablesde la memoire d’une machine.

L’unite adressable est un vecteur de booleens. Dans une machine reelle c’estpresque toujours superieur au bit ; certaines machines ont propose des unitesadressables de 9 bits. Dans la suite de cet ouvrage nous nous interessons —sauf mention contraire — au cas des octets, c’est-a-dire aux unites adressablesde 8 bits. C’est une taille commode pour la representation du type caractereen memoire. tmem represente donc la taille de la memoire en octets.

La notion d’unite adressable, superieure au bit, est une maniere d’expri-mer que, dans une machine reelle, des contraintes de realisation materielleempechent d’acceder efficacement a chaque bit de la memoire individuellement(Cf. Chapitres 9 et 15).

2.2 Representation en memoire des types de base

2.2.1 Representation en memoire des booleens

L’ideal pour la representation en memoire d’une information de typebooleen serait d’utiliser 1 bit ; mais il est irrealiste, pour des raisons materielles,d’acceder a un bit individuel dans la memoire. On choisit donc la plus petite

version en ligne - [PDF Document] (91)

2. Representation des donnees en memoire 83

taille possible : une unite adressable (voir toutefois le paragraphe 2.4.2 pourle cas particulier des tableaux de booleens, ou l’on peut esperer gagner de laplace). Il faut convenir d’un codage des deux constantes vrai, faux parmi les 2k

configurations d’une unite adressable de k bits.Rien n’empeche, a priori, de choisir, vrai = 4210 et faux = 7710 (sur un octet

par exemple). Le choix du bon codage depend essentiellement de la realisationdes operations dans lesquelles intervient un operande ou un resultat de typebooleen. Il faut penser aux operations internes du type booleen (conjonction,disjonction, ...) et a la fabrication de valeurs booleennes par comparaison dedeux entiers par exemple (qui apparaıt bien sur dans si X < Y alors ... maisaussi dans des expressions de la forme : B ←− (X < Y)).

Pour vrai = 4210 et faux = 7710, il est difficile de decrire la conjonction dedeux booleens a et b plus simplement que par :si a=42 alors si b = 42 alors 42 sinon 77 sinon 77.

Dans le langage C, le choix est le suivant : 0 represente faux, toute autrevaleur represente vrai ; une conjonction peut alors etre realisee a l’aide del’operateur et logique disponible sur tous les processeurs.

2.2.2 Representation en memoire des entiers

Nous avons suppose l’existence d’un type de base entier. Les types dedonnees qui permettent de definir des entiers dans les langages de program-mation usuels correspondent le plus souvent a des entiers bornes, c’est-a-dire ades intervalles d’entiers. En C, par exemple, on declare des entiers en precisantleur taille et en decidant si ce sont des entiers naturels ou relatifs.

Il existe des langages, comme scheme [Aa91], dans lesquels les traitementsd’entiers sont dits a precision infinie. C’est un abus de langage pour expri-mer que la taille des entiers manipulables n’est pas statiquement bornee : lasimple addition de deux entiers peut provoquer l’allocation d’une zone memoiresupplementaire necessaire a la representation du resultat. Le terme infini estabusif puisque, meme si l’on consacre toute la memoire de la machine a larepresentation d’un seul entier, l’intervalle des valeurs representables n’en estpas moins borne.

2.2.3 Probleme de la taille des entiers

Si le type entier du langage de haut niveau que l’on considere designe unintervalle d’entiers suffisamment petit, les valeurs de ce type peuvent etrerepresentees en memoire dans une seule unite adressable. Par exemple, unoctet suffit pour representer en complement a deux les entiers de l’intervalle[−28−1, 28−1−1] ou, en binaire pur, les entiers de l’intervalle [0, 28−1] (Cf. Cha-pitre 3).

Si le type entier designe un intervalle plus grand, il devient necessaire d’uti-liser plusieurs unites adressables pour la representation d’une seule valeur detype entier. On utilise dans ce cas des unites adressables contigues, et l’on

version en ligne - [PDF Document] (92)

84 Representation des traitements et des donnees...

considere un nombre entier d’unites adressables. Pour representer les entiersde l’intervalle [−218−1, 218−1 − 1], qui necessitent 18 bits, on utilisera donc 3octets. Nous avons vu au chapitre 3, paragraphes 2. et 3., comment etendre larepresentation binaire d’un entier a un plus grand nombre de bits.

Notation Nous noterons taille(T) le nombre d’unites adressables necessairesa la representation en memoire d’un objet de type T. Ainsi, par exemple,taille(entier dans [−218−1, 218−1 − 1]) = 3, si l’unite adressable est l’octet.

2.2.4 Representation en memoire des entiers qui ne tiennent pasdans une unite adressable

Considerons par exemple un entier x quelconque de l’intervalle[−232−1, 232−1 − 1]. Notons x31....x0 le codage en complement a deux de x,qui necessite bien 32 bits, donc 4 octets. La suite de 32 bits x31....x0 doitetre decoupee en 4 portions de 8 bits, evidemment contigus, ce qui donne :t4 = x31...x24, t3 = x23...x16, t2 = x15...x8, t1 = x7...x0. Notons qu’une de cestranches, prise isolement, n’a pas necessairement de sens par rapport a la va-leur de l’entier x. Par exemple, seul le bit de poids fort de la tranche t4 portel’information sur le signe de x, en cas de codage en complement a 2.

Pour representer x en memoire, on utilise 4 unites adressables contigues,c’est-a-dire 4 cases consecutives du tableau MEM : MEM[a], MEM[a+1],MEM[a+2] et MEM[a+3].

Un choix subsiste sur le placement des 4 tranches t1, t2, t3 et t4 dansles cases MEM[a], MEM[a+1], MEM[a+2] et MEM[a+3]. Comme on respectel’ordre entre les tranches, les deux choix possibles sont :

– t1 dans MEM[a], t2 dans MEM[a+1], t3 dans MEM[a+2] et t4 dansMEM[a+3] ; ce placement est appele petit boutiste : les poids faibles de xapparaissent en premier, dans l’ordre des adresses.

– t1 dans MEM[a+3], t2 dans MEM[a+2], t3 dans MEM[a+1] et t4 dansMEM[a] ; ce placement est appele gros boutiste : les poids forts de x ap-paraissent en premier, dans l’ordre des adresses.

Remarque : L’existence de ces deux conventions differentes est une causeimportante de non compatibilite entre systemes informatiques, des qu’il fauttransferer des fichiers. Dans le domaine des reseaux, il existe un standard, c’estle choix gros boutiste. Sur les machines qui font le choix inverse, les donneesdoivent etre transformees avant d’etre transmises. Voir aussi l’exercice E4.1.

2.3 Les acces au tableau MEM

Nous venons de voir que des variables de types simples comme les entierspeuvent necessiter plusieurs unites adressables. Nous nous interessons donc auprobleme de l’acces simultane a plusieurs unites adressables contigues.

version en ligne - [PDF Document] (93)

2. Representation des donnees en memoire 85

La situation decrite ci-dessous n’est pas la plus generale que l’on pourraitimaginer. Elle est guidee par les contraintes materielles de liaison entre leprocesseur et la memoire, que nous etudierons au chapitre 15.

Tout d’abord, nous ne nous interessons qu’au cas de blocs d’unites adres-sables en nombre egal a une puissance de 2 (pour ne pas perdre d’espaced’adressage, Cf. Chapitre 15). D’autre part, sur la plupart des machines, lesacces ne sont permis que lorsque l’adresse est un multiple de la taille du trans-fert (les autres acces ne sont pas necessairement implementes parce qu’ils sontmoins efficaces). Cette restriction est connue sous le nom de contrainte d’ali-gnement memoire.

Les contraintes materielles d’acces a la memoire ont egalement pourconsequence que les acces simultanes a un nombre quelconque d’unites adres-sables ne peuvent pas constituer des operations elementaires dans une machine(un processeur) usuel. Les affectations de memoire presentees ci-dessous, in-dicees par le nombre d’unites a transferer, sont en petit nombre, fixe.

Nous noterons ←− k une affectation de taille k, c’est-a-dire un transfertsimultane de k unites adressables. Nous considerons par la suite les affecta-tions :

x ←− 1 MEM[a]{ L’unite adressable d’indice a dans le tableau MEM est copiee dans la variablex (supposee de taille adequate) }

x ←− 2 MEM[a]{ Valide si a est multiple de 2. Les deux unites adressables d’indices a et a+1sont copiees dans la variable x (supposee de taille adequate). }

x ←− 4 MEM[a]{ Valide si a est multiple de 4. Les quatre unites adressables d’indices a, a+1,a+2 et a+3 sont copiees dans la variable x (supposee de taille adequate). }

Il existe en general une operation elementaire de transfert de 4 octets dansles machines dites 32 bits, une operation de transfert de 8 octets dans lesmachines 64 bits, ...

2.4 Representation en memoire des types construits

2.4.1 Representation en memoire des n-uplets

Les n-uplets, de meme que les entiers suffisamment grands, demandent plu-sieurs unites adressables. On utilise lorsque c’est possible des unites contigues.Considerons les definitions de type :

T1 : le type entier dans [−232−1, 232−1 − 1]T2 : le type entier dans [−216−1, 216−1 − 1]Structure12 : le type < x : un T1, y : un T2 >Structure21 : le type < x : un T2, y : un T1 >

Une valeur de type Structure12 occupe 6 unites adressables consecutives,d’adresses a, a + 1, ... a + 5. Le champ x commence a l’adresse a, et le champy a l’adresse a + 4.

version en ligne - [PDF Document] (94)

86 Representation des traitements et des donnees...

En suivant le meme raisonnement que precedemment, une valeur detype Structure21 semble pouvoir occuper 6 unites adressables consecutives,d’adresses a, a + 1, ... a + 5. Le champ x commence a l’adresse a, et le champy a l’adresse a + 2. Toutefois le champ y est de taille 4 si l’unite adressableest l’octet. Si l’on veut pouvoir acceder a ce champ globalement (un seul accesmemoire), son adresse doit etre un multiple de 4. De meme le champ x est detaille 2, donc son adresse doit etre paire.

Ces contraintes d’alignement en memoire empechent de placer un objet detype Structure21 a une adresse quelconque. De plus, pour satisfaire la contrainted’alignement pour le champ y, on doit menager un espace entre le champ x etle champ y.

Nous donnons au paragraphe 2.4.2 une solution de representation enmemoire qui evite de perdre trop de place dans le cas d’un tableau de struc-tures.

La directive d’alignement .align usuelle dans les langages d’assemblage estintroduite au chapitre 12 et son utilisation dans la traduction des langages dehaut niveau en langage d’assemblage est etudiee au chapitre 13.

Remarque : Certaines machines (pentium MMX, sparc VIS) proposentdes instructions specifiques et un codage efficace pour une structure parti-culiere qui permet de decrire une couleur : elle comporte 4 champs r, g, b, lpour les proportions de rouge, vert (green) et bleu, et la luminosite.

2.4.2 Representation en memoire des tableaux

Comme mentionne plus haut, un tableau permet de grouper des informa-tions de meme type et d’y acceder par un indice.

Placer les elements du tableau dans des unites adressables consecutivespermet d’exprimer simplement l’adresse d’un element du tableau en fonctionde son indice et de l’adresse de debut du tableau. Le fait que l’adresse d’unelement soit ainsi calculable conduit a un codage simple des boucles d’accesau tableau (Cf. le paragraphe sur l’optimisation des parcours de tableaux ci-dessous).

Tableaux a une dimension Considerons le type Tab :Tab : le type tableau sur [42..56] d’entiers dans [−232−1, 232−1 − 1]

Une valeur T de ce type necessite 4 × (56 − 42 + 1) unites adressables. 4 estle nombre d’unites necessaires pour un element, et (56− 42 + 1) est le nombred’elements du tableau. Si a est l’adresse de la premiere unite adressable utiliseepour T, l’element T[i] occupe les unites d’adresses a+d+0, a+d+1, a+d+2et a + d + 3, ou d = (i− 42)× 4.

Dans le cas particulier ou l’intervalle des indices du tableau commence a 0,par exemple T : un tableau sur [0..N-1] de T’, la formule qui donne l’adresse deT[i] en fonction de l’adresse a de debut de T est plus simple : d = i× taille (T’).

La prise en compte des contraintes d’alignement peut imposer de menagerdes espaces perdus entre les elements du tableau. Si le type T’ des elements

version en ligne - [PDF Document] (95)

2. Representation des donnees en memoire 87

est tel que deux objets de type T’ peuvent toujours etre places cote a coteen memoire, il n’y a pas de place perdue. C’est le cas par exemple pourT’ : le type < c1, c2, c3 : des caracteres >.

En revanche, si T’ est le type Structure12 etudie au paragraphe precedent,on doit menager un espace de deux octets entre deux elements, de maniere asatisfaire la contrainte d’alignement sur des adresses multiples de 4 du champx.

On peut conserver la formule qui donne l’adresse T[i] en fonction de l’adressea de debut de T, a condition de redefinir la notion de taille necessaire a larepresentation d’un type. Par exemple, taille align (Structure12) = 8, et non 6.

Remarque : cette fonction correspond a la macro-notation sizeof du lan-gage C, applicable a un nom de type ou a une expression typee.

Cas particulier des tableaux de booleens Nous avons vu plus haut qu’unbooleen seul occupe un octet. Lorsqu’on considere un tableau de booleens,il devient interessant d’essayer de gagner de la place en choisissant unerepresentation plus compacte. Considerons le tableau T defini par :

T : un tableau sur [0, N−1] de booleens

Les elements de T peuvent etre places en memoire a partir d’une adresse a, araison d’un element par bit. Le tableau complet occupe alors N/8 octets aulieu de N . La position de l’element de rang i est determinee par : le numerode l’octet dans lequel il se trouve ; le numero de bit dans l’octet. On obtientces deux informations en prenant respectivement le quotient et le reste de ladivision entiere de i par 8.

Cas particulier des tableaux de structures Soit le tableau T defini par :TabStruct : le type tableau sur [0..N-1] de Structure21T : un TabStruct

La representation memoire proposee ci-dessus pour T perd 2 octets pourchaque element, c’est-a-dire 2 × (N − 1). Si la taille memoire est un critereimportant, on peut envisager une representation memoire tiree de la transfor-mation suivante :

StructTab : le type <tx : un tableau sur [0..N-1] de T2 ;ty : un tableau sur [0..N-1] de T1 >

T : un StructTab

Il y a une correspondance evidente entre les objets de type TabStruct etceux de type StructTab. Les elements du champ tx, de taille 2, peuvent etreplaces cote a cote sans perte de place ; de meme les elements du champ ty. Onperd eventuellement deux octets entre le tableau tx et le tableau ty, mais c’esttres inferieur a 2× (N − 1).

version en ligne - [PDF Document] (96)

88 Representation des traitements et des donnees...

Parcours de tableaux et optimisation Nous traitons ici un exempleclassique qui permet de comprendre le codage optimise des parcours detableaux en langage d’assemblage, comme on l’observe dans la plupart descompilateurs. Considerons l’algorithme suivant :

LexiqueN : l’entier ... ; i : un entier dans [0..N]T : un tableau sur [0..N−1] d’entiers dans [−232−1, 232−1 − 1]

algorithmei ←− 0tant que i < N

T[i] ←− 2*i + 1i ←− i+1

La premiere transformation consiste a faire apparaıtre le tableau MEM quimodelise la memoire, et l’installation des elements de T en memoire. On noteaT l’adresse de debut de T en memoire. On obtient :

lexique : E : l’entier taille align(entier dans [−232−1, 232−1 − 1])algorithme :

i ←− 0tant que i < N

MEM [aT + E * i] ←− 2*i + 1i ←− i+1

La deuxieme transformation consiste a ajouter une variable redondante Adpour representer l’adresse de l’element courant en memoire. Cette variable estliee a l’indice i du tableau par la propriete Ad = aT + E * i que l’on installeavant la boucle, et que l’on maintient en modifiant Ad lors de toute modificationde i. On obtient :

i ←− 0 ; Ad ←− aT + E * itant que i < N{ Invariant : Ad =aT + E * i }MEM [Ad] ←− 2*i + 1i ←− i+1 ; Ad ←− Ad + E

Remarque : La propriete qui lie Ad est i est un invariant de programme.Pour un expose complet sur la notion d’invariant, voir par exemple [BB83].

Cette transformation, qui consiste a factoriser le calcul de l’adresse dansle tableau MEM et a eviter les multiplications, est une technique usuelle encompilation et optimisation des programmes (voir par exemple [CGV80]).

Tableaux a plusieurs dimensions Nous considerons ici le cas des tableauxa 2 dimensions. Le cas des tableaux a k dimensions s’en deduit avec quelquesprecautions (exercice E4.6).

Considerons le type Tab :N, M : des entiers > 0Tab : le type tableau sur [0..M-1, 0..N-1] de T’

version en ligne - [PDF Document] (97)

2. Representation des donnees en memoire 89

(b)

MEM

a T[0,0]

........

T[1,0]

T[2,0]

T[0,1]

T[1,1]

T[2,1]

(c)

MEM

a T[0,0]

T[0,1]

T[0,2]

T[0,3]

T[1,0]

T[1,1]........

0 1 2 3=N-1

1

2=M-1

(a)

T[1,3]T[2,0] T[2,1] T[2,2]

T[0,0] T[0,1] T[0,2] T[0,3]

T[1,0] T[1,1] T[1,2] T[1,3]

T

Fig. 4.1 – Representation en memoire des tableaux a deux dimensions

T : un Tab

La representation de T en memoire necessite N ×M × taille align(T’) unitesadressables.

La figure 4.1 illustre les choix de placement des elements de T dans letableau MEM, dans le cas ou N = 4 et M = 3. Noter que la representation deT sous forme de matrice (a), et le choix de la dimension qu’on appelle ligne sontconventionnels ; nous convenons ici que dans l’expression T[i,j], i represente unnumero de ligne et j un numero de colonne.

Dans le cas (b), on range les elements de T ligne par ligne, et l’adresse del’element T[i,j] s’exprime par la formule : a + (i×N + j)× taille align (T’), oua est l’adresse de debut du tableau.

Dans le cas (c), on range les elements colonne par colonne, et l’adresse del’element T[i,j] s’exprime par la formule : a + (j ×M + i)× taille align (T’).

Noter la symetrie des deux formules.

Remarque : Nous reservons le terme de tableau a deux dimensions auxstructures implantees de maniere contigue. En Java, on appelle tableau a deuxdimensions une structure de donnees plus compliquee qui consiste en un ta-bleau a une dimension de pointeurs sur des tableaux a une dimension. Dansce cas les lignes (ou colonnes) ne sont plus necessairement contigues.

2.4.3 Representation en memoire des pointeurs

NIL : un pointeur { compatible avec tous les pointeurs de T }T : un type

version en ligne - [PDF Document] (98)

90 Representation des traitements et des donnees...

adT : le type pointeur de Tt1 : un T ; pt : une adTt1 ←− pt↑La variable pt contient une valeur a qui est une adresse dans le tableau

MEM. C’est donc un entier, d’une certaine taille majoree par la taille de lamemoire disponible de la machine.

Nous avons vu dans ce qui precede que, lorsque les valeurs des objets(structures ou non) necessitent plusieurs unites d’acces, celles-ci sont contigues.Ainsi, pour reperer de maniere non ambigue une valeur en memoire, il suffitde connaıtre : 1) l’adresse de la premiere unite d’acces ou elle est stockee ; 2)le nombre d’unites d’acces utilisees, qui peut se deduire de son type.

Nous avons vu (paragraphe 1.2.2) que pointeur de T est le type des adressesmemoire d’objets de type T. Le type pointeur de T specifie donc l’informa-tion de taille, necessaire par exemple a la traduction des affectations commet1 ←− pt↑.

On dit que pt pointe sur un objet qui occupe dans le tableau MEM, taille(T)unites adressables d’adresses a + 0, ... a + taille(T)− 1.

La constante NIL est de type pointeur, compatible avec tous les typespointeur de T, quel que soit T. Elle represente le pointeur sur rien, et doit etrecodee par une valeur qui n’appartient pas a l’ensemble de valeurs que peuventprendre les autres pointeurs. Avec la vision abstraite de la memoire que nousavons adoptee jusque la, il suffit de choisir NIL : l’entier tmem, si MEM estdefini sur l’intervalle [0..tmem-1]. Dans la realite, la plupart des compilateurschoisissent de coder NIL par l’entier 0 qui est facile a tester (par convention 0n’est alors pas une adresse valide).

3. Traduction des affectations generales en

acces au tableau MEM

Considerons un type T et deux variables de type T nommees x et y, ins-tallees dans le tableau MEM a des adresses ax et ay. Dans la definition dulangage d’actions utilise, nous avons exige que l’affectation porte sur des ob-jets de meme type. L’affectation se traduit donc toujours par une simple recopiedu contenu d’une zone de memoire vers une autre (pour les affectations deslangages moins contraignants, qui cachent des conversions, nous verrons auchapitre 13, paragraphe 1.2, comment coder les fonctions de conversion intro-duites au paragraphe 1.4 ci-dessus). On s’interesse ici a la traduction de l’actionx ←− y en n’utilisant plus que les acces de taille fixee au tableau MEM decritsau paragraphe 2.3.

Lorsqu’une affectation porte sur des objets dont le type necessite un grandnombre d’unites adressables, on ne peut pas la traduire par l’utilisation d’uneaffectation indicee par la taille, supposee etre une operation de base dans lesmachines. Il faut alors traduire l’affectation par une boucle ou une sequence

version en ligne - [PDF Document] (99)

4. Utilisation des pointeurs et gestion dynamique de la memoire 91

d’affectations.

3.1 Affectation de structures

On peut envisager essentiellement deux methodes : la methode structurelle,dans laquelle on traduit une affectation de structures par la sequence des af-fectations champ par champ ; la methode aveugle, dans laquelle on a oublie letype, et ou l’on traduit une affectation de structures par le bon nombre d’accesau tableau MEM, de la taille la plus grande possible.

3.2 Affectation de tableaux

Considerons le programme suivant :Elem : un typeT : le type tableau sur [a...b] de Elemt1, t2 : des T ;t1 ←− t2{ est equivalent a : }

i parcourant a...bt1[i] ←− t2[i]

Si Elem est lui-meme structure, il faut continuer le raisonnement pour rem-placer t1[i] ←− t2[i] par une sequence ou une boucle d’affectations pluselementaires.

4. Utilisation des pointeurs et gestion

dynamique de la memoire

Quand on utilise des pointeurs, par exemple pour decrire la constructiond’une sequence chaınee d’entiers dont le nombre d’elements n’est connu qu’al’execution, la memoire contient des donnees qui ne correspondent pas direc-tement a des noms de variables definis par le programmeur. Ces donnees sontaccessibles via des variables de type pointeur, dont les valeurs sont des adressesdans le tableau MEM.

Nous donnons figures 4.2 et 4.3 un exemple typique de construction d’unestructure de donnees recursive.

Pour permettre la creation et la destruction de cellules lors de la construc-tion de la sequence, on utilise les actions Allouer et Liberer, qui se comportentcomme des requetes a un dispositif capable de distribuer de la memoire : Allouerpermet de reserver une zone de memoire contigue, en en precisant la taille ;Liberer declare que la zone ne sera plus utilisee ; des requetes d’allocation suc-cessives, sans liberation, obtiennent des adresses de zones memoire disjointes.

La maniere la plus simple de voir les choses est de considerer que, dans unprogramme qui utilise des pointeurs, tout se passe comme si le programmeur

version en ligne - [PDF Document] (100)

92 Representation des traitements et des donnees...

lexique (types et variables)Info : le type entier dans [0..255]Cellule : le type < x : une Info, suiv : un pCellule >pCellule : le type pointeur de Celluleinf, sup : des entiers ; LaSequence : un pCellule

ConstruireSequenceChaınee : une action(les donnees i,j : deux entiers ; le resultat p : un pCellule){ etat final : p est l’adresse d’une premiere cellule qui contient l’informationi. Celle cellule pointe sur une cellule qui contient l’information i+1. Ainside suite jusqu’a une cellule qui contient j. Cette derniere cellule ne pointesur rien (suiv = NIL). }

lexiquepcour, pprec, fictif : des pCellule ; k : un entier

algorithmeAllouer (fictif, taille (pCellule))si fictif = NIL alors

Ecrire (”Allocation impossible”)sinon

pprec ←− fictif ; fictif↑.suiv ←− NILk ←− i ; pcour ←− fictiftantque pcour 6= NIL et k ≤ j :

Allouer (pcour, taille (pCellule))si pcour = NIL alors Ecrire (”Allocation impossible”)sinon

pcour↑.x ←− k ; pcour↑.suiv ←− NILpprec↑.suiv ←− pcourpprec ←− pcour ; k ←− k+1

p ←− fictif↑.suivLiberer (fictif, taille (pCellule))

algorithme du programme principal :Ecrire (”Donnez deux entiers : ”) ; Lire (inf, sup) ;ConstruireSequenceChaınee (inf, sup, LaSequence)

Fig. 4.2 – Algorithme de construction d’une sequence chaınee

sup

fictif

inf

LaSequence

Fig. 4.3 – Une sequence chaınee

version en ligne - [PDF Document] (101)

4. Utilisation des pointeurs et gestion dynamique de la memoire 93

avait explicitement declare un grand tableau d’octets, et fourni des actionsAllouer et Liberer capables de gerer l’occupation de ce tableau. C’est d’ailleurs lecas dans certaines applications ou la gestion de la memoire doit etre optimisee.

Les environnements de programmation et les langages usuels offrent toute-fois des actions Allouer et Liberer, que l’on peut utiliser si l’on ne se preoccupepas particulierement de l’efficacite des allocations. En C sous systeme unix,les fonctions malloc et free sont fournies dans une bibliotheque standard.Dans ce cas il n’est pas necessaire que le programmeur declare explicitementun tableau.

Pour comprendre exactement comment fonctionne ce dispositif d’allocationmemoire dite dynamique, il faut comprendre toutes les phases de traduction deslangages de haut niveau en langage machine (Cf. Chapitres 12 et 13) ainsi queles etapes de la vie d’un programme, de l’ecriture du texte jusqu’a l’installationdu programme en langage machine dans la memoire vive d’une machine, pourexecution par le processeur (Cf. Chapitres 18 et 20).

Toutefois, du point de vue du programmeur qui utilise des pointeurs commedans l’exemple de la figure 4.2, tout se passe comme si une partie du tableauMEM etait reservee pour les allocations et liberations de zones memoire as-sociees a des pointeurs. Ce n’est bien sur qu’une partie de la memoire. Eneffet, nous verrons dans la suite de cet ouvrage que, lors de l’execution d’unprogramme utilisateur, la memoire vive de la machine est occupee par denombreuses informations autres que les objets du programme proprement dit.D’autre part, meme si l’on ne considere que la memoire necessaire aux donneesdu programme utilisateur, il faut distinguer deux zones necessairement dis-jointes :

– une zone dans laquelle l’outil d’installation du programme en memoire (lechargeur, Cf. Chapitre 20) place les variables du lexique global. Elles restentau meme endroit pendant toute la duree de vie du programme, et elles sonttoujours placees de la meme maniere les unes par rapport aux autres, d’uneexecution a une autre. Nous verrons au chapitre 13 comment le compilateurprepare ce placement en memoire vive, en precalculant les deplacements desdifferentes variables par rapport a une adresse de base qui ne sera connueque lors du chargement. Ce precalcul est qualifie d’allocation statique, parcequ’il est independant des executions ; seule l’adresse de base depend del’execution.

– une zone dans laquelle les allocations et liberations a la demande du pro-gramme sont effectuees. Cette zone contient les zones de memoires allouees,ainsi que les informations necessaires a sa gestion : zones encore disponibles,zones occupees. Cette zone est appelee le tas.

4.1 Specification des actions Allouer et Liberer

Les actions Allouer et Liberer peuvent donc etre specifiees et comprisesen considerant qu’une partie de la memoire est reservee a cet usage. Nous

version en ligne - [PDF Document] (102)

94 Representation des traitements et des donnees...

considerons ici que le tableau MEM est partitionne en deux : une premiereportion P1, qui va de l’indice 0 a l’indice T , dans laquelle on trouve en par-ticulier les variables du lexique global ; une deuxieme portion P2 qui va del’indice T + 1 a l’indice du dernier element tmem−1, dans laquelle on trouveles blocs alloues dynamiquement et les informations de gestion du tas.

Allouer : une action (le resultat : un pointeur ; la donnee : un entier > 0){ Allouer (p, n) reserve dans la zone de memoire comprise entre les indicesT +1 et tmem−1 une zone contigue de n elements, demarrant sur une frontieremultiple de n. p est l’adresse de la premiere unite adressable de cette zonereservee. Si l’espace disponible est deja entierement occupe, la valeur finalep = NIL exprime l’impossibilite d’allouer.C’est une action generique, qui convient pour tout type de pointeur. }

Liberer : une action (la donnee : un pointeur ; la donnee : un entier > 0){ Liberer (p, n) restitue la zone de memoire situee entre les adresses p incluseet p+n exclue. }

4.2 Realisation des actions Allouer et Liberer

Les deux actions Allouer et Liberer gerent la zone de memoire P2 compriseentre les indices T +1 et tmem−1. Elles doivent tenir a jour un etat de l’occupa-tion des elements de cette zone : lesquels sont libres, lesquels sont occupes, etc.Ces informations sur l’etat de la zone de memoire sont de nouvelles variables,qui peuvent etre rangees dans la meme zone.

L’algorithme de l’action Allouer paraıt simple : il semble suffire de distribuerles portions de la zone de memoire a gerer de maniere sequentielle, dans l’ordredes demandes. Mais c’est raisonner sans tenir compte de l’action Liberer, quipeut creer des trous, reutilisables par des appels ulterieurs de l’action Allouer.L’algorithme se complique. Differentes politiques d’allocation de la memoireapparaissent, selon que l’on prefere utiliser pour une nouvelle allocation : lepremier trou de taille suffisante (dans un certain ordre d’exploration de lazone memoire qui depend de l’algorithme ; l’idee de prendre le premier accelerela recherche) ; le trou dont la taille est la plus proche de la taille demandee(provoque une tendance a l’emiettement) ; le trou dont la taille est la pluseloignee de la taille demandee...

Il existe une litterature prolifique sur les diverses manieres de gerer ainsiune zone de memoire ou les demandes et restitutions se font dans un ordrequelconque. Le lecteur consultera par exemple [Kra85].

Le probleme general de la gestion d’un espace memoire pour l’installationdispersee de blocs est present dans toutes les couches de l’architecture logi-cielle d’un ordinateur. Nous le reverrons au chapitre 19 a propos d’installationdes fichiers sur un disque, puis au chapitre 20 a propos d’installation d’unprogramme en memoire vive et de demarrage du systeme.

version en ligne - [PDF Document] (103)

5. Piles, files et traitements associes 95

5. Piles, files et traitements associes

Les piles et les files sont des structures de donnees tres utilisees dans tousles domaines de l’informatique. Nous precisons ci-dessous les operations uti-lisees dans cet ouvrage. Dans certains chapitres nous serons amenes a precisercomment sont implantes les types Pile et File, et comment sont programmeesles operations de manipulation de ces types.

Dans une pile, les elements sont extraits dans l’ordre inverse de leur ordred’insertion (en anglais last in, first out, ou LIFO). Dans une file, les elementssont extraits dans l’ordre de leur insertion (en anglais first in, first out, ouFIFO). Voir par exemple [BB88] pour une specification formelle des structuresde pile et de file et une etude de la programmation de ces structures (par destableaux, des sequences chaınees, ...).

Nous considerons ici des piles et des files de taille eventuellement bornee,d’ou la notion de pile (ou de file) pleine. Une pile ou une file peut egalementetre vide. Ajouter un element a une pile ou file n’est possible que si elle n’estpas pleine ; oter un element n’est possible que si elle n’est pas vide.

5.1 Specification d’une pile

Elem : un typePileElem : un type { sans prejuger de la representation des piles par des structures

de donnees particulieres }TailleMax : un entier > 0

Initialiser : une action (le resultat P : une PileElem){ etat final : P est la pile vide }

Empiler : une action (la donnee-resultat P : une PileElem ; la donnee x : un Elem ;le resultat ok : un booleen){ etat initial : Notons k le nombre d’elements presents dans la pile ; si la pileest vide : k = 0 ; si la pile est pleine : k = TailleMax . Notons P=α1...αk lecontenu de la pile.etat final : Si k = TailleMax, P = α1...αk et ok=faux sinon, ok=vrai et P =α1...αk x }

Depiler : une action (la donnee-resultat P : une PileElem ; le resultat x : un Elem ;le resultat ok : un booleen){ etat initial : Notons k le nombre d’elements et P=α1...αk le contenu de lapile, lorsque k 6= 0.etat final : si k=0, alors ok=faux et x est non specifie sinon ok=vrai, x=αk etP = α1...αk−1 }

Lorsque la pile est de taille suffisante pour l’utilisation qui en est faite, oulorsque qu’on ne veut pas s’interesser au probleme du debordement (c’est-a-dire une tentative d’insertion lorsque la pile est pleine), on utilisera une action

version en ligne - [PDF Document] (104)

96 Representation des traitements et des donnees...

Empiler sans parametre resultat booleen. Dans ce cas, l’etat final d’une pile quietait pleine lors de l’empilement d’un element, est non specifie.

De meme, si l’on ne s’interesse pas au probleme d’acces a la pile vide, ou sil’on sait que l’action Depiler n’est jamais appelee avec une pile vide, on peututiliser une action Depiler sans parametre resultat booleen.

5.2 Specification d’une file

Elem : un typeFileElem : un typeTailleMax : un entier > 0Initialiser : une action (le resultat F : une FileElem){ etat final : F est la file vide }

Entrer : une action (la donnee-resultat F : une FileElem ; la donnee x : un Elem ;le resultat ok : un booleen){ etat initial : Notons F=α1...αk le contenu de la file ; si la file est vide :k = 0 ; si la file est pleine : k = TailleMaxetat final : Si k = TailleMax, F = α1...αk et ok=faux sinon, ok=vrai et F =α1...αk x }

Sortir : une action (la donnee-resultat F : une FileElem ; le resultat x : un Elem ;le resultat ok : un booleen){ etat initial : Notons F=α1...αk le contenu de la file.etat final : si k=0, alors ok=faux et x est non specifie sinon ok=vrai, x=α1 etF = α2...αk }

Sous les memes hypotheses que pour la pile, on s’autorise les actions Entreret Sortir sans parametres resultats booleens.

6. Exercices

E4.1 : Codage des entiers : petit bout ou gros boutConsiderons deux chaınes de caracteres dont on veut realiser la comparai-son lexicographique (autrement dit determiner laquelle vient en premier dansl’ordre alphabetique). Ces chaınes sont representees en memoire de manierecontigue, chaque caractere occupe un octet et il n’y a pas de place perdue.Pour accelerer la comparaison, on utilise des operations de comparaison d’en-tiers codes en binaire pur sur 32 bits, c’est-a-dire qu’on compare les caracteres4 par 4. Le choix de representation en memoire des entiers (petit bout ou grosbout, Cf. Paragraphe 2.2.4) a-t-il une influence sur la correction du resultat ?

E4.2 : Representation memoire des ensembles et codage des

version en ligne - [PDF Document] (105)

6. Exercices 97

operations ensemblistesLes vecteurs booleens peuvent representer des ensembles, ou, plus exactement,un vecteur booleen de N bits peut representer une partie d’un ensemble a Nelements : le bit de rang x est a 1 si et seulement si l’element x appartient al’ensemble. (Cf. Paragraphe 4. du chapitre 3). On considere les types :

Elem : le type entier dans [0..31] ; EnsElem : le type ensemble d’ElemsE1, E2 : des EnsElem

version en ligne - [PDF Document] (106)

98 Representation des traitements et des donnees...

Proposer une representation memoire des objets de type EnsElem. Combiend’octets sont-ils necessaires ? Exprimer en termes d’operations booleennes (et,ou, non, ...) sur la representation memoire de deux ensembles E1 et E2, lesoperations suivantes :

E1 ∪ E2 ; E1 ∩ E2 ; E1 \ E2E1 ←− E1 ∪ { x } { avec x de type Elem }E1 ←− E1 \ { x } { avec x de type Elem }x in E1 { avec x de type Elem }

E4.3 : Transformation des conditions boolennes composeesProposer une transformation de si C1 et (C2 ou non C3) alors A1 sinon A2 quin’utilise plus d’operateurs booleen et, ou, non.

E4.4 : Parcours de tableaux de structuresOn considere l’algorithme suivant :

lexiqueEntier32s : le type entier sur [−232−1, 232−1 − 1]T : un tableau sur [0 .. N-1] de < a : un Entier32s, b : un caractere >

algorithmei parcourant 0 .. N-1

T[i].a ←− i * 2 ; T[i].b ←− ’a’

Reecrire cet algorithme en faisant apparaıtre le tableau MEM et l’installationdes elements de T dans MEM, a partir d’une adresse γ.

E4.5 : Choix de representation d’un tableau a deux dimensionsOn considere trois tableaux d’entiers non signes, de dimension 2, carres,nommes T, S et U, definis sur [0..N-1] x [0..N-1].

On veut remplir U d’apres la formule : U [i,j] = T[i, j] + 232 × S [j, i]. Si lestableaux T et S ont des elements de 32 bits, U a donc des elements de 64 bits.

Choisir une representation en memoire des trois tableaux qui facilite leparcours de remplissage selon la formule ci-dessus.

E4.6 : Representation en memoire d’un tableau a k dimensionsOn considere le type suivant :

Tab : le type tableau sur [0..N0, 0..N1, ..., 0..Nk−1] d’entiers sur [−28−1, 28−1 − 1].T : un Tab

Choisir une representation en memoire des objets de type Tab et donner la for-mule qui exprime l’adresse de debut de l’element T[i0, i1, ..., ik−1] en fonctionde l’adresse de debut de T et des dimensions N0, N1, ..., Nk−1.

E4.7 : Transformation d’algorithme d’acces a un tableau de struc-turesReprendre le developpement du paragraphe sur l’optimisation des parcours detableaux (Cf. Paragraphe 2.4.2) dans le cas ou un tableau de structures estrepresente en memoire par une structure de tableaux.

version en ligne - [PDF Document] (107)

6. Exercices 99

E4.8 : Parcours de matrice carree et comparaison double longueuren complement a deuxConsiderons une constante entiere positive N (pas trop grande) et une matricecarree a N lignes et N colonnes :

N : un entier > 0Matrice : un tableau sur [0..N-1, 0..N-1] d’entiers

On desire verifier si la propriete suivante est vraie :

Pour tout i dans [1, N-1],Pour tout j dans [0, i-1]

Mij < Mji

Le but de l’exercice est d’ecrire un programme pour parcourir la matrice etdeterminer si la propriete est verifiee. On ne demande pas de programmerl’acquisition des elements de la matrice.

Questions :

Q1 Choisir une valeur pour la constante N (non triviale, c’est-a-diredifferente de 0, 1, 2, mais de nature a faciliter la programmation de l’al-gorithme de parcours. Songer en particulier a eviter les multiplicationsgenerales).

Q2 Proposer une representation memoire du tableau, en supposant que leselements de la matrice sont des entiers relatifs codes en complement adeux sur 64 bits.

Q3 Donner l’algorithme demande en notation algorithmique, en faisant ap-paraıtre le tableau MEM et le calcul des adresses des elements.

Cet exercice se poursuit par la programmation en assembleur sparc, exer-cice E13.10 du chapitre 12.

E4.9 : Programmation d’une file et d’une pileRealiser les actions de manipulation des piles et files decrites au paragraphe 5. :

– En rangeant les elements dans un tableau, c’est-a-dire en considerant letype : PileElem : un tableau sur 1 .. TailleMax d’Elem

– En rangeant les elements dans une sequence chaınee

Etudier les alternatives : pour le tableau, progression de la pile par adressescroissantes ou decroissantes et pointeur de pile indiquant la premiere case videou la derniere case pleine ; pour la sequence chaınee, insertion en debut ou enfin.

version en ligne - [PDF Document] (108)

100 Representation des traitements et des donnees...

version en ligne - [PDF Document] (109)

Chapitre 5

Representation des traitementset des donnees :machines sequentielles

Nous presentons ici le modele mathematique des machines sequentiellesde Moore et de Mealy. Ces modeles peuvent etre utilises pour representer lestraitements, aussi bien dans un contexte materiel que dans un contexte logiciel(ou elles rejoignent la representation classique par organigrammes).

Dans toute la suite de l’ouvrage, on utilisera indifferemment les termes demachine sequentielle, machine a etats finie, automate d’etats fini, automate.

Nous definissons les machines sequentielles simples au paragraphe 1.,puis les machines sequentielles avec actions au paragraphe 2. Pour lelogiciel, nous montrons comment traduire le langage d’actions simple enmachines sequentielles avec actions au paragraphe 2.2. Pour le materiel,l’utilisation des machines sequentielles apparaıt aux chapitres 10 et 11.

1. Machines sequentielles simples

1.1 Definitions mathematiques et proprietes

Definition 5.1 : machine de Moore, machine de MealyUne machine de Moore est un sextuplet (Q, q0, E, S, T, f) ou :

– Q est l’ensemble des etats ; q0 ∈ Q est l’etat initial– E (resp. S) est l’alphabet (ou vocabulaire) d’entree (resp. de sortie)– T ⊆ Q×E×Q est l’ensemble des transitions ; on note (q, e, q′) une transition

de q a q′ et on dit que l’element e de l’alphabet des entrees est l’etiquettede la transition.

– f : Q −→ S est la fonction qui fait correspondre un element de l’alphabetde sortie a chaque etat.

Une machine de Mealy est un quintuplet (Q, q0, E, S, T ) ou :

version en ligne - [PDF Document] (110)

102 Representation des traitements et des donnees...

– Q est l’ensemble des etats ; q0 ∈ Q est l’etat initial– E (resp. S) est l’alphabet d’entree (resp. de sortie)– T ⊆ Q × E × S × Q est l’ensemble des transitions, etiquetees par des

couples constitues d’un element de l’alphabet des entrees et d’un elementde l’alphabet des sorties. 2

La figure 5.1 illustre la representation conventionnelle des automates : uncercle pour un etat, une fleche etiquetee pour une transition.

1.1.1 Fonctionnement sequentiel

Le fonctionnement sequentiel des machines de Moore ou de Mealy est definien observant quelle sequence de sorties est produite par la machine, lorsqu’ellereagit a une sequence d’entrees donnee.

Considerons donc une sequence d’entrees : c’est une suite d’elements del’alphabet d’entrees, c’est-a-dire une fonction de N dans E, dont les elementsseront notes de maniere indicee. On notera Se = e0, e1, ..., en, ....

Pour definir la reaction de la machine de Moore (Q, q0, E, S, T, f) a lasequence d’entrees Se, on definit la sequence q0, q1, ... des etats rencontres :

∀n ≥ 0, (qn, en, qn+1) ∈ T

Une transition (q, e, q′) exprime que, si la machine est dans l’etat q, et qu’ellerecoit l’entree e, alors elle passe dans l’etat q′. La sequence de sorties Ss =s0, s1, ... est ensuite definie par l’intermediaire de la sequence d’etats :

∀n ∈ N, sn = f(qn)

Pour definir la reaction de la machine de Mealy (Q, q0, E, S, T ) a la sequenced’entrees Se, on ecrit directement :

q0 = q0 ∀n ≥ 0, (qn, en, sn, qn+1) ∈ T

1.1.2 Determinisme et reactivite

On s’interesse aux proprietes de determinisme et reactivite des machinessequentielles de Moore ou de Mealy, qui sont indispensables si l’on utilise lesmachines comme modele de traitements, c’est-a-dire comme des programmes(Cf. Paragraphes 1.3 et 2.). On trouvera parfois dans la litterature le termed’automate complet, au lieu de reactif (voir par exemple [Ben91]). Intuitive-ment, une machine est deterministe (resp. reactive) si et seulement si, quelque soit son etat, et quelle que soit la configuration de ses entrees, elle peutexecuter au plus une (resp. au moins une) transition. Une machine a la foisdeterministe et reactive peut donc executer exactement une transition, pourchaque etat et chaque entree.

version en ligne - [PDF Document] (111)

1. Machines sequentielles simples 103

Definition 5.2 : determinismeOn dira qu’une machine de Mealy (Q, q0, E, S, T ) est deterministe si et seule-ment si :

∀q ∈ Q,∃q1 ∈ Q, e1 ∈ E, s1 ∈ S, (q, e1, s1, q1) ∈ T∧∃q2 ∈ Q, e2 ∈ E, s2 ∈ S, (q, e2, s2, q2) ∈ T

=⇒ e1 6= e2

De meme, on dira qu’une machine de Moore (Q, q0, E, S, T, f) est deterministesi et seulement si :

∀q ∈ Q,∃q1 ∈ Q, e1 ∈ E(q, e1, q1) ∈ T∧∃q2 ∈ Q, e2 ∈ E(q, e2, q2) ∈ T

=⇒ e1 6= e2

2

Definition 5.3 : reactiviteUne machine de Mealy (Q, q0, E, S, T ) est dite reactive si et seulement si :

∀q ∈ Q, {e ∈ E | ∃q1 ∈ Q, s ∈ S, (q, e, s, q1) ∈ T} = E

De meme, une machine de Moore (Q, q0, E, S, T, f) est dire reactive si et seule-ment si :

∀q ∈ Q, {e ∈ E | ∃q1 ∈ Q, (q, e, q1) ∈ T} = E

2

Notons que lorsque la machine est deterministe, il existe une uniquesequence de sorties correspondant a une sequence d’entrees. Lorsque la machineest reactive, la sequence de sorties est aussi longue que la sequence d’entrees.

1.1.3 Fonctions de transition et de sortie

Pour des machines deterministes, la relation de transition T ⊆ Q×E ×Q(Moore) ou T ⊆ Q × E × S × Q (Mealy) est souvent exprimee comme unefonction.

On definit ainsi la fonction de transition g : Q×E −→ Q pour les machinesde Moore ; g associe a chaque couple (etat, entree) l’etat de destination ; si lamachine est reactive, cette fonction est totale. De la meme maniere, on definitpour les machines de Mealy une fonction de transition g : Q×E −→ Q×S quiassocie a chaque couple (etat, entree) l’etat de destination et la sortie emisepar la transition. On trouve parfois egalement une definition en deux fonctions,dites de transition et de sortie : g : Q× E −→ Q et s : Q× E −→ S.

version en ligne - [PDF Document] (112)

104 Representation des traitements et des donnees...

1.1.4 Equivalence des modeles de Moore et de Mealy

Pour toute machine M de Mealy (resp. de Moore), il existe et on peutconstruire une machine M ′ de Moore (resp. de Mealy) telle que M et M ′

produisent la meme sequence de sorties pour une sequence d’entrees donnee.Nous donnons ici seulement l’intuition de la transformation, pour montrer queles deux modeles sont equivalents.

Pour transformer une machine de Moore en machine de Mealy, il suffit dedeplacer les sorties des etats sur les transitions qui y menent. Pour transformerune machine de Mealy en machine de Moore, il suffit de deplacer les sortiesassociees a une transition vers l’etat but de la transition. Si plusieurs transi-tions, portant des sorties differentes, menent au meme etat, celui-ci doit etreeclate en autant d’etats distincts.

Dans la suite de cet ouvrage, nous utiliserons l’un ou l’autre des modelesde Moore ou de Mealy, mais sans avoir besoin de transformer l’un en l’autre.

1.2 Application a la reconnaissance deslangages reguliers

L’une des caracterisations de la classe des langages reguliers (on dit aussilangage rationnel) enonce que ces langages sont exactement les langages re-connaissables par des machines a etats finies (Cf. par exemple [Ben91]).

Les reconnaisseurs de langages reguliers sont des machines de Moore quiproduisent une unique sortie booleenne. Dans un etat E, cette sortie est vraisi et seulement si les sequences d’entrees qui permettent d’atteindre E depuisl’etat initial constituent des phrases correctes du langage a reconnaıtre. L’usagea consacre une notation particuliere de ces machines de Moore, dans laquelleon omet la notation de la sortie : il suffit de distinguer, par exemple par destriangles, les etats pour lesquels elle vaut vrai. Dans la litterature on trouverasouvent le terme d’etat final, ou de satisfaction. Notons que, si l’etat initial estegalement final, la phrase vide appartient au langage.

Les machines de Moore qui expriment la reconnaissance de langagesreguliers ne sont pas necessairement reactives : a partir d’un etat donne, ilpeut ne pas exister de transition executable, pour un element particulier dela sequence, et la machine peut donc se bloquer. Dans ce cas toutefois, lasequence d’entrees ne permettra jamais d’atteindre un etat de satisfaction. Oninterprete donc les blocages de la machine comme un resultat negatif.

Elles ne sont pas non plus necessairement deterministes ; mais pour toutlangage regulier il existe une machine sequentielle deterministe qui le re-connaıt. Il existe meme un algorithme de transformation d’un reconnaisseurnon deterministe en reconnaisseur deterministe du meme langage.

Il existe une infinite de machines de Moore a etats finals pour reconnaıtreun langage regulier donne. Il en existe toujours une a un nombre minimald’etats.

version en ligne - [PDF Document] (113)

1. Machines sequentielles simples 105

cc

a a

b

b

1 2

3 4

(a)

cc

a a

b

b

1 2

3 4

5

(b)

c

a,b

a, b, c

a,b,c

Fig. 5.1 – Reconnaissance du langage regulier a∗b + c∗. (a) Machine de Moore a etatsfinals, avec : Q = {1, 2, 3, 4}, E = {a, b, c}, f(1) = f(2) = f(4) =vrai, f(3) = faux,T = {(1, a, 3), (1, b, 4), (1, c, 2), (2, c, 2), (3, a, 3), (3, b, 4)}.(b) Machine de Moore ordinaire.

Exemple E5.1 : Automate reconnaisseur du langage a∗b + c∗

La figure 5.1 donne une machine de Moore qui reconnaıt le langage decrit parl’expression reguliere a∗b + c∗. L’automate donne est minimal. L’etat 1 estinitial. Les etats 1, 2 et 4 sont finals. L’etat final 2 correspond aux phrasesconstituees uniquement de lettres c (au moins une) ; l’etat final 4 corresponda la phrase reduite a la lettre b et aux phrases de la forme aa∗b (un nombrenon nul de lettres a, puis une lettre b). Notons que dans les phrases ca, bbou encore ac, la premiere lettre permet d’executer une transition issue del’etat initial, ensuite de quoi l’automate est bloque. Aucune de ces phrasesn’appartient au langage considere.

1.3 Application a la description de systemes reactifs

Nous detaillons dans ce paragraphe un exemple de systeme reactif : unemachine a cafe. Cet exemple est repris au chapitre 10 ou nous montronscomment realiser le controleur de la machine avec un circuit sequentiel. Ondonne d’autres exemples de systemes reactifs dans le paragraphe 2.1.1 et l’exer-cice E10.6 du chapitre 10.

Exemple E5.2 : Machine a cafeOn considere une machine automatique de distribution de cafe, qui acceptedes pieces de 1, 2 et 5 francs. Un cafe coute 2 francs. Des que le consommateura introduit 2 francs ou plus, la machine n’accepte plus de pieces jusqu’a ceque le cafe soit servi. D’autre part, s’il avait introduit plus de 2 francs, lamachine rend la monnaie.

version en ligne - [PDF Document] (114)

106 Representation des traitements et des donnees...

On considere que la machine a cafe est constituee d’une partie physique etdu dispositif informatique que nous appelons controleur. L’environnement ducontroleur est constitue de l’utilisateur humain et de la partie physique de lamachine. Les entrees du controleur en provenance de l’utilisateur humain sereduisent a l’introduction de pieces (dans un exemple plus general on envisa-gerait le choix de la boisson). Les entrees en provenance de la partie physiquede la machine sont des comptes-rendus d’activite (voir plus loin). Les sorties adestination de la partie physique de la machine sont les commandes de servicedu cafe, de fermeture de l’orifice d’introduction des pieces, de rendu de monnaie(on supposera qu’il existe un dispositif capable de calculer la somme a rendre,non decrit ici). On n’envisage pas de sorties a destination de l’utilisateur.

Nous nous interessons ici a l’algorithme du controleur de cette machine.Le controleur est un exemple typique de systeme dit reactif : il interagit enpermanence avec son environnement, et reagit a des entrees par l’emission desorties appropriees. On peut le decrire par une machine sequentielle reactive,de Moore ou de Mealy. Notons que le critere mathematique de reactivite de lamachine sequentielle correspond exactement a la nature reactive du systeme decontrole de la machine a cafe : la reaction du controleur doit etre parfaitementdefinie, dans chacun de ses etats, pour chacune des entrees possibles.

L’algorithme a ecrire analyse une sequence d’entrees et produit unesequence de sorties correspondante.

Interface d’entree/sortie du controleur : Pour determiner le vocabu-laire d’entree de la machine sequentielle decrivant le controleur, il convient defaire quelques hypotheses sur son environnement. On pourra considerer que lesactions de l’utilisateur et le compte-rendu de la machine ne sont jamais simul-tanes. D’autre part des contraintes physiques comme la taille de l’orifice danslequel on introduit les pieces empechent sans doute d’introduire deux piecesen meme temps. Les seules entrees a considerer sont donc :

– s1, s2, s5 signifient respectivement que l’utilisateur a introduit une piece de1, 2 ou 5 francs.

– fs est un compte-rendu d’activite de la machine : lorsqu’elle recoit la com-mande de service de cafe, elle repond par cet acquittement de fin de service,apres un certain temps.

– rien signifie que rien n’arrive : ni introduction de pieces, ni compte-rendude la machine.

Le vocabulaire de sortie est P({R,C, B, AUCUNE}) ou R signifie : calculeret Rendre la monnaie ; C signifie servir le Cafe ; B signifie Bloquage de l’orificed’introduction des pieces ; AUCUNE signifie pas de sortie. Toutefois les seulssous-ensembles effectivement utilises dans la machine sequentielle qui decrit lecontroleur sont : {AUCUNE}, {C, B} et {R,C, B}.

version en ligne - [PDF Document] (115)

1. Machines sequentielles simples 107

Nous verrons au chapitre 10 que l’identification exacte du sous-ensemble effec-tivement utile du vocabulaire de sortie peut etre utilise pour proposer un codageefficace des sorties d’une machine sequentielle, lorsqu’elle est implantee par uncircuit sequentiel.

Description du comportement du controleur : Le comportement ducontroleur de machine a cafe peut etre decrit par la machine de Moore de lafigure 5.2 (le modele de Moore est ici le plus approprie car la valeur des sortiesest intrinsequement definie par l’etat, et ne depend pas de l’entree).

Cette description appelle un certain nombre de remarques. 0n suppose quel’environnement de ce controleur (c’est-a-dire l’ensemble forme par l’utilisateurhumain et par la machine) a un comportement correct, c’est-a-dire que cer-taines successions d’entrees et de sorties du controleur peuvent etre considereescomme impossibles : 1) Tant que l’introduction des pieces est bloquee par lamachine, s1, s2 et s5 ne peuvent pas survenir ; 2) Lorsque l’utilisateur humaina commande le service du cafe, le compte-rendu fs surviendra necessairement,apres un certain temps ; 3) Le compte-rendu fs ne peut pas survenir si l’on n’apas commande le service du cafe.

Ces contraintes permettent de verifier que les formules booleennes quiconditionnent les transitions issues d’un meme etat assurent bien les proprietesde determinisme et reactivite de la machine. Par exemple, dans l’etat AttentePieces, les seules conditions envisagees sont s1, s2, s5 et rien. rien corresponda la condition booleenne : s1.s2.s5. L’entree fs n’est pas mentionnee. En re-vanche, dans l’etat 2F recus s1, s2 et s5 ne peuvent pas se produire et riensignifie fs.

Nous donnons figure 5.3 une sequence de monomes d’entree et la sequencede monomes de sorties correspondante.

1.4 Codage algorithmique d’une machine sequentielle,application aux reconnaisseurs de langages reguliers

Lorsqu’un probleme est decrit sous forme de machine sequentielle, il estpossible de produire systematiquement un algorithme iteratif dont le compor-tement est le comportement sequentiel de la machine.

Par exemple, l’algorithme de reconnaissance d’un langage regulier est unparcours de sequence qui calcule un booleen Appartenance. Lorsque le parcourss’arrete, ce booleen a la valeur vrai si et seulement si la sequence parcourueconstitue une phrase correcte du langage considere (c’est-a-dire si l’automatereconnaisseur s’arrete dans un etat de satisfaction).

On suppose que la sequence des entrees de la machine sequentielle est ac-cessible grace aux primitives Demarrer, Avancer, FinDeSeq et CarCour qui per-mettent d’abstraire les algorithmes de traitement sequentiel (Cf. [SFLM93]).Nous construisons l’algorithme iteratif par un codage systematique de lamachine sequentielle de Moore qui definit le reconnaisseur. La consomma-

version en ligne - [PDF Document] (116)

108 Representation des traitements et des donnees...

fsfs

s1s1

s2

s2

Troppercu

AttentePieces

2F recus

1F recu

s5

C,B

rien

rien

s5

R,C,B

AUCUNE

AUCUNE

rien rien

Fig. 5.2 – Comportement du controleur d’une machine a cafe (machine de Moore)

.

Entree Sortie Etat courant

rien {AUCUNE} Attente Piecesrien {AUCUNE} Attente Piecesrien {AUCUNE} Attente Piecess2 {AUCUNE} Attente Piecesrien {C,B} 2F recusrien {C,B} 2F recusrien {C,B} 2F recusfs {C,B} 2F recuss1 {AUCUNE} Attente Piecesrien {AUCUNE} 1F recus2 {AUCUNE} 1F recurien {R,C, B} Trop percufs {R,C, B} Trop percu... {AUCUNE} Attente Pieces

Fig. 5.3 – Une sequence d’execution du controleur de la machine a cafe : chaque lignecorrespond a un instant different ; le temps passe du haut vers le bas dans letableau.

version en ligne - [PDF Document] (117)

2. Machines sequentielles avec actions 109

Etat : le type (Un, Deux, Trois, Quatre, Erreur)E : un Etat ; Appartenance : un booleenE ←− Un ; Demarrertant que non FinDeSeq

selon EE = Un :

selon CarCour :CarCour = ’c’ : E ←− DeuxCarCour = ’b’ : E ←− QuatreCarCour = ’a’ : E ←− Trois

E = Deux :selon CarCour :

CarCour = ’c’ : E ←− DeuxCarCour = ’b’ ou CarCour = ’a’ : E ←− Erreur

E = Trois :selon CarCour :

CarCour = ’a’ : E ←− TroisCarCour = ’b’ : E ←− QuatreCarCour = ’c’ : E ←− Erreur

E = Quatre : E ←− ErreurE = Erreur : { rien a faire }

Appartenance ←− (E = Un ou E = Deux ou E = Quatre){ Invariant : Appartenance est vrai ssi la sequence de caracteres lue jusquela est une phrase du langage decrit par l’expression reguliere a∗b + c∗ }Avancer

Fig. 5.4 – Algorithme de reconnaissance du langage a∗b + c∗ base sur l’automate de lafigure 5.1-b.

tion des elements de la sequence est realisee par un appel de la primitiveAvancer. Chaque passage dans la boucle consomme exactement un elementde la sequence et represente l’execution d’une transition de la machine. Lesconditions sur l’entree sont traduites en conditions sur l’element courant de lasequence, accessible par la fonction Carcour. La sortie Appartenance est calculeeen fin de boucle, en fonction de l’etat atteint.

On suppose que la sequence d’entree ne comporte que les caracteres a, b etc. L’algorithme de reconnaissance du langage a∗b + c∗ est donne figure 5.4.

2. Machines sequentielles avec actions

Dans le langage des actions presente au paragraphe 1. du chapitre 4, lastructuration des algorithmes est assuree par un petit nombre de construc-tions iteratives (tant que, parcourant) ou conditionnelles. Parmi les actions

version en ligne - [PDF Document] (118)

110 Representation des traitements et des donnees...

CC

A

C ?vraifaux

A

(b)(a)

Fig. 5.5 – Machine de Moore avec actions et organigramme. (a) : un etat de machinede Moore avec actions (C est une condition booleenne et A une action) ; (b) :une portion d’organigramme qui represente le meme traitement.

elementaires on trouve en particulier l’affectation.L’idee du modele des machines sequentielles avec actions — on trouve

parfois dans la litterature le terme d’automate interprete ou de schema de pro-gramme avec interpretation (Cf. par exemple [Liv78]) — est d’exprimer lesstructures conditionnelles et iteratives d’un algorithme par les etats et tran-sitions d’une machine sequentielle. Les actions sont les sorties de la machineet constituent donc les etiquettes des transitions ou des etats, selon que l’onutilise le modele de Mealy ou le modele de Moore. Des conditions booleennesconstituent les entrees de la machine sequentielle.

2.1 Definition

On se donne un lexique (au sens defini chapitre 4) qui definit des types,des variables typees, des fonctions et des actions sans parametres. Parmi lesfonctions on distingue les predicats, qui sont a resultat booleen. Le predicatconstant vrai et l’action vide vide sont toujours definis, et jouent un role par-ticulier dans les manipulations de machines sequentielles a actions (Cf. Para-graphe 2.4).

Une machine sequentielle avec actions est une machine a etats finie dont levocabulaire d’entree est l’ensemble des predicats : l’evaluation d’un predicatrepresente une entree de la machine, au sens du paragraphe 1.1. Les transitionssont donc etiquetees par des predicats. L’ensemble des actions constitue levocabulaire de sortie.

Une machine de Moore avec actions est tres similaire aux organigrammesclassiques, ainsi que le montre la figure 5.5.

Les machines de Mealy avec actions sont etudiees dans [SFLM93]. Elles sontune extension naturelle des algorithmes obtenus comme codage systematiquedes machines de reconnaissance des langages reguliers (paragraphe 1.4). Nousne les etudierons pas ici.

version en ligne - [PDF Document] (119)

2. Machines sequentielles avec actions 111

2.2 Representation des structures de controle par desmachines sequentielles avec actions

Dans le chapitre 4 nous avons defini un petit langage d’actions, et etudiela premiere etape de traduction des structures de donnees, c’est-a-dire larepresentation des donnees complexes en memoire. Nous obtenons donc desprogrammes sans structures de donnees, dans lesquels ne subsistent que desacces de taille 1, 2 ou 4 au tableau MEM.

Nous nous interessons ici au codage des structures de controle, sauf l’ap-pel d’action ou fonction parametre, qui sera etudie de facon detaillee au cha-pitre 13.

La figure 5.6 donne la traduction des structures de controle usuelles en ma-chines sequentielles avec actions. Chaque machine obtenue pour la traductiond’une structure de controle possede un etat initial et un etat final. Pour com-poser de telles machines, il suffit de definir comment remplacer une action Apar une machine. Pour cela on remplace l’etat q qui porte l’action A par ledessin complet de la machine qui represente l’algorithme de A. Les transitionsissues de q deviennent issues de l’etat final de la machine de A ; les transitionsqui arrivent a q sont branchees sur l’etat initial de la machine de A. A titred’exemple nous donnons la machine de l’algorithme :

tant que C faireAtant que D faire

BE

2.3 Definition du lexique d’une machine sequentielleavec actions

Dans ce paragraphe nous montrons comment produire une machinesequentielle avec actions a partir d’un algorithme iteratif. Nous illustrons cettetransformation pour l’algorithme de Bresenham, qui permet de calculer les co-ordonnees des points d’un segment dans un plan quadrille. Cet exemple estrepris dans le chapitre 11 ou nous montrons comment obtenir un circuit a par-tir de cet algorithme. L’exercice E13.5 du chapitre 12 propose de programmercet algorithme en langage d’assemblage sparc.

2.3.1 Traceur de segments : algorithme de Bresenham

Le but de l’algorithme de Bresenham est de placer dans le plan des pointsde coordonnees entieres qui approchent le mieux possible une droite d’equationdonnee.

Le segment qui passe par les points de coordonnees (0, 0) et (m,n) estsupportee par la droite d’equation y = (n/m)x si m 6= 0. Il s’agit donc de tracer

version en ligne - [PDF Document] (120)

112 Representation des traitements et des donnees...

A

B

vraiC

Anon C

vrai

A

X

vrai

Cnon C

vrai

D

vrai

B

vrai

E

vrai

A

C

non C

non D

vrai

X

non C

C

A

vrai

si C alors A

tantque C faire [ A ; tantque D faire [ B ] ; E ]

A ;Bsi C alors A sinon B

vrai vrai

non C C

AB

C

Anon C

X ; si C alors A

Repeter A jusqu’a C

tantque C faire A

A

non C vraiC

Fig. 5.6 – Traduction des structures de controle en machines sequentielles avec actions.Les etats non etiquetes portent implicitement l’action vide.

version en ligne - [PDF Document] (121)

2. Machines sequentielles avec actions 113

0 6

5

5 11

2

3

12

0 01 02 13 14 25 26 37 38 39 410 411 512 5

Fig. 5.7 – Trace d’un segment dont les extremites sont les points de coordonnees (0, 0)et (12, 5). Le trait blanc est ideal, les pixels noirs sont obtenus par l’algorithme,les pixels gris pourraient sembler candidats.

le segment de cette droite qui va du point (0, 0) au point (m,n). Les pointsn’ayant que des coordonnees entieres, il faut noircir un ensemble de points (oupixels, pour picture element) aussi proches que possibles de la droite ideale.

Remarque : Sans perte de generalite, nous traitons le cas ou 0 ≤ n ≤ m.Les autres cas s’obtiennent aisem*nt par des transformations simples ou lepoint de coordonnees (j, k) devient (±j,±k) ou (±k,±j).

L’equation de la droite etant y = (n/m)x, avec m et n entiers, pour toutpoint de coordonnees entieres (j, k), il est possible de calculer un ecart ε parrapport a la droite ideale : k = (n/m).j − ε ou ε = (n/m).j − k. Le critere deproximite retenu est le suivant : tout point de coordonnees (j, k) doit etre telque : |ε| ≤ 1

2.

Evaluons la proximite relative de deux pixels par rapport a la droite idealeavec les valeurs m = 12, et n = 5 (Cf. Figure 5.7). Pour le pixel d’abcisse 1,calculons l’ecart a la droite ideale de (1, 1) qui apparaıt en grise, et de (1, 0)qui est donne par l’algorithme ; pour (1, 1), ε = − 7

12et pour (1, 0), ε = 5

12.

C’est le point (1, 0) qui est donne par l’algorithme. Pour le point d’abscisse 6,les deux points (6, 2), en grise, et (6, 3), en noir, donnent la meme valeur de |ε|.

De |ε| ≤ 12

nous pouvons deduire :

−12≤ ε ≤ 1

2

−12≤ (n/m).j − k ≤ 1

2

−m ≤ 2.n.j − 2.m.k ≤ m−2m ≤ 2.n.j − 2.m.k −m ≤ 0

Posons ∆ = 2.n.j− 2.m.k−m. On remarque alors que lorsque j augmentede 1, ∆ augmente de 2.n ; lorsque k augmente de 1, ∆ diminue de 2.m. Laconstruction de l’algorithme de calcul des coordonnees des pixels successifs

version en ligne - [PDF Document] (122)

114 Representation des traitements et des donnees...

lexiquen : l’entier ... ; m : l’entier ...T : un tableau sur [0..m, 0..n] de booleensj, k, ∆ : des entiers

algorithmek ←− 0 ; j ←− 0 ; ∆ ←− − m{ Valeur initiale de l’ecart : l’abscisse j vaut 0, l’ordonnee k vaut 0, donc∆ = −m }tant que j ≤ m :

{ Invariant : 0 ≤ j ≤ m et -2*m ≤ ∆ ≤ 0 }Tj,k ←− vrai { Le point de coord. j, k doit etre affiche }{ Pour le point suivant, on augmente j de 1 }j ←− j + 1 ; ∆ ←− ∆ + 2*nsi ∆ > 0{ Si ∆ est devenu trop grand, on le ramene a une valeur conve-nable en augmentant l’ordonnee courante }k ←− k + 1 ; ∆ ←− ∆ − 2*m{ −2 ∗m ≤ ∆ ≤ 0 }

Fig. 5.8 – Algorithme de Bresenham

utilise cette propriete. La variable d’abscisse j est incrementee de 1 en 1. Achaque incrementation de j, k est mis a jour de facon a maintenir ∆ entre−2m et 0. Pour cela il faut soit laisser k inchange, soit incrementer k.

La figure 5.8 donne l’algorithme correspondant.

2.3.2 Machine sequentielle avec actions realisant l’algorithme deBresenham

Nous donnons Figure 5.9 le lexique des actions necessaires a la definitionde la machine sequentielle avec actions produite a partir de l’algorithme deBresenham. La figure 5.10 decrit cette machine sequentielle.

Remarquons que cette machine a une forme particuliere. Les etats ne sontpas separes si cela n’est pas necessaire ; par exemple, l’action MajTetIncrAbsest constituee des trois actions elementaires : Tj,k ←− vrai, j ←− j + 1 et∆ ←− ∆ + 2 * n. Les predicats se limitent a la consultation d’une variablebooleenne (Fini ou ∆pos). Le calcul des predicats est systematiquement realisedans un etat ; il pourrait parfois etre integre a un autre etat : la mise a jourde ∆pos pourrait, par exemple, etre faite dans l’etat ou est realise l’actionMajTetIncrAbs.

version en ligne - [PDF Document] (123)

2. Machines sequentielles avec actions 115

{ Les variables : }Fini, ∆pos : des booleens

{ Les actions : }Init : une action : j ←− 0 ; k ←− 0 ; ∆ ←− −mMajTetIncrAbs : une action

Tj,k ←− vrai ; j ←− j + 1 ; ∆ ←− ∆ + 2 * nIncrOrdonnee : une action : k ←− k + 1 ; ∆ ←− ∆ − 2 * mCalculFini : une action : Fini ←− j > mCalcul∆pos : une action : ∆pos ←− ∆ > 0

{ Les predicats : }EstFini : −→ un booleen : fini∆EstPos : −→ un booleen : ∆pos

Fig. 5.9 – Lexique de machine sequentielle avec actions representant l’algorithme de Bre-senham

Calcul∆pos

IncrOrdonnee

MajTetIncrAbs

∆estPos

vrai

non EstFini

CalculFini

Init

vrai

EstFini

non ∆estPos

vrai

Fig. 5.10 – Machine sequentielle avec actions realisant l’algorithme de Bresenham

version en ligne - [PDF Document] (124)

116 Representation des traitements et des donnees...

2.4 Proprietes et transformations de machinessequentielles avec actions

Nous donnons ici quelques transformations des machines sequentielles aactions qui en preservent la semantique — c’est-a-dire la sequence des actionseffectuees sur les donnees du lexique — mais peuvent en modifier la structure.Plusieurs de ces transformations modifient le nombre d’etats de la machineparcourus lors d’une sequence donnee d’actions. Lorsque l’on s’interesse auxmachines sequentielles a actions comme modele intermediaire dans le processusde traduction des langages de haut niveau vers un langage d’assemblage, cela apeu d’importance, et toutes les transformations seront permises. En revanche,si ce modele de machine sequentielle est utilise pour obtenir une realisationmaterielle de l’algorithme etudie, le nombre d’etats sera en relation directe avecle temps d’execution. En effet le cadencement des systemes materiels suit assezrigoureusem*nt la regle : duree de sejour dans un etat = une periode d’horloge ;en particulier la duree de sejour dans un etat est une constante independantede l’etat. Nous revenons sur cet aspect du probleme au chapitre 11.

2.4.1 Fusion d’etats

Si a la suite du processus de construction de l’algorithme deux etats E1et E2 d’une machine sequentielle a actions ne sont separes que par une tran-sition portant le predicat vrai, on peut les fusionner. En effet, les proprietesde determinisme et de reactivite des machines impliquent qu’il ne peut alorspas y avoir d’autre transition entre les deux etats E1 et E2. Si les actions,A1 et A2, qu’ils portent sont dependantes, l’etat obtenu porte l’action A1 ; A2.Si les actions qu’ils portent sont independantes, on note A || B l’action com-posee portee par l’etat obtenu, de preference a A ; B ou B ; A pour rappelerque l’ordre est indifferent.

2.4.2 Eclatement d’etats

Inversem*nt, tout etat portant une action composee de la forme A1 ; A2peut etre eclate en deux etats separes par la transition portant le predicat vrai,le premier portant l’action A1 et le deuxieme l’action A2.

Remarque : Dans l’exemple de Bresenham on aurait pu eclater endeux l’action MajTetIncrAbs. Le premier etat porte l’action : Tj,k ←− vrai ;j ←− j + 1 ; ∆ ←− ∆ + 2*n. Le deuxieme : j ←− j + 1 || ∆ ←− ∆ + 2*n.

Nous verrons au chapitre 11 que lorsqu’il s’agit de produire un circuit syn-chrone pour implanter une machine sequentielle, il faut placer sur chaque etatune action realisable en 1 coup d’horloge. Cela peut imposer de decomposer desactions complexes en suites d’actions elementaires realisables en 1 seul coupd’horloge chacune. La machine sequentielle comporte alors une suite d’etatssepares par des transitions portant le predicat vrai.

version en ligne - [PDF Document] (125)

2. Machines sequentielles avec actions 117

C2

A3A2A1

vrai vrai vrai

C1

C3

C3

A3non C3

C2

A2

non C2

C1

A1non C1

vrai

vrai

vrai

Fig. 5.11 – Transformation des tests n-aires en tests binaires

2.4.3 Transformation des branchements n-aires en branchementsbinaires

Que les machines sequentielles soient utilisees pour construire des circuitssequentiels synchrones (chapitre 11), ou pour produire du langage machine(chapitre 12), il faut parfois se restreindre a des branchements binaires. Latransformation systematique d’une machine a branchements n-aires en ma-chine a branchements uniquement binaires peut ajouter des etats, et doncallonger le chemin necessaire a l’execution d’une action. Dans le cas logicielcomme dans le cas materiel, cet allongement du chemin se traduit par unallongement du temps d’execution.

La figure 5.11 donne deux machines sequentielles correspondant a la struc-ture conditionnelle :

selonC1 : A1 ; C2 : A2 ; C3 : A3

La premiere machine possede un etat a 3 transitions sortantes, pour lequelon exige : (C1 ou C2 ou C3) et non ((C1 et C2) ou (C2 et C3) ou (C1 et C3)).

La deuxieme machine est a branchement binaire. Noter que le test desconditions peut se faire dans un ordre quelconque. Il existe donc 6 machinesdifferentes ayant le meme comportement. Noter egalement que si la conditionde reactivite est bien respectee dans la machine a branchement binaire, latransition qui porte la condition non C1 est inutile.

2.4.4 Echange controle/donnees

Les deux algorithmes de la figure 5.12 produisent les memes resultats. Lafigure 5.14 represente les deux machines sequentielles avec actions associees,en utilisant le lexique decrit Figure 5.13.

version en ligne - [PDF Document] (126)

118 Representation des traitements et des donnees...

lexiqueB1 : le booleen ... ; B2 : le booleen ... ; N : l’entier ... ; i : un entierT : un tableau sur [0..N] de booleensCondT : un entier −→ un booleen { une propriete portant sur un entier }

algorithme 1 :i ←− 0tant que i ≤ N

si CondT(i) alors Ti ←− (Ti et B1) sinon Ti ←− (Ti ou B2)i ←− i + 1

algorithme 2 :i ←− 0tant que i ≤ N

Ti ←− (CondT(i) et (Ti and B1)) ou (non CondT(i) et (Ti ou B2))i ←− i + 1

Fig. 5.12 – Echange controle/donnees : deux algorithmes equivalents

{ lexique : }C1, C2 : des booleens

{ les actions : }Init : une action (la donnee-resultat i : un entier) : i ←− 0CalculC1 : une action (les donnees i : un entier, N : un entier) : C1 ←− i ≤ NCalculC2 : une action (la donnee i : un entier) : C2 ←− CondT(i)AndT : une action (les donnees : x : un booleen, i : un entier) : Ti ←− Ti et xOrT : une action (les donnees : x : un booleen, i : un entier) : Ti ←− Ti ou xActCond : une action (les donnees : x1, x2 : deux booleens, i : un entier)

Ti ←− (CondT(i) et (Ti et x1)) ou (non CondT(i) et (Ti ou x2)){ les predicats : }

EstC1 : −→ un booleen : C1EstC2 : −→ un booleen : C2

Fig. 5.13 – Echange controle/donnees : lexique des machines sequentielles

version en ligne - [PDF Document] (127)

2. Machines sequentielles avec actions 119

ActCond(B1, B2, i)

vraivrai

Init

vrai

EstC1

OrT(B2,i)

vrai

vrai

EstC1

vrai

Incr(i)

Init

non EstC2

CalculC2

AndT(B1,i)

vrai

CalculC1

EstC2

non EstC1

non EstC1

Incr(i)

CalculC1

Fig. 5.14 – Deux machines sequentielles realisant le meme traitement

version en ligne - [PDF Document] (128)

120 Representation des traitements et des donnees...

Dans la deuxieme machine, l’utilisation de l’action ActCond permetl’economie du test portant sur C2, c’est-a-dire sur CondT.

Formellement les deux algorithmes ne sont pas equivalents. Dans le premier,une seule des deux expressions Ti et B1 et Ti ou B2 est evaluee ; dans l’autreles deux le sont. Il n’y a equivalence que si aucune des deux evaluations neproduit d’effet de bord.

Nous verrons au chapitre 11 que cette technique permettant de transfererdes informations du controle aux donnees est utilisee lors de la repartitiondu travail entre une partie operative et une partie controle. L’action ActCondcorrespond en materiel a l’utilisation d’un multiplexeur (Cf. Chapitre 8).

version en ligne - [PDF Document] (129)

Chapitre 6

Temps, donnees temporelles etsynchronisation

Ce chapitre est l’occasion d’introduire la notion de temps dans les systemesinformatiques. Quand on s’interesse a un systeme informatique au niveaud’abstraction que donnent les langages de haut niveau, on peut se contenterd’une notion de temps logique pour raisonner sur la succession des operationsdans un programme. Cette notion de temps est qualifiee de logique parce qu’onne s’interesse pas a la relation avec le temps physique (meme lorsque cette re-lation existe : pour un processeur donne et une chaıne de compilation donnee,elle est meme exprimable).

En revanche, lorsqu’on s’interesse aux modeles de traitements de bas niveaucomme le langage machine, le sequencement des operations est en rapportdirect avec le temps physique. D’autre part, ne fut-ce que pour comprendreles mecanismes d’entrees/sorties, il faut s’interroger sur l’interface entre ledispositif informatique et son environnement, et sur le rapport entre les notionsde temps de l’un et de l’autre : le temps de l’environnement est un tempsphysique continu ; celui du systeme informatique est par nature discret.

Nous etudions tout d’abord au paragraphe 1. l’interface entre un envi-ronnement physique et un dispositif informatique reduit a une machinesequentielle (etudiee au chapitre 5). Le paragraphe 2. introduit la notionde signal logique obtenu par discretisation d’un signal physique continu,et la representation de telles informations temporelles par des chrono-grammes. Le paragraphe 3. s’interesse aux problemes de synchronisationde deux dispositifs informatiques connectes l’un a l’autre ; trois solutionssont envisagees, dont le protocole poignee de mains que nous utilisonsdans les chapitres 11 et 16. Au paragraphe 4. nous reprenons l’exemplede la machine de distribution de cafe deja etudiee au chapitre 5, pourpreciser l’interface entre le controleur informatique et l’environnementphysique de la machine.

version en ligne - [PDF Document] (130)

122 Temps, donnees temporelles et synchronisation

1. Interface entre un dispositif informatique et

un environnement physique

Pour comprendre ou intervient le temps dans les traitements informatiques,nous nous interessons ici au cas ou une machine sequentielle represente le fonc-tionnement d’un dispositif informatique directement connecte a un environne-ment physique.

1.1 Le temps logique discret des machines sequentielles

Bien que la definition mathematique des sequences et des machinessequentielles ne suppose pas l’introduction d’une notion de temps, il est asseznaturel de parler d’apres ou d’avant dans la sequence des entrees. L’indiciationdes elements de la sequence — c’est-a-dire l’ensemble des entiers naturels —est donc un bon candidat pour representer une certaine notion de temps. Cetemps est qualifie de logique parce qu’on ne s’interesse pas necessairement a larelation entre les instants qu’il definit et un veritable temps physique. Il est ditdiscret parce que l’ensemble des entiers naturels n’est pas dense dans < (unesequence indicee par les elements de l’ensemble < des reels representerait plusnaturellement un temps continu).

Tant qu’on utilise le modele des machines sequentielles avec actions(Cf. Chapitre 5), on reste au niveau d’abstraction du logiciel. La sequence desentrees de la machine sequentielle est accessible grace aux primitives Demarrer,Avancer, FinDeSeq et CarCour qui, dans un programme complet, seraient effec-tivement programmees. Elles peuvent representer le parcours d’un tableau enmemoire, la saisie interactive au clavier, aussi bien que l’acces aux elementsd’un fichier present sur un disque. Le fonctionnement de la machine, c’est-a-dire le deroulement de l’algorithme, depend donc bien de parametres de temps,comme le temps d’acces a la memoire, le temps necessaire pour realiser uneentree clavier, le temps d’acces au disque, etc., mais d’une facon difficilementexprimable.

1.2 Le temps physique continu de l’environnement

Si la machine sequentielle consideree represente le fonctionnement d’undispositif informatique directement connecte a un environnement physique, lesalphabets d’entree et de sortie representent des informations en provenance oua destination de cet environnement. Il faut alors exprimer precisem*nt la rela-tion entre les phenomenes continus qui nous interessent dans l’environnementet la structure de sequence des entrees/sorties de la machine sequentielle.

On se ramene toujours a des phenomenes physiques que des appareils demesure appropries transforment en tensions electriques accessibles au dispositifinformatique.

version en ligne - [PDF Document] (131)

1. Interface entre un dispositif informatique et un environnement physique 123

L’evolution d’une tension electrique en fonction du temps peut-etrerepresentee par une courbe de fonction, comme illustre figure 6.1-a.

1.3 Definition de l’interface d’entrees/sortiesde la machine sequentielle

Le dispositif informatique ne peut traiter que des informations discretes.Nous avons vu au chapitre 3 comment ramener l’ensemble des valeurs possiblesde G a un nombre fini de valeurs. On discretise donc l’axe G en definissant unepartition finie de l’ensemble des valeurs possibles, comme indique figure 6.1-b ou il y a deux valeurs. On peut ensuite reporter les variations continuessur cette nouvelle echelle GD. On obtient une suite de paliers de longueursquelconques, comme indique figure 6.1-c. Notons que deux paliers successifssont a des hauteurs distinctes, par construction.

On va se limiter au cas des informations booleennes (pour lesquelles l’en-semble des valeurs a ete partitionne en deux). Ce qui est en dessous du seuildevient la valeur la plus basse (codee par 0), et ce qui est au-dessus du seuildevient la plus haute (code par 1).

1.4 Discretisation du temps : interpretation synchroneou asynchrone

Pour completer la definition de l’interface entre l’environnement et le dis-positif informatique represente par une machine sequentielle, il faut definirla structure de sequence, c’est-a-dire decider comment la suite de paliers dela figure 6.1-c doit etre interpretee en une sequence d’elements de l’alphabetd’entree, a fournir a la machine.

Il y a essentiellement deux choix : l’interpretation asynchrone, et l’in-terpretation synchrone, que nous exposons ci-dessous.

1.4.1 Interpretation asynchrone

En interpretation asynchrone, la structure de sequence est definie par leschangements de hauteurs de paliers.

Dans le cas d’une information booleenne, qui ne comporte que deux hau-teurs de paliers, on parle de front montant ou de front descendant, selon qu’onpasse du niveau inferieur au niveau superieur ou inversem*nt. Notons que cetteinterpretation de la suite de paliers donne des sequences ou les fronts montantset descendants alternent, par construction.

Par consequent, quelle que soit la courbe de la grandeur mesuree, et quelleque soit la position des fronts sur l’echelle de temps physique, la sequence deshauteurs de paliers est une alternance de 0 et de 1 ; la sequence des frontsporte exactement la meme information. Il n’est donc pas tres interessant deconsiderer la reaction d’une machine sequentielle a cette sequence d’entrees.

version en ligne - [PDF Document] (132)

124 Temps, donnees temporelles et synchronisation

temps

G

1

GD

1

GD

G

temps

(a)

(b)

(d)

(c)

(A) (B)

α

temps

G

1

GD

1

GD

G

temps

β

Fig. 6.1 – Sequence d’entrees correspondant a une grandeur continue de l’environne-ment :a) evolution d’une grandeur continue ; b) discretisation de l’axe G ; c)discretisation du temps, interpretation asynchrone ; d) discretisation du temps,interpretation synchrone.A) Cas d’une grandeur ; B) cas de plusieurs grandeurs

version en ligne - [PDF Document] (133)

1. Interface entre un dispositif informatique et un environnement physique 125

En revanche, des que l’on considere plusieurs grandeurs, les paliers (ou,de maniere equivalente, les fronts) sont superposes. En associant une variablebooleenne — par exemple α — a chacune des grandeurs, et en notant α lavaleur 1 de cette grandeur, α la valeur 0 de cette grandeur, on peut construireune sequence de monomes booleens qui reflete les superpositions de paliers.On passe a un nouvel element de la sequence des que l’une au moins des deuxgrandeurs change de palier. Pour l’exemple de la figure 6.1-Bc, on construit lasequence

α.β, α.β, α.β, α.β, α.β, α.β, α.β, α.β

Il devient interessant de decrire des machines sequentielles capables de trai-ter des sequences ainsi construites.

Exemple E6.1 : Interpretation asynchrone de deux grandeurs etcomptageConsiderons une machine sequentielle qui percoit deux grandeurs α et β, etdont la sortie booleenne γ est vraie si et seulement si les deux grandeurs onteu la meme valeur un nombre pair de fois dans le passe.

En utilisant la sequence des niveaux superposes, on ecrira par exemple lamachine de Moore suivante :

γ = fauxγ = vrai

α.β ∨ α.β

¬(α.β ∨ α.β)

α.β ∨ α.β

¬(α.β ∨ α.β)

ImpairPair

Fig. 6.2 – Machine de Moore lisant la sequence des niveaux

Pour la sequence α.β, α.β, α.β, α.β, α.β, α.β, α.β, α.β, la sequencede sortie est : γ, γ, γ, γ, γ, γ, γ, γ, γ.

On peut aussi considerer que δ denote le front montant d’une grandeurbooleenne D, et δ son front descendant. La sequence construite pour l’exemplede la figure 6.1-Bc est alors : β, α, β, α, β, α.β, α. Notons que l’origine des tempsn’est pas consideree comme un front. D’autre part rien n’empeche d’envisagerle changement simultane des deux grandeurs, d’ou l’existence d’elements de lasequence de la forme α.β.

1.4.2 Interpretation synchrone

L’interpretation synchrone est un cas particulier de l’interpretation asyn-chrone decrite ci-dessus pour deux grandeurs, dans lequel on considere que

version en ligne - [PDF Document] (134)

126 Temps, donnees temporelles et synchronisation

l’une des grandeurs est l’horloge de l’autre. La grandeur choisie comme hor-loge definit un decoupage de l’axe du temps qui permet d’echantillonner l’autregrandeur. Ce decoupage n’est pas necessairement regulier en temps physique ;l’axe du temps sous-jacent n’est pas decoupe en intervalles de tailles egales,quoique ce soit generalement le cas avec des horloges regulees par des quartz.

En interpretation synchrone, on a donc toujours au moins deux grandeurs.Notons d’ailleurs que synchrone signifie litteralement qui partage le memetemps, et qu’il faut etre au moins deux pour partager quelque chose. Deuxgrandeurs seront dites synchrones si elles sont echantillonnees sur la memehorloge, asynchrones sinon.

A partir d’une grandeur qui sert d’horloge et d’une ou plusieurs autresgrandeurs, on fabrique une sequence d’entrees de la machine sequentielle encreant un element de sequence par front d’horloge : c’est un monome qui decritle niveau des autres grandeurs a l’instant de ce front.

Nous verrons qu’une machine sequentielle peut etre realisee par un circuitsequentiel synchrone (Cf. Chapitres 10 et 11). Une horloge determine alorsles instants auxquels la machine change d’etat. Un processeur peut etre vucomme une machine sequentielle synchrone cadencee elle-aussi par son hor-loge (Cf. Chapitre 14). Il existe aussi des realisations, dont des processeurs,asynchrones. Nous n’etudions pas cette technique dans ce livre.

Exemple E6.2 : Machine a cafe (suite de l’exemple E5.2)Nous envisagions une sequence d’entrees commencant pars1.s2.s5, s1.s2.s5, s1.s2.s5, ...

Si l’on utilise l’interpretation asynchrone definie ci-dessus, les entrees s1,s2, s5 et fs de la machine a cafe sont superposees, et on en deduit unesequence d’entrees en creant un nouvel element uniquement quand l’une aumoins change. La sequence ci-dessus n’apparaıt donc jamais.

Si l’on utilise l’interpretation synchrone, en revanche, on introduit unecinquieme entree implicite : l’horloge. On construit un element de la sequencepour chaque periode d’horloge. La sequence ci-dessus peut donc apparaıtre.

2. Signaux logiques et representation par des

chronogrammes

Les grandeurs physiques continues dont nous avons envisage ladiscretisation sont des signaux physiques. Nous appellerons signal logiquel’echantillonnage d’un tel signal physique par les fronts d’un autre signal quisert d’horloge.

On etudie l’influence des problemes de synchronisation sur la realisation desautomates synchrones dans le chapitre 10.

L’evolution au cours du temps des horloges et des signaux logiques peutetre representee par des courbes en creneaux carres, comme sur la figure 6.3.

version en ligne - [PDF Document] (135)

3. Problemes de synchronisation 127

Temps

H

a

Fig. 6.3 – Un exemple de representation de signaux logiques par des chronogrammes :H est un signal d’horloge, et a est un signal logique d’horloge H (noter quel’horloge est un signal booleen. Ici le signal a est egalement booleen).

H

S

S0

t2t1

S2S1

Fig. 6.4 – Representation de l’evolution de grandeurs : la valeur S codee sur 3 bits S0,S1 et S2 est momentanement instable entre les instants t1 et t2

Ces courbes sont des chronogrammes.Si l’on s’interesse au temps de changement de valeur discrete d’un si-

gnal par rapport au rythme d’une horloge H, et aux eventuels problemesd’echantillonnage qui en decoulent, on peut representer l’evolution temporelledes grandeurs en jeu par une figure comme 6.4.

Pour representer des valeurs indefinies ou non significatives, nous utilisonsaussi les representations donnees dans la figure 6.5.

3. Problemes de synchronisation

Nous avons envisage jusqu’ici le cas d’un dispositif informatique connectea un environnement physique dont il doit echantillonner les grandeurs.

Si l’on s’interesse a plusieurs dispositifs informatiques, on peut considererchacun comme l’environnement de l’autre : les sorties de l’un peuvent etre lesentrees de l’autre. Pour etudier les problemes de synchronisation entre systemesinformatiques, on suppose que les deux systemes sont decrits par des machinessequentielles, et que les entrees de l’un peuvent etre les sorties de l’autre.

version en ligne - [PDF Document] (136)

128 Temps, donnees temporelles et synchronisation

t0

a) b)

δ2δ1

Fig. 6.5 – Representations particulieres de valeurs :a) Signal booleen dont la valeur est indefinie avant l’instant t0b) La valeur n’est significative que pendant les periodes δ1 et δ2 ; ce type deschema est souvent utilise pour representer la valeur presente sur un bus :lorsque aucun composant n’est connecte au bus sa valeur n’est pas significa-tive.

V

instants de lecture, cas 1

instants de lecture, cas 2

Fig. 6.6 – Acces a une valeur commune V

Si les deux dispositifs A et B recoivent un meme signal qui peut servird’horloge commune H, ils peuvent echantillonner toutes les grandeurs surla meme horloge. Dans le cas contraire, les deux dispositifs A et B peuventneanmoins avoir des horloges locales, c’est-a-dire utiliser chacun un signal par-ticulier comme horloge pour echantillonner les autres signaux, mais chacundoit etre considere comme l’environnement asynchrone de l’autre.

3.1 Le probleme general d’acces a un signal commun

On considere deux dispositifs informatiques appeles recepteur et emetteur,qui doivent se mettre d’accord sur une valeur V produite par l’un et consommeepar l’autre. L’emetteur a un comportement cyclique : il maintient une valeursur le fil (ou les fils) V pendant un certain temps, puis fabrique une nouvellevaleur (pendant ce temps l’etat du fil est indetermine) et la maintient sur lefil, etc.

Le recepteur a egalement un comportement cyclique : il accede a ce fil enlecture ; consomme la valeur (ce traitement prend un certain temps) ; accedede nouveau a V , etc.

Le probleme pose comporte deux contraintes :

– Le recepteur ne doit pas consommer deux fois la meme valeur

version en ligne - [PDF Document] (137)

3. Problemes de synchronisation 129

– Le recepteur ne doit pas ignorer une valeur

Si les deux dispositifs evoluent de maniere completement independante l’unde l’autre, les instants de lecture sont quelconques : les deux problemes ci-dessus peuvent survenir. Voir figure 6.6 : dans le cas 1, les instants de lecturesont trop proches, le recepteur lit plus vite que l’emetteur ne produit ; dans lecas 2, les instants de lecture sont trop eloignes, le recepteur ne lit pas assezvite.

Il faut donc se debrouiller pour synchroniser l’emetteur et le recepteurpour l’acces a la valeur commune V . Cette synchronisation est assuree par unprotocole de communication.

3.2 Protocole poignee de mains et mise en oeuvre

3.2.1 Le protocole

Pour eviter les deux cas de fonctionnement incorrect decrits par la figure 6.6,on doit assurer que :

1. le recepteur ne peut pas lire deux fois la donnee V sans avoir ete prevenupar l’emetteur d’un changement entre temps ;

2. l’emetteur ne peut pas modifier la valeur de la donnee (c’est-a-direemettre deux valeurs differentes) a moins d’avoir ete prevenu parle recepteur entre temps que la premiere valeur a effectivement eteconsommee.

On introduit a cet effet deux signaux de synchronisation E pret et R pret.E pret est produit par l’emetteur et consomme par le recepteur. R pret estproduit par le recepteur et consomme par l’emetteur. L’idee est d’assurer lasynchronisation par un dialogue entre l’emetteur (E) et le recepteur (R), de laforme suivante : E est responsable de la production des valeurs V, et previentR de l’apparition d’une nouvelle valeur — c’est le signal E pret ; R attendd’etre ainsi prevenu pour consommer la valeur presente sur le fil ; il envoieensuite a E un acquittement de lecture — c’est le signal R pret ; lorsqu’il recoitl’aquittement de lecture en provenance de R, E peut proceder a la productiond’une nouvelle valeur.

Remarque : Cette idee d’un echange d’informations supplementaires dutype j’ai ecrit et j’ai bien lu, pour reguler les acces en lecture/ecriture a uneinformation partagee est une idee simple et tres generale. La complexite desprotocoles de communication dans les reseaux informatiques tient a un autreprobleme : les lignes de transmission entre l’emetteur et le recepteur ne peuventpas etre considerees comme fiables, ce qui oblige a prevoir la reemission desmessages et de leurs acquittements. En effet, lorsqu’un signal comme X pretest emis par l’un, on n’a pas de garantie de reception par l’autre.

version en ligne - [PDF Document] (138)

130 Temps, donnees temporelles et synchronisation

3.2.2 Mise en oeuvre, cas general

L’emetteur a une horloge H e et le recepteur une horloge H r. Les deuxsignaux E pret et R pret donnent deux signaux logiques chacun, selon qu’ilssont echantillonnes par l’horloge de l’emetteur ou par l’horloge du recepteur.On considere les 4 signaux logiques suivants p ep, d ep, p rp, d rp (Cf. Fi-gure 6.8) : emission du signal E pret (echantillonne sur H e), detection dusignal E pret (echantillonne sur H r), emission du signal R pret (echantillonnesur H r), detection du signal R pret (echantillonne sur H e).

Le prefixe p indique la production du signal, le prefixe d indique sadetection.

E pret est egal a son echantillonnage sur l’horloge H e, puisqu’il est produitsur cette horloge ; il est en revanche different de son echantillonnage sur H r.

Fonctionnement temporel de l’emetteur et du recepteur La fi-gure 6.7 donne les machines de Moore decrivant le comportement temporelde l’emetteur et du recepteur, en terme des signaux logiques p ep, d ep, d rp,p rp. Chacune des machines change d’etat sur les fronts de son horloge, d’apresla valeur des signaux de communication a cet instant-la.

En observant le comportement des deux machines sequentielles, on peut seconvaincre des proprietes suivantes :

– Le recepteur ne peut pas passer deux fois dans l’etat de lecture de V sansque l’emetteur ait quitte son etat d’ecriture.

– Symetriquement, l’emetteur ne peut pas passer deux fois dans l’etatd’ecriture sans que le recepteur soit passe dans son etat de lecture.

Representation par des chronogrammes Les chonogrammes de la fi-gure 6.8 illustrent les contraintes d’ordre sur les fronts de la donnee V et dessignaux logiques p ep, d ep, d rp, p rp, imposees par le protocole poignee demains ainsi que l’etat courant de l’emetteur et du recepteur.

3.2.3 Mise en oeuvre : cas particuliers

Synchronisation par horloge commune ou horloges inverses :Lorsque les deux dispositifs qui communiquent echantillonnent les grandeurssur la meme horloge, le schema de la figure 6.8 est simplifie : il n’y a pas dedecalage temporel entre la production d’un signal et sa detection (si l’on negligele delai de transmission du signal d’horloge dans les connexions physiques parrapport au temps de traversee d’un circuit combinatoire).

Le cas des horloges inverses, He = Hr est un cas simple ou l’opposition dephase des horloges des deux systemes resoud les problemes d’echantillonnageet de stabilite des grandeurs echangees.

version en ligne - [PDF Document] (139)

3. Problemes de synchronisation 131

Recepteur (changementsd’etat sur fronts montants de H r)d’etat sur fronts montants de H e)

Emetteur (changements

d epd rpd rp

d ep

E1

E2

R1

R2

t2t4

d epd rp

d rp

p ep p rp

t1t3

p ep p rp

d ep

Fig. 6.7 – Machines de Moore decrivant le fonctionnement temporel de l’emetteur et durecepteur, dans le cas d’un protocole de poignee de mains. Etat E1 : attented’emission ; Etat E2 : emission de V et attente d’acquittement de la part durecepteur. Etat R1 : attente de valeur ; Etat R2 : emission de l’acquittementet attente de prise en compte de cet acquittement par l’emetteur. Transitiont1 : consommation de la valeur V ; Transition t2 : reconnaissance du fait quel’acquittement de consommation de V a ete pris en compte par l’emetteur ;Transition t3 : prise en compte de l’acquittement en provenance du recepteur ;Transition t4 : reconnaissance du fait que le recepteur traite l’informationenvoyee par l’emetteur.

version en ligne - [PDF Document] (140)

132 Temps, donnees temporelles et synchronisation

H r

d ep

H e

p ep

p rp

d rp

Recepteur

Ecr. Attente Ecr

Att. Consomm. Attente

Ecriture

Consomm.

Emetteur

V

Temps

Fig. 6.8 – Comportement temporel des signaux dans un protocole poignee de mains.On a represente : la donnee V dont les valeurs sont emises par l’emetteur,sur son horloge H e ; l’horloge du recepteur H r ; les signaux logiques p ep,d ep (resp. d rp, p rp) qui correspondent a l’echantillonnage du signal E pret(resp. R pret) sur les horloges de l’emetteur et du recepteur. Les courbespointillees grasses terminees par une fleche illustrent des relations de cause aeffet, deductibles du fonctionnement temporel de l’emetteur et du recepteur.Les lignes obliques en trait plein, sans fleche, illustrent les decalages temporelsentre la production d’un signal, c’est-a-dire son echantillonnage sur l’horlogedu producteur, et la detection de ce signal, c’est-a-dire son echantillonnagesur l’horloge du consommateur.

version en ligne - [PDF Document] (141)

4. Un exemple : la machine a cafe 133

Synchronisation avec delai constant : Lorsque le temps de reaction(consommation) du recepteur est toujours le meme, et connu lors de laconstruction du systeme qui fait communiquer les deux dispositifs informa-tiques, la mise en oeuvre du protocole de poignee de mains est tres simplifiee :le signal d’acquittement en provenance du recepteur n’est plus un vrai signalphysique : il est implicite. L’emetteur peut en effet considerer que l’acquitte-ment j’ai bien lu survient n coups d’horloges apres la production du signal j’aiecrit ; il peut meme arriver que n = 1.

C’est un mode de synchronisation qui peut parfois etre utilise entre le processeur(l’emetteur) et une memoire (le recepteur) (Cf. Chapitres 14 et 15).

Emetteur rapide : Si l’emetteur est suppose beaucoup plus rapide que lerecepteur, on sait que le recepteur ne peut pas consommer deux fois la memevaleur. Il suffit d’assurer que le recepteur n’ignore pas de valeur. Pour cela,on ajoute un signal de synchronisation qui permet au recepteur de signalerqu’il a consomme une valeur. L’emetteur attend cet acquittement avant deproduire une nouvelle valeur. En fait le recepteur est esclave de l’emetteur : iln’a pas d’horloge propre, et utilise l’un des signaux emis par l’emetteur commehorloge.

Recepteur rapide : Inversem*nt, si le recepteur est suppose beaucoup plusrapide que l’emetteur, on sait qu’aucune valeur emise ne peut lui echapper. Ilsuffit d’assurer qu’il ne lit pas deux fois la meme valeur. Pour cela on ajoute unsignal de synchronisation qui permet a l’emetteur de signaler qu’il a produitune nouvelle valeur. Le recepteur attend cet avertissem*nt pour lire.

4. Un exemple : la machine a cafe

Exemple E6.3 : Machine a cafe (suite de l’exemple E5.2, p 105)Nous reprenons l’exemple de la machine a cafe. Il s’agit d’etudier maintenantla definition des sequences d’entrees de la machine sequentielle qui representele controleur, d’apres les grandeurs physiques qui evoluent dans l’environne-ment de ce controleur.

On considere que les divers dispositifs electromecaniques de la machine acafe emettent des signaux physiques que l’on echantillonne sur l’horloge ducontroleur informatique. Cette horloge est supposee beaucoup plus rapide quele temps de reaction des capteurs.

La figure 6.9 donne : l’horloge H du controleur ; le signal physique s1 issudu capteur qui detecte l’insertion d’une piece de 1F ; le signal logique s1hobtenu par echantillonnage de s1 sur l’horloge du controleur ; le signal logique

version en ligne - [PDF Document] (142)

134 Temps, donnees temporelles et synchronisation

H

s1

s1h

s1hf

sortie

Fig. 6.9 – Signaux d’entree et de sortie de la machine a cafe

s1hf obtenu par detection des fronts montants de s1h ; une sortie sortie de lamachine sequentielle.

Il est necessaire de detecter les fronts de s1h afin de fournir en entree ducontroleur un signal logique qui indique l’insertion d’une piece pendant auplus une periode d’horloge. En effet la machine sequentielle qui represente lecontroleur change d’etat a chaque periode d’horloge, et risquerait sinon d’uti-liser plusieurs fois le meme signal pour compter une piece de 1F. Nous verronsau chapitre 9, paragraphe 1.2.4, un dispositif materiel capable de realiser cettedetection de fronts.

Si l’entree s1 fait passer dans un etat ou la sortie sortie est active, le signallogique correspondant a cette sortie est vrai des la periode d’horloge qui suitle front montant de s1h et le reste pendant toutes les periodes d’horloge ou lamachine sequentielle est dans le meme etat.

version en ligne - [PDF Document] (143)

Deuxieme partie

Techniques del’algorithmique materielle

version en ligne - [PDF Document] (144)

version en ligne - [PDF Document] (145)

Chapitre 7

De l’electron aux dispositifslogiques

L’objet de ce chapitre est de montrer quels phenomenes physiqueselementaires sont mis en oeuvre dans les realisations materielles de cer-taines fonctions dont, principalement, les fonctions booleennes. Ces realisationsmaterielles recoivent le nom de dispositifs logiques. Nous verrons plus loin com-ment combiner de telles fonctions pour realiser les elements d’un ordinateur.Cela se fera seulement a travers un moyen de realisation des dispositifs : latechnologie CMOS (Complementary Metal Oxyde Semiconductor). Nous nedonnons que les principes generaux. Il n’est pas question ici d’inclure un courscomplet de physique ou d’electronique donnant les tenants et aboutissants dechacun des phenomenes etudies.

Nous envisageons les phenomenes sous des points de vue d’abstractioncroissante : l’echelle atomique, ou l’on parle d’atomes et d’electrons (pa-ragraphe 1.) ; l’echelle electrique, ou l’on parle de resistances, de conden-sateurs et de transistors (paragraphe 2.) ; l’echelle logique, ou l’on parlede fonctions booleennes (paragraphe 3.). Nous nous eloignons ainsi pro-gressivement des phenomenes physiques pour en avoir une vision enterme d’information. Cela permet de decrire l’ensemble des circuits lo-giques utilises dans les ordinateurs (paragraphe 4.). Nous donneronsaussi un bref apercu de la fabrication des circuits, notamment en raisonde l’influence qu’elle a sur les methodes de conception (paragraphe 5.).

1. Phenomenes a l’echelle atomique

1.1 Atomes, electrons et cristaux

1.1.1 Atomes, electrons

La matiere est constituee d’atomes. Chaque atome est constitue d’unnoyau et d’un cortege d’electrons appele nuage electronique. Les electrons

version en ligne - [PDF Document] (146)

138 De l’electron aux dispositifs logiques

portent chacun une charge electrique elementaire negative et le noyau autantde charges positives qu’il y a d’electrons. On repartit les electrons selonleur energie en niveaux d’energie. La classification periodique des elementsde Mendeleıev donne pour chaque element : le nombre d’electrons dans lecortege ; le nombre de niveaux d’energie contenant des electrons ; le nombred’electrons appartenant au niveau d’energie le plus eleve (la couche externe).Extrayons une partie de cette table :

B bore C carbone

Si silicium P phosphore

Ga gallium Ge germanium As arsenic

Le carbone, le silicium et le germanium ont 4 electrons au niveau d’energiele plus eleve, le bore et le gallium en ont 3, le phosphore et l’arsenic 5.

1.1.2 Cristaux

Les atomes d’un corps sont lies entre eux plus ou moins fortement etpeuvent se disposer les uns par rapport aux autres selon des structuresregulieres : les cristaux. Le diamant et le graphite sont 2 organisations phy-siques differentes du meme element chimique carbone. De meme il existe desvarietes de silicium monocristallin et polycristallin qui sont obtenues par desprocedes de fabrication differents.

1.2 Courant et conducteur

L’organisation des atomes en reseaux cristallins entraıne un elargissem*ntdes niveaux d’energie (qui sont discrets) en bandes d’energies (qui sont conti-nues) et une delocalisation des electrons de plus haute energie sur l’ensembledu reseau. Le courant electrique est un mouvement d’ensemble de particuleschargees, ici les electrons. Qui dit mouvement dit energie cinetique, donc va-riation de l’energie totale de l’electron. Ceci n’est possible que s’il trouve uneplace a l’energie correspondante dans une bande d’energie autorisee et nonpleine.

1. Si la derniere bande n’est pas pleine, l’energie necessaire a cette excursionest faible : on parle de conducteur comme le cuivre, l’or, l’aluminium.

2. Si la derniere bande est pleine et separee de la suivante par une zoned’energie non autorisee (gap), l’energie necessaire a la production d’uncourant electrique est forte : on parle d’isolant . Le quartz est un cristalisolant d’oxyde de silicium. Le verre est un oxyde de silicium, isolant,mais non cristallin.

3. Il arrive que le gap soit faible, l’energie necessaire est alors intermediaire :on parle de semi-conducteur . Le silicium et le germanium sont deux corpssimples semi-conducteurs. L’arseniure de gallium est un corps composesemi-conducteur. Ces trois materiaux sont les constituants de base des

version en ligne - [PDF Document] (147)

1. Phenomenes a l’echelle atomique 139

circuits electroniques. Le silicium est le plus repandu dans les composantsutilises en informatique. Le dioxyde de silicium peut etre utilise commeisolant, il peut etre obtenu facilement a la surface du silicium.

En gagnant de l’energie (par exemple d’origine thermique), un electron peutatteindre la bande de conduction et s’eloigner, laissant derriere lui un trou dansla bande de valence et un atome charge positivement. Il y a donc creation d’unepaire (electron mobile negatif, trou fixe positif). Reciproquement, un autreelectron perdant de l’energie peut venir combler ce trou et retablir l’equilibreelectrique de l’atome. On parle alors de recombinaison electron-trou. Du pointde vue electrique, il est alors commode de considerer que c’est un trou positifqui s’est deplace dans le cristal.

Dans un semiconducteur pur il y a autant de trous que d’electrons.

1.3 Diffusion et dopage

Faites cette experience (ou imaginez-la) : prenez un verre de the (pasune tasse, un verre) pas trop fort mais pas trop clair, Darjeeling, Earl Grey,Lapsang-Souchong, . . .au choix. A la surface du liquide deposez delicatementune goutte de lait. Ne remuez pas le verre et regardez par transparence. Il ya diffusion du lait dans le the. Au bout d’un certain temps, en un point duverre de the, la concentration de lait est fonction de la distance par rapportau point de depot de la goutte, de la concentration du the, de la grosseur dela goutte, de la temperature . . .

Imaginez le meme phenomene de diffusion d’un solide (du phosphore) dansun autre solide (du silicium). Bien sur il faut chauffer un peu, et on ne voitrien par transparence.

Le resultat de l’experience precedente est interessant en termes electriques.Les elements silicium et phosphore sont voisins par leur structure electronique :il y a un electron de plus dans le phosphore. L’introduction de phosphore dansle silicium modifie la structure et l’equilibre atomiques. Le silicium ainsi traiteest devenu meilleur conducteur. La difference de resistivite est importante. Enapportant un atome de phosphore pour 100 millions d’atomes de silicium, laresistivite est divisee par un facteur de l’ordre de 30 000.

On dit que le silicium a ete dope ; on parle de dopage negatif puisqu’ily a exces d’electrons. Quand le silicium a recu, par diffusion, des atomes dephosphore, tout se passe comme si on avait du silicium avec des electronslibres, non lies aux atomes.

On peut aussi doper positivement le silicium en diffusant du bore qui a unelectron de moins et obtenir un exces de trous.

L’interet du silicium est qu’il est facilement dopable et que le dioxyde desilicium est, lui, un obstacle au dopage. Par facilite de langage on dit souventdope N (pour Negatif, exces d’electrons) ou dope P (pour Positif, exces detrous) en parlant du silicium.

version en ligne - [PDF Document] (148)

140 De l’electron aux dispositifs logiques

Une etude plus detaillee de la physique des dispositifs semi-conducteurs setrouve dans [CW96] ou [GDS98].

2. Phenomenes a l’echelle electrique

2.1 Rappels d’electricite elementaire

– La resistance R d’un fil electrique hom*ogene de section constante est propor-tionnelle a la longueur L du fil, a la resistivite ρ du materiau et inversem*ntproportionnelle a la section S du fil.

– Si un fil est purement resistif, la difference de potentiel U aux bornes du filest proportionnelle a la resistance R de ce fil et a l’intensite I du courantqui le traverse. C’est la loi d’Ohm.

– Un sandwich Conducteur-Isolant-Conducteur realise un condensateur. Sacapacite C augmente avec la surface S des armatures conductrices et dimi-nue avec leur ecartement. Elle varie selon les caracteristiques electriques dumateriau isolant.

– La charge Q emmagasinee dans un condensateur est proportionnelle a lacapacite C du condensateur et a la difference de potentiel U aux bornes ducondensateur.

– La variation dQ/dt de la charge aux bornes du condensateur est l’intensitedu courant de charge (ou de decharge) du condensateur.

– Si deux conducteurs sont branches en serie entre deux points, le courantdoit passer dans les deux conducteurs. Les resistances s’ajoutent.

– Dans le mecanisme du pont diviseur si deux resistances de valeurs R1et R2 sont connectees en serie entre deux points relies a des potentielsVa et 0, le point situe entre les deux resistances est a un potentiel V =V a×R1/(R1 + R2).

– Si deux conducteurs sont branches en parallele entre deux points, lecourant passe en partie par un conducteur, en partie par l’autre, selonleurs resistances. Les conductances (inverse de resistances) s’ajoutent.

– Si un condensateur charge, de capacite C, est mis en situation de sedecharger a travers un conducteur de resistance R, il se decharge. La va-riation de tension est decrite par une exponentielle en e−t/RC . Le temps dedecharge est d’autant plus grand que R et C sont grands. Le phenomene decharge est symetrique.

– Une diode, constituee d’une zone dopee N et d’une zone dopee P, ne laissepasser le courant que dans un sens.

2.2 Le transistor a effet de champ M.O.S.

2.2.1 Description physique du principe du transistor a canal N

Observons la figure 7.1. Dans un substrat de silicium (variete mono-cristalline, faiblement dopee P) on delimite deux zones fortement dopees

version en ligne - [PDF Document] (149)

2. Phenomenes a l’echelle electrique 141

� � � �� � � � � �� � �

� �� �� �� �

� �� �� �� �

� �� �� �� �

� �� �� �� �

substrat P

Coupe x y Vue de dessus

Transistor relie

Coupe x y Vue de dessus

Transistor seul

BA

yx

A B

substrat P

N N N N

LGrilleGrille

Fig. 7.1 – Coupe et vue de dessus d’un transistor seul ou relie

Negativement. Ces deux zones sont espacees d’une distance L. La zone fai-blement dopee P est nommee substrat. Sur la zone rectangulaire entre les deuxzones dopees, on fait croıtre du dioxyde de silicium : le verre (isolant). Au-dessus du verre on depose du silicium (polycristallin) et on le dope aussi.

Remarque : La realite de fabrication est differente : en fait, le dopage dusilicium monocristallin du substrat et celui du silicium polycristallin au-dessusde l’oxyde pourraient etre simultanes : la couche de dioxyde de silicium bloquela diffusion.

On obtient ainsi deux sandwiches. L’un vertical :Conducteur – Isolant – Semi-conducteur

et l’autre horizontal :Semi-conducteur dope – Semi-conducteur – Semi-conducteur dope.

Le premier est a l’origine du nom Metal Oxyde Semi-conducteur. Sur lafigure 7.1, les zones dopees du substrat sont notees A et B. On appelle grille lazone de silicium polycristallin dope. L’isolant est sous la grille. Les deux zonesA et B sont ici supposees rectangulaires pour faciliter le dessin. La distance Lentre les deux zones est caracteristique d’une technologie de realisation. Si lejournal annonce la sortie d’un nouveau circuit en technologie 0,17 micron, celadonne la distance L pour les transistors.

2.2.2 Comportement electrique

Supposons que le substrat est relie a la masse et que les tensions sont tellesque Vsubstrat ≤ VA < VB. Nous appellerons B le drain et A la source.

Si la tension de grille est nulle, entre le drain et la source, se trouvent deuxjonctions NP orientees en sens inverse l’une de l’autre. Or une jonction a pourpropriete de ne conduire le courant que dans le sens N vers P. La jonctiondrain-substrat bloque donc le passage du courant entre le drain et la source :le transistor est bloque.

Lorsqu’une tension positive est appliquee sur la grille, le champ electriqueentre la grille et le substrat attire sous la grille et concentre en surface leselectrons libres du substrat (et repousse les trous en profondeur). En sur-

version en ligne - [PDF Document] (150)

142 De l’electron aux dispositifs logiques

� � �� � � � � �� � � � � �� � �

Tension de grille = 0 V Tension de grille = 0.5 V

B B BA = 0 VA = 0 V A = 0 V

N N N NN

P P P

Grille Grille Grille

source drain

: :N : : : : : : : : : :: : : : : : : : : :: : : : : : : : : :: : : : : : : : : : :..... .

Tension de grille = 5 V

Fig. 7.2 – Formation du canal dans un transistor

face, tout se passe alors comme s’il existait sous la grille un canal drain-sourcede faible profondeur, artificiellement dope negativement par l’accumulationd’electrons due au champ electrique grille-substrat. Ce canal est conducteur etun courant peut y circuler. L’intensite du courant est soumise a la loi d’Ohm :la resistance du canal entre source (A) et drain (B) est fonction de la longueuret de la section du canal mais aussi de la resistivite du semi-conducteur obtenu.

Cette resistivite diminue a mesure que la difference de potentiel entrela grille et le substrat augmente. Le transistor fonctionne donc comme uneresistance commandee par la difference de potentiel grille-substrat.

Cet effet de conduction du a un champ electrique a donne le nom de tran-sistor a effet de champ.

Une modelisation plus fine du transistor met en evidence une limite dutransistor : la tension du drain et la source doit etre inferieure a celle de lagrille faute de quoi le canal ne peut se former. Nous appellerons V gsth ladifference de potentiel minimale entre grille et source necessaire a la formationdu canal.

La figure 7.2, dans laquelle les petit* points representent des electrons,suggere la formation du canal.

Par rapport au substrat la grille du transistor se comporte comme unecapacite. Quand la capacite est chargee, elle est au potentiel d’alimentation,quand elle ne l’est pas, la grille est au potentiel de la masse.

2.2.3 Le transistor a canal P

Il est obtenu de facon assez symetrique du transistor a canal N. Le dopageest fait par du bore qui a 3 electrons sur la couche externe. Le dopage estPositif : des trous sont apparus. Le substrat faiblement dope N est relie aupotentiel positif d’alimentation, typiquement 5 volts. Le canal se forme si lepotentiel sur la grille est suffisamment plus petit que celui du substrat.

On remarque la difficulte de cohabitation sur un meme substrat de siliciumd’un transistor N avec un substrat P a la masse et d’un transistor P avec unsubstrat N relie a l’alimentation. C’est pourtant ce que l’on cherche a faire entechnologie CMOS, ou les deux types de transistors cohabitent. La technologie

version en ligne - [PDF Document] (151)

3. Phenomenes a l’echelle logique 143

de realisation brievement decrite au paragraphe 5.2 en tient compte.

2.2.4 Remarque finale a propos d’electricite

Le fonctionnement du transistor, N ou P, tel qu’il vient d’etre decrit est trescontinu : une petite variation d’un des parametres induit une petite variationde comportement. Le transistor ne passe pas brutalement de conducteur anon conducteur. Tout changement de l’epaisseur d’oxyde, de la longueur ducanal du transistor, de la difference de potentiel entre la grille et le substrat ouentre les points A et B donne une variation de l’intensite du courant de faconcontinue.

La mise en equation des phenomenes physiques mis en jeu dans le transistorMOS est traitee dans les livres d’electronique (Par exemple [CDLS86]) et n’apas sa place ici.

3. Phenomenes a l’echelle logique

Dans l’algebre booleenne, les deux elements significatifs sont codes 0 et1. Avec deux symboles, interpretes comme des chiffres 0 et 1, la numerationen base 2 permet de representer les nombres. Les dispositifs a transistors ontun comportement continu : toute variation infinitesimale des entrees provoqueune variation faible des sorties (courant, tension...). La question est de savoircomment representer des informations numeriques avec des dispositifs ainsicontinus.

Il existe des calculateurs dits analogiques. Le principe est simple : le nombre470 est represente par la tension 4,7 volts, le nombre 32 est represente par 0,32volts. Un circuit additionneur est un dispositif a deux entrees, capable dedelivrer sur la sortie la somme, ici 5,02 volts, des tensions. Ces machines sontdifficiles a calibrer si l’on souhaite une precision dans les calculs de plus de 4chiffres decimaux significatifs.

Par opposition aux calculateurs analogiques, les calculateurs les plusfrequents sont numeriques, ou digitaux . Les nombres sont representes par desvecteurs de booleens, ou vecteurs de bits .

3.1 L’abstraction logique

Les valeurs 0 et 1 d’un bit sont representees par des tensions, respectivementnulle (0 volt ou masse) et la tension d’alimentation, standardisee a 5 volts (deplus en plus souvent 3,3 volts, voire moins, notamment dans les machinesportables).

Les transistors sont fabriques de telle facon qu’il existe une tension deseuil (“threshold” en anglais) Vth au-dessus de laquelle l’entree d’un circuit in-terpretera le signal comme un 1, et comme un 0 au-dessous. La valeur nominalede Vth est choisie de maniere a optimiser la tolerance aux bruits et parasites

version en ligne - [PDF Document] (152)

144 De l’electron aux dispositifs logiques

Type de transistor Tension de commande Comportement

Canal N Alimentation PassantMasse Bloque

Canal P Masse PassantAlimentation Bloque

Fig. 7.3 – Comportement des transistors

electriques pouvant affecter le signal. Compte tenu des tolerances de fabrica-tion sur la valeur de Vth, tous les circuits interpreteront une tension inferieurea 0,75 volts comme un 0 et superieure a 4,5 volts comme un 1.

On parle de niveaux 0 logique et 1 logique, ou de niveaux logiques bas ethaut. En logique negative le niveau haut correspond au 0 et le niveau bas au1. Nous ne prendrons pas cette convention.

Etudions un comportement simplifie du transistor. Cette simplificationconsiste a faire comme si le canal du transistor etait soit totalement bloque soitpassant, auquel cas il a une resitance R. Nous ne regardons les transistors querelies soit a la masse, (le potentiel 0 volt), soit a un potentiel positif, la tensiond’alimentation. En realite les tensions electriques varient de facon continue, etparfois il y a des parasites.

Pour un transistor a canal N avec le substrat a la masse :

– Si la grille est a l’alimentation, le transistor est passant. S’il y a unedifference de potentiel entre A et B, du courant circule entre A et B.

– Si la grille est a la masse, le transistor est bloque. Meme s’il y a une differencede potentiel entre A et B, aucun courant ne circule entre A et B.

Pour un transistor a canal P, avec le substrat a l’alimentation, le fonction-nement est inverse :

– Si la grille est a a la masse, le transistor est passant. S’il y a une differencede potentiel entre A et B, du courant circule entre A et B.

– Si la grille est a l’alimentation, le transistor est bloque. Meme s’il y a unedifference de potentiel entre A et B, aucun courant ne circule entre A et B.

Ces differentes fonctions sont regroupees dans le tableau de la figure 7.3. Cecomportement simplifie fait abstraction de nombreux phenomenes. On parled’abstraction logique.

3.2 Realisation de la fonction logiquela plus simple : l’inverseur

Les fonctions logiques peuvent etre modelisees simplement par des fonc-tions booleennes. La realisation materielle de l’operation booleenne decomplementation s’appelle un inverseur . L’inverseur peut etre un montageelectrique ayant une entree E et une sortie S (L’algebre de Boole ne tient

version en ligne - [PDF Document] (153)

3. Phenomenes a l’echelle logique 145

evidemment pas compte de l’existence de l’alimentation et de la masse dansles montages electriques).

On fait abstraction des valeurs exactes des tensions electriques en disant :Si E = 0, alors S = 1 et si E = 1 , alors S = 0.

En realite, comme on va le voir, si 0 <= E <= 0,75 volts, alors S = 5 voltset si 4,5 <= E <= 5 volts, alors S = 0 volt.

Cela nous donne les points extremes de fonctionnement d’un inverseur.Mais quel peut etre le comportement souhaitable de l’inverseur entre ces deuxextremes ? Pour repondre a cette question imaginons deux montages : l’unconstitue de 4 inverseurs en serie : la sortie de l’un est l’entree du suivant. Dansl’autre les deux inverseurs sont retrocouples : la sortie de l’un est l’entree del’autre et reciproquement. Les schemas simplifies correspondants sont donnesfigure 7.4. L’inverseur y est represente par une simple boıte avec une entree eet une sortie s.

Dans le montage de 4 inverseurs en serie, envoyons un signal d’entree quien fonction du temps passe de 0 a 5 volts (la representation en escalier n’etantpas a prendre au pied de la lettre).

Examinons les sorties apres 2, ou 4, inversions pour trois types d’inverseurs.Les trois sont candidats au titre du meilleur inverseur.

Pour les trois types, nommes Accroissem*nt, Maintien, Diminution, nousdonnons une courbe de transfert donnant la tension de sortie de l’inverseuren fonction de la tension d’entree (Figure 7.5). Pour les trois types les va-leurs extremes des tensions sont respectees, et il existe une tension medianeVM pour laquelle la tension de sortie est egale a la tension d’entree. Mais lecomportement entre ces points est different.

Pour les trois types nous donnons l’allure de la reponse du montageconstitue de 2 ou de 4 inverseurs a l’entree en escalier.

L’inverseur de type Accroissem*nt accentue les differences entre les niveauxfaibles et forts. C’est un amplificateur. Si il y a un faible parasite en entree, leparasite n’est pas apparent en sortie.

A l’inverse l’inverseur de type Diminution diminue les differences entreniveaux faibles et forts. Des que le signal d’entree presente un parasite, leniveau de sortie risque d’etre autour de VM , ce qui n’est pas souhaitable.

De meme, pour le montage constitue de deux inverseurs retrocouples, oncomprend aisem*nt que l’inverseur de type Accroissem*nt donne un systemestable. Soit une sortie vaut 1 et l’autre 0, soit le contraire, mais une stabilisationa un etat intermediaire est tres improbable (quoique pas impossible). Avec uninverseur du type Diminution, on pourrait facilement obtenir un montage dedeux inverseurs retrocouples se stabilisant avec des sorties a VM .

C’est evidemment l’inverseur de type Accroissem*nt qui est le plusinteressant pour la realisation de fonctions booleennes.

L’electronique digitale etudie de facon precise comment obtenir un mon-tage ayant la bonne courbe de transfert. Elle permet aussi d’etudier unerealisation avec un point de basculement Vm proche de la moitie de la ten-

version en ligne - [PDF Document] (154)

146 De l’electron aux dispositifs logiques

entree

s1 apres 2 inversions s2 apres 4 inversions

Accroissem*nt

Maintien

Diminution

e s14 inverseurs en serie

s2

e s e se s e s e s e s

2 inverseurs retro-couples

5 V

0 V

Fig. 7.4 – Comportement des candidats inverseurs apres 2 ou 4 inversions

1 Ve5

Vs

5

1

1 Ve5

Vs

5

1

1 Ve5

Vs

5

1

Accroissem*nt Maintien Diminution

Fig. 7.5 – Courbes de transfert de trois candidats inverseurs

version en ligne - [PDF Document] (155)

3. Phenomenes a l’echelle logique 147

Inverseur CMOS

masse alim.

dN dP

gPgN

sN sP

Transistorsentree

sortie

a canal N a canal P

dN

gN

sN dP sP

gP

Fig. 7.6 – Schema conventionnel des transistors MOS et de l’inverseur CMOS. d,g,s sontrespectivement les Drains, Grilles et Sources. N et P designant les transistorsN et P.

Tension Resistance du Resistance du Tension ded’entree transistor N transistor P sortie

Ve RN RP Vs

0 V <= Ve <= 0.75 V infinie R1 5 V

4.5 V <= Ve <= 5 V R2 infinie 0 V

Fig. 7.7 – Reponse de l’inverseur CMOS

sion de reference, ce qui donne une bonne tolerance aux parasites ([CDLS86]).Nous donnons ici deux solutions : la principale est la technologie a base

de transistors MOS Complementaires (Complementary MOS). La figure 7.6donne la structure interne de l’inverseur. En technologie CMOS, l’inverseurest obtenu en connectant un transistor N et un transistor P en serie entre lamasse et l’alimentation. L’entree est la tension de grille commune aux deuxtransistors et la sortie est le point intermediaire entre les deux. Les substratsrespectifs des deux transistors N et P sont a la masse et a l’alimentation.

Si l’on considere les differentes valeurs possibles pour la tension d’entreeV e, on obtient le tableau de la figure 7.7, ou RN designe la resistance dutransistor a canal N, RP designe la resistance du transistor a canal P, V sdesigne la tension de sortie, egale, dans tous les cas, a Vref × RN/(RP + RN)ou Vref × 1/(1 + RP /RN), ou Vref designe la tension d’alimentation.

Une autre solution est de remplacer le transistor P par une resistance, maisla courbe de transfert est moins interessante. Le principal avantage est uneplus grande simplicite (Inverseur NMOS). On utilisera dans le livre certainesportes basees sur ce principe.

Il existe d’autres organisations d’inverseurs. Beaucoup des circuits de petiteechelle d’integration (quelques centaines de transistors par puce) sont dansune technique nommee Transistor Transistor Logic TTL. Mais la plupart descircuits de tres grande echelle d’integration sont aujourd’hui en CMOS.

version en ligne - [PDF Document] (156)

148 De l’electron aux dispositifs logiques

3.3 Fonctionnements statique et dynamiquede l’inverseur

L’analyse du fonctionnement statique de l’inverseur a ete faiteprecedemment. Si l’entree est stable a 1, la sortie est stable a 0. Si l’entreeest stable a 0, la sortie est stable a 1.

L’etude du comportement dynamique de l’inverseur concerne le comporte-ment lors des changements de tension d’entree. Elle doit prendre en compte ouest connectee la sortie de cet inverseur. La reponse est simple : a des grilles detransistors, en entree d’autres circuits logiques. Elles sont donc capacitives parrapport a la masse. On assimilera donc la sortie de l’inverseur a une capacite.

Que se passe-t-il lors du changement de la tension d’entree ? Lors d’un frontmontant, ou la tension d’entree passe de 0 a 5 volts, la sortie doit passer de 5 a0 volts. La capacite reliee a la sortie doit se decharger, vers la masse, a traversle transistor N. Symetriquement, lors d’un front descendant, la capacite desortie doit se charger a travers le transistor P.

Cette charge ou cette decharge se fait en un certain temps. Ce temps consti-tue le temps de basculement, ou temps de reponse, de l’inverseur. Ce tempsest couramment inferieur a la nanoseconde (10−9s). Il depend fortement dela valeur de la capacite. L’existence de ce temps de changement de la sortiede l’inverseur explique pourquoi tous les circuits logiques ont un temps dereponse.

4. Circuits logiques

Nous allons etudier dans la suite differents assemblages de transistorsrealisant des fonctions booleennes. Ces assemblages seront classes en deuxcategories :

– Les assemblages qui ne memorisent pas l’information, que l’on nomme cir-cuits combinatoires,

– Les assemblages qui memorisent de l’information, que l’on nomme circuitssequentiels.

Les differences entre ces deux types de circuits sont difficiles a comprendre.On y revient dans la suite du livre. Chacune des deux familles fait l’objet d’unchapitre entier (Cf. Chapitres 8 et 10).

4.1 Assemblages combinatoires

Les realisations des fonctions booleennes s’appellent des portes logiques . Lafigure 7.9 donne la structure de differentes portes logiques. L’inverseur est uneporte logique a une entree et une sortie. Il est deja connu (figure 7.9-a).

version en ligne - [PDF Document] (157)

4. Circuits logiques 149

P

N

N

S

P

N

PS

Charge

Decharge

E

E

S = 0 V

E = 0 V

E = 5 V

S = 5 V

C Dechargee

C Chargee

Fig. 7.8 – Decharge et charge de la capacite de sortie d’un inverseur

SE3

E2

E1

E

SE2

E1

S

SE2

E1

Porte ”inconnue”

(a)

Inverseur NOR2 NAND2

(d)(c)(b)

Fig. 7.9 – Structure interne de differentes portes de base

version en ligne - [PDF Document] (158)

150 De l’electron aux dispositifs logiques

4.1.1 La porte NOR a deux entrees E1 et E2

Le montage comporte deux transistors N et deux transistors P. Les deuxtransistors N sont en parallele entre la masse et la sortie, les deux transistorsP sont en serie entre l’alimentation et la sortie. Les grilles d’un transistor N etd’un transistor P sont connectees a l’entree E1, les grilles de l’autre transistorN et de l’autre transistor P sont connectees a l’entree E2. La sortie est doncreliee a la masse, via une resistance passante, si et seulement si une au moinsdes deux entrees est au niveau de l’alimentation. La fonction logique est unNOR a deux entrees. On le note parfois NOR2 (figure 7.9.-b).

4.1.2 La porte NAND a deux entrees E1 et E2

Le montage comporte deux transistors N et deux transistors P. Les deuxtransistors N sont en serie entre la masse et la sortie, les deux transistors P sonten parallele entre l’alimentation et la sortie. Les grilles d’un transistor N et d’untransistor P sont connectees a l’entree E1, les grilles de l’autre transistor N etde l’autre transistor P sont connectees a l’entree E2. La sortie est donc relieea la masse, via une resistance passante, si et seulement si les deux entrees sontau niveau de l’alimentation. La fonction logique est un NAND a deux entrees.On le note souvent NAND2 (figure 7.9-c).

4.1.3 Les portes a plus de deux entrees

De facon tres similaire au montage des portes NAND ou NOR a deux entrees,on obtient une porte NOR a trois entrees avec 3 transistors N en parallele entrela masse et la sortie et 3 transistors P en serie entre la sortie et l’alimentation.De meme on obtient une porte NAND a trois entrees avec 3 transistors N enserie entre la masse et la sortie et 3 transistors P en parallele entre la sortie etl’alimentation.

Le procede semble pouvoir continuer. N’oublions pas que les resistancesdes transistors passants en serie s’ajoutent. Certaines techniques de realisationvont imposer des contraintes d’origine electrique au nombre maximal d’entreesdes portes.

4.1.4 Une porte inconnue a trois entrees

Le montage de la figure 7.9-d est particulier en ce sens qu’il ne realisepas une fonction logique elementaire comme le NAND ou le NOR. On verifieaisem*nt que S vaut 0 si et seulement si E1 vaut 1 ou si E2 et E3 valent 1. Ona donc S = E1 + E2.E3.

4.1.5 Deux inverseurs en parallele : un petit et un gros

Si l’on connecte ensemble les sorties de deux inverseurs, que se passe-t-il ?Si les deux inverseurs ont la meme entree, donc la meme sortie, il n’y a riende special a dire, le comportement global est celui d’un seul inverseur.

version en ligne - [PDF Document] (159)

4. Circuits logiques 151

se

se

se

se se

e

se1

e2

c1 c2

s

e3

c3

e sC

e

C

s

C

A B

A

C

B

Commutateur- structure interne- schema simplifie

Porte de sortie 3 etats- structure interne- schema simplifie

Aiguillage 3 voies vers 1

Fig. 7.10 – Commutateur et aiguillage a base de commutateurs

Si les deux inverseurs ont des entrees differentes, on se trouve avec deuxmontages de ponts diviseurs de resistances en parallele. Si les deux inverseursont des resistances tres proches, la tension de sortie est autour de 2,5 volts.Si l’un des deux inverseurs a des transistors dont les resistances sont tresdifferentes de l’autre, un des deux inverseurs peut prendre l’avantage, la ten-sion de sortie prenant des valeurs de 2 ou 3 volts, par exemple. Ce type defonctionnement echappe evidemment au domaine des circuits combinatoiresbien construits...

Dans certaines technologies le pont diviseur obtenu laisse passer beaucoupde courant, ce qui produit de l’energie thermique. C’est le court-circuit.

4.1.6 Le commutateur ou interrupteur 3 etats

La source d’un transistor MOS peut ne pas etre connectee au meme poten-tiel que le substrat. On obtient alors entre drain et source un demi-interrupteurelectronique commande par la tension de grille qui permet de realiser desconnexions intermittentes entre d’autres elements. (Cf. Figure 7.10)

La polarite du signal de commande qui etablit la connexion depend du typede transistor (1 pour un transistor a canal N, 0 pour un transistor a canal P).Pour que les niveaux logiques 0 et 1 soient tous les deux bien transmis, onutilise une paire de transistors N et P. On a alors un interrupteur complet, ou

version en ligne - [PDF Document] (160)

152 De l’electron aux dispositifs logiques

s = si c1 et non c2 et non c3 alors non e1 sinonsi non c1 et c2 et non c3 alors non e2 sinonsi non c1 et non c2 et c3 alors non e3 sinonindefini

Fig. 7.11 – Comportement de l’aiguillage

commutateur. Le commutateur est d’usage frequent. Il est symbolise par unsimple carre incline.

4.1.7 L’aiguillage

Observons la figure 7.10. Dans l’aiguillage 3 voies vers 1 realise a base de 3commutateurs et de 3 inverseurs, on dit que la sortie s constitue une connexionde type bus . les complementaires des trois signaux e1, e2, e3 peuvent etreenvoyes sur le bus. La sortie s est decrite Figure 7.11. Cette sortie est parfoisindefinie.

Le cas indefini est complexe ; il y a deux sous-cas. Si l’on trouve deuxou trois sorties egales sur le bus, cela ne pose pas de probleme, et s prendcette valeur. Si l’on trouve des sorties differentes, selon les forces respectivesdes inverseurs qui traitent e1, e2 et e3, s recoit une valeur non booleenne. Cemontage ne doit donc s’utiliser qu’avec la garantie que seulement l’un parmic1, c2, c3 vaut 1.

4.1.8 L’amplificateur 3 etats

Observons la figure 7.12. L’ensemble inverseur (qui est aussi un amplifi-cateur) suivi d’un commutateur est parfois realise en un seul circuit nommeamplificateur/inverseur 3 etats. Le montage constitue de deux inverseurs suivisd’un commutateur recoit le nom de porte de sortie 3 etats. On peut dire aussique c’est un inverseur suivi d’un amplificateur/inverseur. Ce montage est uti-lise dans beaucoup de dispositifs comprenant des bus. Nous en utiliserons dansles chapitres relatifs aux entrees/sorties. On donne aussi une autre realisationde la porte 3 etats. Dans ces differents montages, les resistances des transistorsquand ils sont passants doivent etre ajustees soigneusem*nt.

4.1.9 La gare de triage

Par generalisation des aiguillages, et utilisation de portes de sortie 3 etats,le montage de la figure 7.13 permet de relier 4 points A, B, C et D.

Les liaisons entre A, B, C et D sont fonctions de signaux de commande desortie aout, bout, cout et dout et de signaux de commande d’entree ain, bin, cinet din. En fonctionnement normal, un seul des signaux de commande de sortiedoit valoir 1. Plusieurs des signaux de commande d’entree peuvent valoir 1.Par exemple quand aout et cin et din valent 1 et que tous les autres valent 0,

version en ligne - [PDF Document] (161)

4. Circuits logiques 153

es

se

e

s

e s e s e s

OE OE OE

(c)

(a) (b)

OE

OE

OE

Fig. 7.12 – Deux realisations de l’amplificateur/inverseur 3 etats et leurs symboles. L’in-verseur est represente par un triangle avec un petit rond, les 2 portes sontun nand2 et un nor2. (a) schemas en transistors. (b) schemas en transistorset portes. (c) symboles logiques.

A

cin cout

C

aout ain

bin

DB

bout din dout

Fig. 7.13 – Ensemble d’aiguillages constituant une gare de triage.

version en ligne - [PDF Document] (162)

154 De l’electron aux dispositifs logiques

la valeur de A est transmise sur C et D. Cette transmission est directionnelle.Ce type de structure est utilisee dans les interconnexions entre une memoireet plusieurs processeurs par exemple (Cf. Chapitre 16). La liaison centrale (engras sur la figure), par laquelle tout passe, est le bus du systeme.

4.2 Assemblages sequentiels

4.2.1 Introduction

La realisation de dispositifs sequentiels permet de stocker l’information.Cela signifie pieger la valeur d’un signal electrique a un instant donne dans undispositif ou cette valeur restera stable.

Pour comprendre cette mecanique commencons par voir comment une va-leur peut etre memorisee de facon stable. Pour cela examinons le retrocouplagede deux inverseurs deja rencontre pour l’etude de l’inverseur.

4.2.2 Le bistable

Observons la figure 7.14-a. Le montage de deux inverseurs, chacun ayantcomme entree la sortie de l’autre, a trois points de fonctionnement :

– l’entree du premier est au niveau logique 1, sa sortie au niveau logique 0.

– a l’inverse, c’est le deuxieme inverseur qui a l’entree a 1 et la sortie a 0 (cesdeux etats sont stables, le montage s’appelle un bistable car il a deux pointsde fonctionnement stable).

– l’entree et la sortie des deux inverseurs sont a 2,5 volts. Cet etat est instable,le moindre parasite sur une des deux connexions est amplifiee et le systemetombe dans un des deux etats stables. C’est pour cela qu’on a choisi desinverseurs de type Accroissem*nt (on parle souvent de meta-stabilite pourcet etat).

Il reste un probleme : ces deux etats sont tellement stables qu’on ne voit pascomment y pieger une nouvelle valeur. Resoudre ce probleme permet de realiserune memoire vive de 1 mot de 1 bit.

4.2.3 Les points memoire de type memoire vive

Le point memoire elementaire, telle qu’il est realise dans les boıtiers dememoire vive statique, permet de pieger une valeur nouvelle dans un bistable(figure 7.14-b). Si la commande de forcage F sur les 2 transistors de part etd’autre du bistable est active et si aux extremites du dispositif on presenteune valeur V1 et son complement V2 a l’aide de circuits plus puissants que lesdeux inverseurs utilises dans le montage bistable, ces deux valeurs restent enplace quand la commande F sur les deux transistors redevient inactive.

C’est un point de memorisation dans lequel on peut donc ecrire. La lec-ture se fait simplement en recuperant les valeurs du bit memorise et de son

version en ligne - [PDF Document] (163)

4. Circuits logiques 155

Bistable avec forcage

V1 V2

F

Bistable

e s

s e s e

e s

F1 F2 F3

E

C2C1

Points de memorisation dynamique

e s e s

(a) (b) (c)

Fig. 7.14 – Les differents points memoire

complementaire en sortie des deux inverseurs. Le chapitre 9, consacre auxelements de memorisation, reprend ces points en detail.

4.2.4 Les points de memorisation dynamiques

Il existe des points memoire utilisant un principe tout a fait different :c’est la capacite d’entree d’un inverseur, ou d’une porte, qui piege la valeur(Figure 7.14-c).

La memorisation a lieu pendant que les signaux F1 et F2 sont inactifs. Unenouvelle valeur est introduite dans la capacite du premier inverseur par la misea 1 de F1. Cette memorisation dans la capacite de grille d’un transistor ne peutetre de longue duree. Elle est en revanche tres interessante car elle n’utilisepas de circuits en plus des fonctions combinatoires. Si l’on veut transfererl’information d’un point a un autre on utilise F2. Il convient dans ces pointsde memorisation dynamique de ne pas avoir simultanement F1 et F2 actifs.

4.2.5 L’oscillateur

Le circuit oscillateur presente figure 7.15-a oscille. Le montage d’un quartzde frequence de resonnance donnee permet de rendre la frequence d’oscillationconstante. Ce montage fabrique un signal periodique, carre. Il est utilise commehorloge. Dans la suite du livre nous utiliserons ces primitives de reinitialisation(Reset) et d’horloge pour les realisations de circuits sequentiels.

4.2.6 Le monostable

Lors de l’appui sur le bouton Reset d’un ordinateur, une impulsion estgeneree, puis elle disparaıt. Un montage comme celui de la figure 7.15-b assurecette fonctionnalite.

version en ligne - [PDF Document] (164)

156 De l’electron aux dispositifs logiques

Vreset

R

(b)

R CCR

Clock

(a)

Fig. 7.15 – (a) Oscillateur delivrant une horloge. (b) Systeme de reinitialisation delivrantune tension de Reset.

5. Fabrication des dispositifs

Les dispositifs a base de transistors sont realises dans des chaınes de fabri-cation de haute technologie. Pour simplifier la presentation, supposons que lemonde comporte deux categories : les fabricants eux-memes et les clients. Sile client trouve dans les catalogues des fabricants le circuit dont il a besoin,deja concu, il l’achete et l’utilise. Sinon le client concoit un circuit pour uneapplication et le fait fabriquer, puis il integre le circuit dans un assemblage,generalement logiciel et materiel. Cet assemblage peut etre un ordinateur, unmagnetoscope . . .

Un circuit concu specialement pour une application s’appelle un A.S.I.C.(Application Specific Integrated Circuit). Le terme s’oppose aux circuits stan-dard (memoires, processeurs, . . .). La fabrication est dans ses grandes lignes lameme.

Les galettes de silicium de quelques decimetres de diametre subissent unesuite de traitements physico-chimiques destines a fabriquer les transistors. Lesdifferentes etapes sont simultanees : toutes les grilles des cent (et quelques)millions de transistors de la galette sont realisees en meme temps par un memedepot de silicium polycristallin. Differents depots font appel au procede dephotogravure que nous allons presenter.

5.1 Le procede de photogravure

Le procede de photogravure (Cf. Figure 7.16) permet d’obtenir un motifcomplexe dans un materiau A a la surface d’un materiau B.

Pour cela on depose du A partout a la surface du B. Puis on depose pardessus une couche d’un produit photo-sensible. On pose au-dessus un masquepartiellement opaque, partiellement transparent. Les zones opaques sont ap-pelees les noirs, les autres les blancs. Il y a des milliards de motifs de chaquecouleur, notre figure n’en comporte qu’un ! On illumine le tout par au-dessus(etape 1 de la figure 7.16). Le produit photo-sensible recoit de la lumiere enface des blancs du masque et n’en recoit pas en face des noirs du masque. Unproduit chimique permet d’attaquer le produit photo-sensible la ou il a recude la lumiere et seulement la (etape 2 de la figure 7.16).

version en ligne - [PDF Document] (165)

5. Fabrication des dispositifs 157

BA

BA

2 : apres enlevementdu produit photonon illumine

3 apres enlevementdu produit A adecouvertB

A

lumiere

prod photo

1 : flashage

Fig. 7.16 – Trois etapes du procede de photogravure

Apres cette attaque, le materiau A est apparent en face des blancs dumasque. Puis un deuxieme produit chimique attaque le materiau A la ou il esten surface (etape 3 de la figure 7.16). Le materiau B est alors sur le dessusen face des blancs du masque. Un troisieme produit chimique attaque le pro-duit photo-sensible la ou il n’a pas ete illumine. On obtient ainsi une forme enmateriau A a la surface d’un substrat constitue de materiau B. Cette formeest celle qui etait dessinee sur le masque. La mise en oeuvre effective de ce pro-cessus de fabrication demande une haute technologie pour obtenir des dessinsdont les tailles sont de l’ordre du dizieme de micron.

A partir du schema de connexions entre les transistors l’obtention des des-sins des masques suppose de manipuler quelques centaines de millions de rec-tangles. Un outil de Conception Assistee par Ordinateur est evidemment in-dispensable. Les vieillards se souviennent avec emotion du bon temps ou lescircuits n’avaient que quelques centaines de transistors et ou les crayons de cou-leurs et le papier quadrille tenaient lieu d’assistance. Les schemas physiquesetaient obtenus en decoupant de l’autocollant noir, aux ciseaux, et en le collantsur du papier blanc. Un negatif d’une photo de la feuille de papier tenait lieude masque.

5.2 Un procede de fabrication : CMOS a grille siliciumpolycristallin et a deux niveaux de metal

La fabrication de circuits logiques organises avec des transistors N etdes transistors P necessite de nombreuses operations technologiques. Nousles envisageons ici a travers les dessins des masques impliques. Les masquescomportent les dessins des motifs necessaires a la realisation simultanee desquelques millions de transistors sur la galette de silicium d’une vingtaine decentimetres de diametre. Nous ne dessinons ici qu’un inverseur.

La figure 7.17 montre par 6 dessins A, B, C, D, E et F les masques utilises.Nos dessins sont simplifies par rapport a la realite. Sur les vues en coupe lesvraies proportions ne sont pas respectees. La ligne de surface du substrat quiapparaıt sur les coupes n’est pas si rectiligne. Il y a en realite environ 15

version en ligne - [PDF Document] (166)

158 De l’electron aux dispositifs logiques

� � � � �� � � �

� �� � �� �

� � � �� � � �

� � �

� � � � � ���

� �� � �� �

� � � � �� � � � �

� �� � ��

� �� �

��

� � �� � �� � �� � �� � �� � �

� �� �� �

!" # # # # # # # # # # # ## # # # # # # # # # # #$ $ $ $ $ $ $ $ $ $ $$ $ $ $ $ $ $ $ $ $ $

% % % % %% % % % %% % % % %% % % % %

& & & & && & & & && & & & && & & & &' ' ' ' ' ' ' ' ' ' ' '' ' ' ' ' ' ' ' ' ' ' '( ( ( ( ( ( ( ( ( ( (( ( ( ( ( ( ( ( ( ( ()*

+ + + + ++ + + + ++ + + + ++ + + + +

, , , ,, , , ,, , , ,, , , ,

- - - -- - - -- - - -- - - -

. . . .

. . . .

. . . .

. . . .

/ / / / // / / / // / / / // / / / // / / / /

0 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0

1 1 1 1 11 1 1 1 11 1 1 1 11 1 1 1 11 1 1 1 1

2 2 2 2 22 2 2 2 22 2 2 2 22 2 2 2 22 2 2 2 2

Caisson P Caisson N

Coupe xy

Caisson P

Coupe x’y’

Schema electriquee entree

s sortie

a masseV Vref

Legende des masques

DifP DifN

Sipol

Alu1

C1 C2

Alu2

Contacts

Coupe xy

e

a V

s

F

x

x’

y

y’

e

Caisson P

Dessin des masques

Caisson N

e

sa V

A B C

ED

Fig. 7.17 – Les masques intervenant dans la technologie CMOS. DifP est le masque dela zone diffusee P, DifN de la zone diffusee N, Sipol est le masque du siliciumpolycristallin, Alu1 et Alu2 sont les deux niveaux d’aluminium, C1 et C2 sontles deux niveaux de contacts sous l’aluminium. Les masques sont cumulesdans les differentes parties de la figure. La vue en coupe apres l’operation estselon la ligne xy ou la ligne x’y’. Dans les vues en coupe l’oxyde n’est pascolore.

version en ligne - [PDF Document] (167)

5. Fabrication des dispositifs 159

masques.Decrivons les operations principales :

1. La premiere consiste a doper, faiblement, un caisson P pour y realiser destransistors N. Le caisson P existe sous toute la zone des transistors N.Il y a de meme un caisson N pour les transistors P. Cette etape utiliseun premier masque. Puis on delimite a l’aide d’un deuxieme masque unezone active comprenant l’ensemble des zones qui seront diffusees et lestransistors. Des points de contacts entre l’alimentation, ou la masse, etle subtrat, ou le caisson, sont aussi dans les zones actives. Ce sont lespoints de polarisation. A l’exterieur de la zone active se trouve un oxydeepais de silicium (ces deux masques caisson et zone active sont partie A).

2. Puis on delimite la zone de silicium polycristallin, qui est au-dessus d’unecouche d’oxyde mince. Cette zone est l’entree de l’inverseur. (partie B,ou le caisson n’apparaıt plus).

3. Puis deux masques marquent les zones diffusees N ou P. Cette diffusionne passe pas a travers l’oxyde. Elle ne se fait pas, donc ni sous l’oxydemince, laissant la place aux canaux des transistors, ni sous l’oxyde epaishors de la zone active (partie C).

4. Une nouvelle couche d’oxyde epais est ajoutee, dans laquelle on delimitedes trous de contacts selon un nouveau masque (partie D).

5. Des connexions d’aluminium sont gravees entre differentes parties desdifferents transistors. L’alimentation, a droite sur la figure, relie le pointde polarisation du substrat N, et un cote des transistors P. La masse, agauche sur la figure, relie le point de polarisation du caisson P et un cotedes transistors N. Une autre connexion d’aluminium, au centre, relie letransistor N, le transistor P et la sortie de l’inverseur. Des connexionsd’aluminium peuvent aussi servir a relier des sorties d’inverseurs ou deportes a des entrees d’autres portes (partie E).

6. Si necessaire, on introduit une nouvelle couche d’oxyde epais, percee decontacts, et une nouvelle couche d’aluminium (partie F). On peut trouverainsi 3 ou 4 niveaux d’aluminium.

Puis l’ensemble du circuit est recouvert d’un oxyde de protection.

5.3 Procedes simplifies

La presentation qui a ete faite au paragraphe precedent montre que lafonction du circuit provient de son dessin. La forme des connexions de grille etdes zones dopees donne les transistors. La forme des connexions d’aluminiumet l’emplacement des contacts donnent leurs liaisons. La figure 7.18 indique ceque peut etre le masque du niveau d’aluminium d’un petit morceau de circuit(une centaine de transistors). La forme des connexions est, en fait, la fonction.

La conception, incluant notamment le dessin, et la fabrication des circuitsintegres digitaux sont des operations complexes et onereuses. On essaie dans

version en ligne - [PDF Document] (168)

160 De l’electron aux dispositifs logiques

Fig. 7.18 – Masque du niveau d’aluminium d’un petit morceau de circuit (une centainede transistors). On remarque une repetitivite du motif.

certains cas de les simplifier. Les diverses simplifications peuvent porter soit surla fabrication proprement dite, soit sur le dessin du circuit. La simplificationvise a apporter un gain soit dans la surface du circuit, soit dans sa vitessede fonctionnement, soit dans la difficulte de conception, soit dans sa facilite arealiser plusieurs fonctions. La surface est souvent un parametre critique : plusle circuit est grand, plus il risque d’y avoir des defauts de fabrication, doncplus le rendement de fabrication est faible.

Des methodes visant a simplifier la conception ou la fabrication sont ex-posees ci-apres.

5.3.1 Simplification par la fabrication

Une des simplifications possibles est de ne pas fabriquer totalement le cir-cuit pour une application donnee. En sortant de l’etape de fabrication, le circuitn’a pas encore de fonction. Cette fonction sera donnee par une etape de person-nalisation finale du circuit. Cette personnalisation est plus ou moins definitive.Elle recoit parfois le nom, plus ou moins impropre, de programmation.

Il y a quatre cas :

1. Aucune personnalisation, le circuit sort de la fabrication bon a l’emploi(memoires vives, processeurs, . . .).

2. Personnalisation par modification definitive : une etape de modifica-tion est appliquee au circuit. Certaines connexions sont etablies, ousupprimees, pendant cette modification. Cette programmation se faitdefinitivement, par exemple en faisant claquer des fusibles (Program-mable Logic Array, Programmable Logic Device). Cette programmationest en general faite par le client, chez lui. Une autre facon de faire assezsemblable est de realiser la personnalisation du circuit par un ensemble

version en ligne - [PDF Document] (169)

5. Fabrication des dispositifs 161

de contacts et de connexions d’aluminium realises au moyen de masquesspecifiques de l’application alors que les autres etapes ont ete les memespour des circuits de fonctionnalite differente (Gate arrays, sea of gates).Le fabricant realise ainsi des ensembles de portes, non interconnectees,identiques pour differents clients. Chaque client donne au fabricant unschema qui lui est propre pour le masque des contacts et celui de l’alu-minium. Cette programmation, de mise en oeuvre lourde puisqu’il fautrealiser les dernieres etapes, est faite chez le fabricant.

3. Personnalisation difficilement modifiable : certaines connexions sontetablies, ou certaines informations sont stockees en memoire, mais leureffacage et remplacement est difficile (passage sous ultra violets, effacagesous haute tension, etc.).

4. Personnalisation et effacement simple : une configuration est introduitedans le circuit a la facon dont un programme est introduit en memoire.La modification est tres simple (Field Programmable Gate Array). Lesvaleurs introduites pilotent des transistors utilises en commutateur etetablissent ou non des connexions. Ces circuits contiennent parfois aussides petites memoires vives de 16 mots de 1 bit permettant de tabulercertaines fonctions booleennes de 4 variables. Ces deux dernieres person-nalisations sont faites chez le client.

La forme de personnalisation chez le client est toujours plus ou moins lameme : Le circuit est mis sur une boıte speciale, branchee comme un simpleperipherique d’un ordinateur individuel. Un logiciel, en general specifique dutype de circuit, etablit a partir d’une description textuelle ou graphique de lafonction du circuit, la configuration qu’il faut introduire dans le circuit. Laconfiguration est introduite dans le circuit sous conduite du logiciel. Dans lecas des FPGA, la configuration est stockee dans le circuit lui-meme en memoirevive.

5.3.2 Cas particulier des memoires mortes

On trouve sous le nom de memoire morte plusieurs cas de figures :

1. Memoires ou l’information stockee a ete introduite par les masques derealisation du circuit. La memoire se comporte comme une tabulationmaterielle de la fonction.

2. Memoires ou l’information est chargee apres fabrication, de facon in-alterable (claquage de fusibles, par exemple).

3. des memoires flash, vives, mais ou le maintien d’information est assurememe en cas de coupure de l’alimentation electrique.

4. Memoire morte effacable plus ou moins souvent, plus ou moins com-modement. Il existe des memoires ou l’on peut changer le contenu seule-ment un million de fois. C’est beaucoup pour une information definitive,mais c’est trop peu pour une memoire vive.

version en ligne - [PDF Document] (170)

162 De l’electron aux dispositifs logiques

5. Fausses memoires mortes constituees en fait d’un boıtier integrant unememoire vive a faible consommation et une micropile.

5.3.3 Simplification par le dessin

On cherche dans de telles methodes a avoir un dessin du circuit presentantune grande regularite.

Les simplifications du dessin des circuits consistent a reprendre des par-ties communes, a reutiliser certains blocs de dessins. Une facon simple est dedessiner a l’identique des tranches de circuits. Dans un microprocesseur 32bits, il semble naturel que la partie physique qui traite le bit numero 5 soitpresque identique a celle qui traite le bit 23. On trouve regulierement dans lapresse des photos de processeurs. Sur les photos d’assez grande taille, on peutreconnaıtre de telles tranches. On a alors envie de dessiner tres soigneusem*ntla tranche pour qu’elle soit le plus petite possible et le plus emboıtable possiblesur elle-meme. Dessiner une tranche de microprocesseur est un probleme quiressemble un peu a dessiner un motif de papier peint avec raccord !

Une autre approche est de remarquer que les portes logiques constituantle circuit sont toutes plus ou moins identiques. On a alors comme grain derepetitivite non plus la tranche correspondant a une fonction, mais la simpleporte logique. Toutes les portes de meme type sont alors dessinees de faconidentique. Il y a un patron pour les NAND a 2 entrees, un pour les NANDa 3 entrees, . . .Toute fonction complexe utilisant une NAND2 utilise le memedessin de NAND2. Seules les connexions entre ces portes sont topologiquementdifferentes d’une fonction a l’autre. C’est le cas, par exemple, figure 7.18 ou lameme bascule est dessinee 4 fois.

6. Exercices

La ”logique” voudrait qu’en permutant les positions des transistors N etP dans l’inverseur et la porte NOR, on obtienne respectivement la fonctionidentique (S=E) et une porte OR. Les transistors a canal N auront alors leurdrain connecte a l’alimentation et leur source connectee a la sortie. En pratiquele fonctionnement de ce type de porte n’est pas satisfaisant.

Pourquoi ?Il faut raisonner de facon plus approfondie que 1 ou 0 logique et considerer

les tensions V alimentation - V gsth. Considerons le cas ou l’entree et la sortiede la porte sont au 1 logique. La tension de sortie devrait etre egale a la tensiond’alimentation. Sachant qu’une difference de potentiel minimale grille-sourceV gsth est indispensable a la formation du canal et la tension de grille atteintau mieux la tension d’alimentation, la tension de sortie ne pourra depasserV alimentation - V gsth. Le meme raisonnement applique aux transistors acanal P et au 0 logique montre que la sortie ne peut descendre en dessousde V gsth. En resume, les transistors MOS a canal N (respectivement P) ne

version en ligne - [PDF Document] (171)

6. Exercices 163

transmettent bien que les 0 (respectivement 1) logiques. Le cumul des penalitesV gsth rend ce montage inutilisable pour la construction de circuits a plusieursetages de portes.

Pour realiser une porte OR ou AND, on utilisera une porte NOR ou NANDsuivie d’un inverseur.

version en ligne - [PDF Document] (172)

164 De l’electron aux dispositifs logiques

version en ligne - [PDF Document] (173)

Chapitre 8

Circuits combinatoires

Un circuit combinatoire est un dispositif materiel dont le comporte-ment peut etre decrit par une fonction booleenne generale, et toute fonctionbooleenne peut etre realisee par un circuit combinatoire. Un circuit combina-toire peut realiser tout traitement si l’entree et la sortie sont des informationscodees par des vecteurs de booleens. Un circuit combinatoire convertit uneinformation d’un code dans un autre, realise une fonction arithmetique sur desnombres codes en binaire, etc.

Les entrees sont une nappe de fils. Une entree, a un instant donne, est a uncertain niveau logique Vrai ou Faux, c’est-a-dire a un niveau electrique. Ce ni-veau est susceptible de changer au cours du temps. Si une entree est constante,la faire intervenir dans le calcul d’une fonction n’est pas une necessite. Les sor-ties sont une nappe de fils. Elles sont aussi susceptibles d’evoluer au cours dutemps. Il n’est pas necessaire de realiser un circuit combinatoire pour calculerune sortie constante.

Puisque nous nous limitons dans ce livre aux dispositifs electroniques, lescircuits combinatoires sont alimentes en courant electrique mais l’alimentationet la masse ne sont pas considerees comme des entrees des circuits combina-toires.

Un circuit combinatoire est constitue d’un ensemble de portes logiques. Cer-taines ont ete presentees au chapitre 7. Les entrees du circuit sont connecteesa des entrees de portes. Les sorties du circuit combinatoire proviennent desorties de portes. A l’interieur du circuit il peut y avoir plusieurs circuits com-binatoires ou portes successifs, les sorties des uns etant reliees aux entrees desautres.

Un circuit combinatoire est un etre physique. Il occupe une certaine surface,consomme une certaine puissance electrique, puissance qui est dissipee sousforme thermique, il n’etablit les valeurs correctes de ses sorties qu’un certaindelai apres le changement de ses entrees. Les concepteurs de circuits cherchentgeneralement a obtenir un circuit ayant la plus petite surface possible, donnantles delais de reponse les plus brefs possibles et consommant/dissipant le moinsd’energie possible. Ces trois criteres participent au cout d’un circuit. Un autre

version en ligne - [PDF Document] (174)

166 Circuits combinatoires

s3

G

F

F s1

s2

s0

Circuit global :

4 entrées, 4 sortiese2

e3

e1

e0

G : 3 entrées, 2 sorties

sortiesentrées

F : 2 entrées , 1 sortie

Alimentation Masse

Fig. 8.1 – Un exemple de circuit combinatoire. Les carres F et G sont des portes ou descircuits combinatoires.

critere de cout est la regularite du circuit, c’est-a-dire, indirectement, le tempsnecessaire a sa conception et a son dessin. Plus un circuit comporte de fois unbloc repete, moins il est difficile de le concevoir. Voir par exemple la figure 7.18du chapitre 7.

Dans ce chapitre nous donnons d’abord (paragraphe 1.) quelques elementsrelatifs au comportement temporel des circuits combinatoires avant dedefinir precisem*nt ces circuits. Cela permet de mieux situer la differenceentre les circuits combinatoires et une autre classe de circuits qui faitl’objet du chapitre 10. Nous etudions ensuite (paragraphe 2.) en quoiconsiste la conception de circuits combinatoires a partir de blocs phy-siques de base. Dans le paragraphe 3. nous insistons sur la ressemblanceentre cette conception et la conception des algorithmes. Le paragraphe 4.presente une etude de cas. Certains des exemples retenus dans ce chapitresont utiles dans plusieurs chapitres ulterieurs du livre.

1. Notion de circuit combinatoire

1.1 Comportement temporel d’un circuit combinatoire

L’origine du delai de reponse d’une porte (charge ou decharge de capacite)a ete presente au chapitre 7. Il est naturellement strictement positif. A l’heureou nous ecrivons ce livre, il est couramment de l’ordre d’un dizieme de nano-seconde, soit 10−10 s. Ce delai n’est pas constant, n’est pas une propriete de laporte elle-meme. Il varie avec la valeur de la capacite a charger, la temperaturede fonctionnement, etc. Les constructeurs donnent les valeurs maximales et mi-nimales du delai de reponse des composants. Le delai de reponse d’un circuitcombinatoire provient de l’accumulation des delais des differentes portes et in-terconnexions entre les entrees et les sorties. Par approximation, on consideresouvent que les delais de portes cascadees s’ajoutent. Des valeurs transitoirespeuvent apparaıtre. Mais au bout d’un certain temps les sorties sont stabi-

version en ligne - [PDF Document] (175)

1. Notion de circuit combinatoire 167

s0 (avec délais)

s0 idéal (sans délais)

s0 observé

e1

e0

0 Volt5 Volts

1 logique0 logique

Indetermine

0 logique1 logique

Fig. 8.2 – Comportement possible du circuit combinatoire donne en exemple

lisees. Dans un circuit combinatoire, une sortie ne peut se mettre a oscillerindefiniment. Un circuit electronique fabricant un tel signal oscillant est tresutile mais n’est pas un circuit combinatoire. Par exemple le circuit presentefigure 8.1 peut donner le comportement decrit par la figure 8.2. Nous y distin-guons des entrees ideales (par definition booleennes), des sorties telles qu’ellespourraient etre observees (entre 0 et 5 Volts) et des sorties ideales (booleennesaussi). On trouve souvent une representation avec des sorties indetermineespendant le delai de reponse. Nous la faisons figurer aussi. C’est evidemment lasituation la plus realiste, mais elle n’est pas booleenne.

1.2 Caracterisation des circuits combinatoires

1.2.1 Caracterisation par le comportement

Un circuit combinatoire realise une fonction. Cela veut dire qu’une certaineconfiguration des entrees donne toujours la meme configuration des sorties.Examinons ce que signifie ce toujours. Si plusieurs configurations d’entreessont appliquees successivement aux entrees du circuit combinatoire, on observe,apres stabilisation, certaines configurations de sorties.

Un circuit est combinatoire si :

Pour tout couple (C1,C2) de configurations d’entrees, le circuit recevantla sequence temporelle C1, C2, C1 en entree donne, apres eventuellestabilisation des valeurs, une sequence de sortie S1, S2, S1.

La configuration C1 donne toujours S1.A l’inverse, si pour un circuit on peut trouver un couple de configurations

d’entrees (C3, C4) tel que la sequence temporelle d’entree C3, C4, C3 donneune sequence de sortie S3, S4, S5, avec S3 6= S5, le circuit n’est pas combina-toire.

version en ligne - [PDF Document] (176)

168 Circuits combinatoires

Intuitivement le circuit non combinatoire se souvient qu’il est passe par laconfiguration S4, cela change ses resultats ulterieurs. Le circuit combinatoirene se souvient de rien. Les circuits combinatoires n’ont aucune fonction dememorisation. On verra des circuits ayant une memorisation dans des chapitresulterieurs.

Il convient de preciser que si les configurations d’entree C1 et C2 differentde plusieurs bits, on suppose les changements de valeurs simultanes (commeles entrees e1 e0 de la figure 8.2).

Le circuit combinatoire realise une fonction au sens mathematique duterme : chaque appel avec des valeurs identiques des parametres delivre lameme valeur. A l’inverse, la fonction random des calculettes n’est pas unefonction puisque differents appels ne donnent pas le meme resultat.

1.2.2 Caracterisation par la structure

Considerons un assemblage de portes interconnectees comme un graphe.Les portes sont les noeuds, les connexions les arcs. Une orientation evidentedes arcs est fournie par le sens sortie d’une porte vers l’entree d’une autre. Sile graphe ainsi obtenu est sans cycle, le circuit est combinatoire.

Remarque : Attention, la reciproque est fausse ! L’exercice E8.17 donneun circuit combinatoire comportant un cycle. Il est hors du sujet de ce livrede caracteriser l’ensemble des circuits combinatoires avec un cycle.

1.3 Le principe de realisation

Les objets de base utilises dans les circuits combinatoires sont les porteslogiques. Une technologie de realisation etant choisie, il n’est pas necessaire degarder la representation en transistors des portes NOR ou NAND comme dansle chapitre 7. L’usage a consacre des symboles pour les portes. Les connexionsentre ces portes sont representees par des traits. Ces symboles sont representesfigure 8.3.

On trouve souvent des portes NAND et NOR sans le petit rond utiliseespour representer des fonctions ET et OU.

1.3.1 Les circuits existants : inverseurs, portes NAND et NOR

Les inverseurs, les NAND et les NOR sont les portes elementaires. L’inver-seur est un NAND (ou un NOR) a une seule entree. Pour des raisons electriques(trop grande resistance obtenue en mettant beaucoup de transistors en serie,par exemple) le nombre d’entrees des portes est parfois limite. Ainsi pour larealisation de carte imprimee a base de boıtiers de la famille technologiqueTTL (Transistor Transistor Logic) on peut disposer de portes NAND a 2, 3, 4,8 ou 13 entrees. Pour realiser une fonction NAND portant sur 6 variables, toutva bien puisque NAND(a, b, c, d, e, f) = NAND(a, b, c, d, e, f, f, f) et la porte

version en ligne - [PDF Document] (177)

1. Notion de circuit combinatoire 169

ab

c

ce

e1s

e2

e1s

e1

e2e3

s s s sa

b

de

1 2 3 4 5 6

Fig. 8.3 – Representation conventionnelle des portes logiques :porte 1 : l’inverseur : s = not(e) ;porte 2 : le NAND : s = nand(e1,e2,e3) ;porte 3 : le NOR : s = nor(e1,e2) ;porte 4 : le XOR : s = xor(e1,e2) ;porte 5 : le ANDNOR : s = nor( and(a,b), and(c,d,e)) ;porte 6 : le ORNAND : s = nand ( or(a,b), c).

NAND a 8 entrees fait l’affaire. Mais pour une fonction a plus de 13 entreesc’est moins simple.

L’exercice E8.15 donne une idee de solution a ce probleme. Dans d’autrestechnologies les portes NOR ne peuvent avoir que 2 ou 3 entrees et les portesNAND que 2, 3 ou 4. Dans certains cas, plusieurs technologies peuvent interve-nir dans un meme equipement materiel comportant plusieurs puces. Une pucepeut ne contenir que des portes a au plus 4 entrees alors que la puce voisine ades portes a 20 ou 2000 entrees.

1.3.2 Assemblage systematique

Toute fonction booleenne peut s’exprimer sous forme de somme de pro-duits de variables normales ou complementees. Cette expression en somme deproduits peut se traduire de facon systematique sous forme de combinaison dedeux etages de NAND de variables normales ou complementees. On rappelleque, par application directe des regles de De Morgan, si a, b, c, d, e, f sont desvariables booleennes :

a + b.c + d.e.f = a.(b.c).(d.e.f)ou, en utilisant une notation prefixee pour le NAND,

a + b.c + d.e.f = nand(not(a), nand(b, c), nand(e, f, g))De meme, pour une expression en produit de sommes,

a.(b + c).(d + e + f) = a + (b + c) + (d + e + f)ou, en utilisant une notation prefixee pour le NOR,

a.(b + c).(d + e + f) = nor(not(a), nor(b, c), nor(e, f, g))On realise un circuit dont le comportement est decrit par une fonctionbooleenne par un tel assemblage de portes NAND ou NOR et d’inverseurs(Cf. Figure 8.4). Cela donne des schemas logiques de circuits combinatoiresdans lesquels il n’y a que deux ou trois etages de portes entre l’entree et lasortie : un etage d’inverseurs pour certaines entrees, puis deux etages, soit de

version en ligne - [PDF Document] (178)

170 Circuits combinatoires

e f ga b dc

Fig. 8.4 – Exemple de realisation de fonctions a base de portes NAND.g = a.b.c.d + b.c.df = b.c.de = a.b.c.d + c.d

NAND soit de NOR. Ces circuits sont optimaux en terme de nombre d’etages.

Exemple E8.1 : Realisation en NAND de la fonction majoriteReprenons la table de verite de l’addition de deux naturels (Cf. Para-graphe 2.2.2, chapitre 3) en nous limitant a la fonction majorite :

a b re rs a b re rs

maj(a, b, re) maj(a, b, re)0 0 0 0 1 0 0 00 0 1 0 1 0 1 10 1 0 0 1 1 0 10 1 1 1 1 1 1 1

On obtient l’expression optimisee :

rs = a.b + a.re + b.re

ou rs = nand(nand(a, b), (nand(a, re), nand(b, re))

Le schema en portes NAND du circuit combinatoire realisant la fonctionmajorite est donne figure 8.5.

version en ligne - [PDF Document] (179)

1. Notion de circuit combinatoire 171

s

ab

s

ab

re re

Fig. 8.5 – Realisation de la fonction majorite en portes NAND. Sur le schema, deuxconventions usuelles sont presentees : avec l’une, les points noirs represententdes connexions entre un fil horizontal et un fil vertical ; avec l’autre, un troudans le fil vertical permet de mettre en evidence la non-connexion.

1.4 Conception de circuits combinatoires

Etant donnee une fonction booleenne generale, concevoir un circuit com-binatoire consiste a assembler des elements logiques de base, choisis parmiune liste donnee, comme les portes par exemple, pour que le comportementglobal de l’ensemble soit decrit par la fonction booleenne voulue. De plus cetassemblage doit etre d’un cout acceptable, voire minimal. Cette conception decircuits suppose deux niveaux de travail. Les noms de ces deux niveaux sontfluctuants mais nous choisissons ceux d’algorithmique cablee et de synthese lo-gique. On retrouvera cette distinction dans le chapitre 10. La conception peutse faire soit manuellement (rarement), soit, principalement, en utilisant desoutils de Conception Assistee par Ordinateur. Il existe donc des outils de CAOde synthese logique 1 ou d’algorithmique cablee. Il arrive aussi que les deuxoutils soient fusionnes en un seul.

1.4.1 Algorithmique cablee

Il arrive que l’expression de la fonction booleenne fasse appel a des ob-jets extra-booleens. En particulier la donnee d’une fonction arithmetique etdu codage binaire des nombres manipules constituent une description d’unefonction booleenne. Par exemple un multiplieur combinatoire de 2 nombresentiers codes sur 64 bits en complement a 2 est une description d’une fonctionbooleenne.

La conception conduit a une expression de la fonction globale comme unecomposition de sous-fonctions decrites en termes booleens et/ou arithmetiques.Cette decomposition n’est jamais unique et les aspects de cout doivent etre prisen consideration pour choisir la bonne solution. La possibilite de re-utiliser desresultats intermediaires doit etre retenue pour economiser des elements. Le

1 Pour la beaute de son nom signalons un outil qui construit les portes a partir de ladescription de la fonction booleenne : BuildGates !

version en ligne - [PDF Document] (180)

172 Circuits combinatoires

critere de regularite peut intervenir aussi comme critere de comparaison entredes solutions.

Cette recherche d’un assemblage d’elements donnant un comportement at-tendu est tres proche de l’algorithmique ou l’on cherche a assembler les ins-tructions pour obtenir un certain comportement.

Cet ensemble de techniques, que nous detaillons dans le paragraphe 3. sousle nom d’algorithmique cablee, est parfois nommee conception logique. Elleconduit a une description en terme de composition de fonctions booleennesde la fonction globale. Le terme algorithmique cablee peut sembler etrange. Ilindique simplement que la composition de fonctions exprimees dans les algo-rithmes de ces traitements est un banal cablage. Utiliser les resultats d’unefonction comme entrees d’une autre fonction, c’est connecter les sorties dusous-circuit realisant l’une aux entrees du sous-circuit realisant l’autre.

1.4.2 Synthese logique

On parle de synthese logique pour decrire l’assemblage de portes phy-siques choisies parmi une liste donnee, a partir de la description de la fonctionbooleenne.

Il ne faut pas perdre de vue que la notion d’elements logiques de base n’estpas absolue. Elle est relative a une liste donnee, une bibliotheque de circuits. Dela meme facon qu’en programmation, differents langages ou systemes peuventoffrir des primitives plus ou loins avancees.

Un circuit combinatoire realisant les fonctions majorite et ⊕ du chapitre3 est un additionneur 1 bit. Il comporte en general deux portes XOR commecelles de l’exercice E8.14. La fonction majorite est connue aussi (exemple E8.1),mais rien n’interdit de considerer un additionneur 1 bit comme bloc de base.Il est d’ailleurs inclus dans beaucoup de bibliotheques. D’autres bibliothequesproposent un circuit de calcul rapide des retenues.

L’utilisation des outils de CAO de synthese logique suppose la descriptionde la fonction booleenne et celle de l’ensemble d’elements de base selon un lan-gage formel traitable par un programme. La conception manuelle repose plutotsur l’utilisation d’un schema et d’un catalogue des composants disponibles.

Entre la representation de la fonction booleenne et celle de la struc-ture de connexions entre elements qui la realise, il peut exister plusieursrepresentations intermediaires. Il faut que l’equivalence soit preservee dansces differentes formes. Des techniques de synthese logique peuvent s’appliquerplutot sur la forme algebrique (remplacement d’une formule booleenne parune autre formule booleenne) ou plutot au resultat physique (remplacementd’un element de circuit par un autre, plus petit ou moins consommateur, parexemple).

Dans la suite nous presentons d’abord les cas simples, ou la distance estfaible entre l’expression algebrique et la realisation. Pour cela nous presentonsdes exemples d’elements logiques qui peuvent etre consideres comme de base

version en ligne - [PDF Document] (181)

2. Assemblage de blocs de base... 173

et nous montrons les expressions algebriques qui y collent le mieux. Il s’agitbien de synthese logique.

Nous etudions ensuite des circuits moins simples ou la distance peut etregrande entre l’expression de la fonction et la structure de la realisation. Il s’agitbien alors d’une veritable algorithmique cablee.

Nous privilegions les solutions systematiques mais nous montrerons parfoisquelques astuces.

2. Assemblage de blocs de base :

synthese logique

2.1 Decodeurs, encodeurs

2.1.1 Les circuits existants

Un circuit fabriquant en sortie les 2N monomes canoniques correspondanta ses N entrees est appele un decodeur. On en rencontre en particulier dansles memoires ou, a partir des N bits d’adresse, il faut emettre un des 2N

signaux de selection d’un mot. Ainsi pour le decodeur, a partir d’un nombrecode en binaire, on obtient un seul 1 parmi une nappe de fils. C’est le fil dontle numero est celui donne en entree. Generalement il y a un AND entre uneentree supplementaire de validation val et ce bit de sortie.

La fonction d’un encodeur est exactement symetrique. Si parmi une nappede fils on est certain qu’un seul est a 1 a un instant donne, l’encodeur donnele numero de ce fil. Si la garantie qu’un seul fil d’entree est a 1 ne peut etreetablie, le circuit est different. Il delivre alors le numero du premier fil a 1. Lanotion de premier suppose un ordre sur les fils ; c’est soit l’ordre des numeroscroissants, comme dans notre exemple, soit decroissants.

Les tables de verite de la figure 8.6 caracterisent le decodeur, l’encodeuravec garantie qu’une seule entree est a 1 (encodeur1), l’encodeur en general,sans cette garantie (encodeur2). Dans ce dernier on introduit une sortie a, vraiesi aucune entree n’est a 1.

On en deduit aisem*nt les expressions logiques et les schemas correspon-dants. Par exemple, dans le decodeur : s0 = e1.e0. val, dans l’encodeur1 :s1 = e3 + e2.

2.1.2 Synthese systematique

L’exemple E8.8, paragraphe 3.3, montre l’utilisation de decodeurs. On enretrouvera dans le livre comme decodeurs d’adresse (Cf. Chapitres 9 et 15).

version en ligne - [PDF Document] (182)

174 Circuits combinatoires

Decodeur Encodeur1 Encodeur2

Entrees Sorties Entrees Sorties Entrees Sortiesval e1 e0 s3 s2 s1 s0 e3 e2 e1 e0 s1 s0 e3 e2 e1 e0 s1 s0 a

1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 Φ Φ 11 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 01 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 x 0 1 01 1 1 1 0 0 0 1 0 0 0 1 1 0 1 xx 1 0 00 x x 0 0 0 0 1 xxx 1 1 0

Fig. 8.6 – Tables de verite des encodeurs et decodeurs. Les x et les Φ indiquent unevaleur non pertinente respectivement en entree ou en sortie.

2.2 Programmable Logic Array

2.2.1 Les circuits existants

On trouve dans le commerce des circuits nommes PLA ou PLD (Program-mable Logic Arrays ou Programmable Logic Devices). L’utilisateur peut faci-lement personnaliser ces circuits pour y realiser des produits ou des sommesde produits. Dans ces circuits les nombres d’entrees, sorties et, s’il y a lieu,monomes, sont fixes. Par exemple un PLA donne a 12 entrees, 20 monomes et8 sorties.

L’utilisateur claque des fusibles pour fixer : 1) quelle entree (normale oucomplementee) fait partie de quel monome ; c’est la partie AND du PLA. 2) quelmonome fait partie de quelle sortie ; c’est la partie OR du PLA.

Le claquage (la ”programmation”) se fait dans un petit dispositifelectronique, connectable a un ordinateur personnel, et facilement comman-dable par un logiciel qui a recu les equations logiques en entree.

Des organisations proches des PLA peuvent etre realisees a base de portesdans les circuits non pre-existants.

2.2.2 Synthese systematique

L’utilisateur cherche souvent a minimiser le nombre de monomes de lafonction ou des fonctions a realiser. Soit parce que le nombre total de monomesest contraint par la technologie, soit pour economiser de la surface dans lecircuit. Nous allons etudier un exemple de fonction realisee sur un tel reseauprogrammable PLA permettant de faire des sommes de produits.

Dans un cas on a procede a une minimisation de chacune des fonctions,independamment des autres, par des tableaux de Karnaugh. Dans l’autre cas,on a cherche une minimisation globale grace a un outil de CAO.

Exemple E8.2 : Controle d’un afficheur 7 segmentsL’exemple retenu est tres classique. Nous l’avons deja rencontre dans le cha-pitre 2. Un circuit combinatoire recoit 4 entrees x3, x2, x1, x0 codant un naturel

version en ligne - [PDF Document] (183)

2. Assemblage de blocs de base... 175

x0

x1

x2

x3

fg

e

bc

a

d

a

g

de c

bf

Fig. 8.7 – Affichage des nombres de 0 a 15 sur 7 segments

x3 x2 x1 x0

x3 x2 x1 x0

a b c d e f g

b c d e f ga

Fig. 8.8 – Description symbolique des PLA realisant le codage pour un afficheur 7 seg-ments. A gauche minimisation de chacune des fonctions, independamment lesunes des autres, a droite, minimisation globale.

version en ligne - [PDF Document] (184)

176 Circuits combinatoires

entre 0 et 15. Il delivre 7 sorties activant 7 segments d’un afficheur. Les 7 seg-ments se nomment a, b, c, d, e, f et g. Ils sont disposes comme sur la figure 8.7.Les chiffres hexadecimaux sont affiches comme indique. La fonction du circuitest de transcoder entre le code binaire des nombres et le code en segmentsallumes et segments eteints.

On cherche a exprimer chacune des 7 fonctions booleennes a, . . ., g enfonction de x3, x2, x1, x0. Par exemple,

a = x3.x1 + x2.x1 + x2.x0 + x3.x0 + x3.x2.x0 + x3.x2.x1

Pour la solution globale on obtient 28 monomes differents. La partie gauche dela figure 8.8 donne les differentes fonctions. Chaque ligne figure un monome.Pour chaque monome, on represente par un point noir : quelles entrees ilprend en compte (partie AND du PLA) ; dans quelles sorties il figure (partieOR du PLA). Ainsi la troisieme ligne represente le monome x2.x0. Il est utilisepar les fonctions a, b et e.

2.2.3 Minimisation locale, minimisation globale

Dans les realisations a base de monomes, en portes ou en PLA, le concepteurcherche a minimiser le nombre total de monomes. La surface du PLA est eneffet proportionnelle a ce nombre. Si cette recherche est faite independammentpour chacune des fonctions individuelles, il se peut que le resultat global soitmoins bon que pour une minimisation globale. Les outils modernes de Concep-tion Assistee par Ordinateur comportent de tels programmes de minimisationglobale. Pour la solution du transcodeur de 7 segments, avec une telle mini-misation globale, un outil developpe par l’un des auteurs obtient 14 monomesdifferents. La partie droite de la figure 8.8 donne les differentes fonctions.

2.3 Memoires mortes : une table de verite cablee

2.3.1 Les circuits existants

Une memoire morte de 256 mots de 16 bits realise 16 fonctions combi-natoires de 8 variables. En effet a partir d’une configuration des 8 entrees,habituellement interpretee comme une adresse, la memoire morte delivre 16bits. Une telle realisation de fonction a base de ROM est parfois utilisee. Elleest optimale du point de vue du temps de conception. C’est une tres bonne so-lution de paresseux ! La table de verite suffit a decrire la realisation. On peutaussi considerer cette solution comme un PLA avec tous les monomes cano-niques. On trouve souvent dans les circuits programmables (FPGA) des petitesROM, inscriptibles par l’utilisateur, par programmation. Ces memoires, qu’onne peut plus appeler mortes, recoivent le nom de Look-Up Tables (LUT).

version en ligne - [PDF Document] (185)

2. Assemblage de blocs de base... 177

c1

s

x3 x2 x1 x0

11 01 0010

c0

e1

c1 0

s

e0

c1

c0

x2x3 x1 x0

s

Fig. 8.9 – Representation symbolique des multiplexeurs 4 voies vers 1 et 2 voies vers 1.Structure interne du multiplexeur 4 voies vers 1.

2.3.2 Synthese systematique

Pour une fonction de 8 variables on forme les 256 monomes canoniques pourexprimer la fonction sous forme de somme de produits a partir de la table deverite, et on realise un circuit combinatoire en collant a cette expression.

2.4 Multiplexeurs

2.4.1 Les circuits existants

Un circuit combinatoire est d’usage frequent : le multiplexeur. Il realise laselection parmi 2N entrees de donnees. Celle des entrees selectionnee est celledont le numero est donne sur les N bits de commande. Le nombre d’entreesde commande du multiplexeur est le logarithme a base 2 du nombre de bits dedonnees.

Ainsi pour 2 bits de commande c1 et c0 et 4 bits de donnee x3, x2, x1, x0la sortie s est decrite par l’equation logique :

s = c1.c0.x3 + c1.c0.x2 + c1.c0.x1 + c1.c0.x0.

Si les bits c1 c0 codent l’entier k, la sortie est egale a l’entree x d’indice k. Larealisation interne s’en deduit aisem*nt. Elle constitue dans ce cas un multi-plexeur 4 voies vers 1. Le schema conventionnel des multiplexeurs 2 voies vers1 et 4 voies vers 1 sont donnes figure 8.9.

2.4.2 Synthese systematique

Les multiplexeurs sont tres pratiques pour synthetiser une fonction decritepar un graphe de decision binaire (BDD). Ils sont surtout une brique de base del’algorithmique cablee ou ils realisent la primitive de choix. Ainsi de nombreux

version en ligne - [PDF Document] (186)

178 Circuits combinatoires

outils de CAO partent d’une representation des fonctions booleennes en BDD,notamment si la brique de base des circuits combinatoires est le multiplexeur.

Remarque : Attention le multiplexeur est oriente. Ce n’est pas un ai-guillage 4 voies vers 1 tel qu’il pourrait etre realise avec 4 commutateurs (voirla figure 7.10 dans le chapitre 7).

Exemple E8.3 : Cascades de multiplexeursEn utilisant 5 multiplexeurs 4 voies vers 1, on peut realiser un multiplexeur16 voies vers 1. Pour cela on utilise un premier etage de 4 multiplexeurs enparallele recevant les memes 2 bits de commande, puis l’autre multiplexeurrecevant les deux derniers bits de commande. Le lecteur est convie a examinerdifferentes possibilites de choix d’affectation des bits de commandes soit aupremier etage de 4 multiplexeurs en parallele soit au deuxieme.

2.5 Portes complexes

2.5.1 Les circuits existants

Dans certains types de realisations des portes un peu complexes sont uti-lisees ; par exemple les portes ORNAND et ANDNOR presentees figure 8.3.

2.5.2 Synthese systematique

Le principal probleme lie a l’utilisation de telles portes est que des procedessystematiques de synthese ne sont pas toujours disponibles. On obtient faci-lement une expression en somme de produits, donc en NAND de NAND. Lesportes plus complexes correspondant par exemple a (abc + de + fg) ne peuventprovenir que d’outils de Conception Assistee par Ordinateur. Les methodes uti-lisees alors consistent a modifier les formes algebriques (ou autres comme lesBDDs) des fonctions booleennes pour retrouver ou calquer (on parle de map-ping en anglais) les motifs correspondant aux elements de base disponibles.

3. Algorithmique cablee : conception logique

La conception logique a pour but de composer des fonctions booleennes,eventuellement assez complexes, pour realiser une fonction booleenne plusgenerale. L’essentiel de la difficulte est la recherche de regularite.

3.1 La question de la regularite

Pour introduire la notion de regularite dans la conception, nous montronsici les resultats de deux methodes de conception sur un meme exemple.

version en ligne - [PDF Document] (187)

3. Algorithmique cablee : conception logique 179

Exemple E8.4 : Conversion binaire vers DCBIl s’agit d’une fonction booleenne a 9 entrees et 10 sorties. Sur la figure 8.10les bits d’entree et de sorties ne figurent que par leur numero. Le circuitconvertit l’ecriture binaire d’un naturel de l’intervalle [1, 366] (donc sur9 bits) vers son ecriture en Decimal Code en Binaire (donc sur 10 bits).Chaque chiffre de l’ecriture decimale est code en binaire, par exemple28510 = 1 0001 11012 = 10 1000 0101DCB.

1) Par l’etude de l’algorithme de conversion, nous connaissons unedecomposition de la fonction du circuit en fonctions elementaires. Il y a uneforte regularite dans la facon dont se combinent ces fonctions elementaires.Elle est liee a la regularite induite par l’algorithme de conversion. Cettedecomposition donne la structure de la solution 2 de la figure 8.10. Tous lesrectangles representent la meme fonction a 4 entrees et 4 sorties. Les deuxrectangles marques d’un point, blanc ou noir, ont une entree de moins ouune entree et une sortie de moins. Tous les blocs etant identiques et leurdisposition etant reguliere, le schema topologique du circuit serait simple.La fonction etant une fonction arithmetique, pour obtenir le meme circuitpour plus d’entrees et de sorties, il suffit d’etendre le schema. On denombre 6niveaux de blocs entre les entrees et les sorties.

2) Nous avons, avec l’aide des auteurs d’un logiciel de synthese logique,donne la table de verite complete de ce circuit a l’outil. Cela represente unpeu moins de 400 lignes de 10 bits. Elles peuvent etre obtenues par un pro-gramme. Ce logiciel a travaille en aveugle uniquement a partir de ces tables.Le logiciel cherchait a synthetiser a partir de fonctions a 3 ou 4 entrees. Il aessaye de minimiser le nombre total de blocs. Il a par ailleurs essaye de regrou-per des fonctions qui utilisaient les memes variables ou les memes resultatsintermediaires. Il a de plus cherche a minimiser le nombre de niveaux logiquestotal entre les entrees et les sorties. Le resultat est celui de la partie 1 dela figure 8.10. Par exemple le bloc represente en grise recoit les 4 entrees denumero 7, 5, 3 et 2 et delivre 3 sorties, chacune etant utilisee dans deux blocs.On denombre 4 niveaux de blocs entre les entrees et les sorties.

Dans tous les circuits ayant un grand nombre d’entrees, le concepteurcherche une regularite permettant de simplifier le travail. Il est a noter quecette regularite se retrouve souvent dans la topologie effective de la realisationdu circuit. La plupart des circuits realisant des fonctions arithmetiques, etd’autres, presentent de telles regularites. Nous allons les etudier. Cette partiesuppose connus les elements du chapitre 3 sur les representations des gran-deurs.Dans la suite nous montrons 3 methodes d’assemblage de sous-circuits.

– Dans la premiere, l’assemblage iteratif, ou lineaire, la connaissance de la so-

version en ligne - [PDF Document] (188)

180 Circuits combinatoires

132465 07868 468253678683457 4

9 8 7 6 5 4 3 1 02

012368

045 2 1368 79

7 45

Solution 2Solution 1

2357

Fig. 8.10 – Deux solutions pour la realisation d’une meme fonction

lution pour le circuit travaillant sur N−1 bits permet de concevoir le circuittravaillant sur N bits. Cette structure est proche de la boucle d’iteration.Le circuit global est obtenu en repetant N fois un circuit de base.

– Dans la deuxieme, l’assemblage recursif, ou arborescent, la connaissance dela solution pour le circuit travaillant sur N/2 bits permet de concevoir lecircuit travaillant sur N bits. Cette structure est proche de la structured’arbre binaire. Parfois les deux realisations de la fonction sur N/2 bitsdoivent etre completees pour permettre de realiser la fonction sur N bits.

– La troisieme methode, generale, regroupe des blocs selon des regles de com-position de fonctions quelconques.

Pour chacune de ces methodes d’assemblage nous donnons un ou quelquesexemples typiques. Un exemple simple, la fonction incrementation, permetensuite de comparer differentes methodes dans une etude de cas.

3.2 Assemblages lineaires

3.2.1 Schema en tranches, schema en blocs

Representer un circuit resultant d’un assemblage iteratif peut se faire dedeux facons representees figure 8.11. C’est un exemple sans signification. Uncircuit traite deux vecteurs de n bits a et b. Le traitement se compose de lamise en serie de 3 fonctions. Dans la premiere fonction, symbolisee par un carre,une entree externe X est prise en compte pour chaque bit. Dans la troisiemefonction, symbolisee par un ovale, une information passe de bit en bit, a lafacon d’une retenue.

On parle de representation en tranches quand on fait apparaıtre toutesles cellules qui participent a la fonction globale. L’exemple reel de l’UAL(Cf. Exemple E8.10) utilise cette technique.

version en ligne - [PDF Document] (189)

3. Algorithmique cablee : conception logique 181

Add

A B

SX

Schéma en blocs multiplexeur

additionneur

Schéma en tranches

b a

X

r

nn

Mux

A B

C

s0 1

r0rn−1

an−1 ai a0b0

Fig. 8.11 – Representation d’un circuit en tranches ou en blocs ; representation conven-tionnelle de l’additionneur et du multiplexeur N bits

On parle de representation en blocs quand on ne dessine que les fonctionssur N bits. On represente alors par un trait gras les bus, ou nappes de fils.L’exemple du circuit de calcul du quantieme (Cf. Exemple E8.9) utilise cetterepresentation.

3.2.2 Exemples : addition et soustraction de naturels

Exemple E8.5 : L’additionneur N bitsLa mise en cascade de N additionneurs 1 bit constitue un additionneur N bits.Il peut effectuer l’addition de deux naturels ou de deux relatifs codes sur Nbits. La somme de deux naturels codes en binaire pur sur N bits est sur N +1bits. Le schema du circuit est donne figure 3.3 (chapitre 3).

Exemple E8.6 : L’additionneur/soustracteur N bitsOn a vu au chapitre 3 que le calcul sur les vecteurs booleens donnant larepresentation de la somme ou de la difference, codee en binaire pur ou encomplement a 2, est le meme. Puisque le circuit peut effectuer l’addition oula soustraction, il dispose d’un bit de commande Add/Sub. Ce fil vaut 0 sil’operation voulue est une soustraction, 1 si c’est une addition.

Le calcul de la somme A+B se fait en ajoutant A, B et 0. Le calcul de ladifference A-B se fait en ajoutant A, le complementaire booleen de B et 1.

On se sert du fil Add/Sub pour selectionner l’operande Q a ajouter a A.Pour chaque bit, on a Qi = Add.Bi + Sub.Bi.

De meme, on fabrique le report entrant r0, pour ajouter 0 ou 1, selon

l’equation : r0 = (si Add/Sub alors 0 sinon 1) = Add/SubSi l’operation est une addition, la retenue sortante C est le report sortant.

Si l’operation est une soustraction, la retenue sortante C est le complementaire

version en ligne - [PDF Document] (190)

182 Circuits combinatoires

01 01 01 01

10

Add/Sub

VC

An−1 Bn−1 A0 B0

Sn−2 S1 S0Sn−1

Fig. 8.12 – Additionneur-soustracteur N bits. Chaque carre est un additionneur 1 bit.Tous les multiplexeurs sont commandes par le meme signal.

Arbre de OUEXCLUSIFs Arbre de ETs Arbres mixtes

Fig. 8.13 – Arbres binaires de portes

de ce report sortant. Le bit d’oVerflow V est le XOR des deux derniers reports.Le schema, en tranches, du circuit est donne figure 8.12.

3.3 Assemblages arborescents

Exemple E8.7 : Le XOR generaliseOn connaıt la porte XOR a 2 entrees. Cette fonction est la somme modulo 2si l’on interprete les deux entrees comme entiers plutot que comme booleens.Il est possible d’obtenir une somme modulo 2 de N entiers sur un bit (ou leXOR generalise de N booleens) en utilisant l’associativite de cette fonction. Cecalcul est utilise pour obtenir le bit de parite d’un mot qui vaut 1 si le mota un nombre impair de 1. Ce genre de technique peut s’appliquer pour touteoperation associative, par exemple le AND ou le OR. La figure 8.13 rappelleque des arbres de NAND et de NOR peuvent remplacer les AND ou les OR.Voir aussi l’exercice E8.15.

Exemple E8.8 : Le decodeur N bitsLe decodeur est presente paragraphe 2.1. Nous nous interessons ici a sarealisation interne. Nous supposerons que son nombre d’entrees N est unepuissance de 2. Il fabrique 2N sorties booleennes sur 2N fils a partir de N

version en ligne - [PDF Document] (191)

3. Algorithmique cablee : conception logique 183

D1

D2

e1

s”0

s′3

s′0

s10

s1

Decodeur 2 vers 4

e3

e0

e2

s”3

Fig. 8.14 – Decodeur a 4 entrees et 16 sorties, a partir de 2 decodeurs a 2 entrees et 4sorties et de 16 portes AND.

entrees. Une seule des sorties est a 1. Il est tres facile de decrire un tel circuitrecursivement :

– si N vaut 1, le circuit consiste en 1 seul inverseur. Les deux sorties sontl’entree et l’entree complementee.

– si N est superieur a 1, on dispose de deux decodeurs a N/2 entrees. Ilsont chacun 2N/2 sorties. En combinant 2 a 2 dans des portes AND a deuxentrees les sorties des 2 decodeurs, on obtient le decodeur souhaite.

Montrons le passage de 2 entrees a 4 par un exemple (Cf. Figure 8.14).Un decodeur D1 a 2 entrees e3 e2 delivre les 4 sorties s′3 s′2 s′1 s′0.Un decodeur D2 a 2 entrees e1 e0 delivre les 4 sorties s′′3 s′′2 s′′1 s′′0.Les equations des sorties du decodeur a 4 entrees sont, pour p compris entre 0et 15 :

sp = s′p div 4

AND s′′p modulo 4

c’est-a-dire :

s15 = s′3 AND s′′3 s14 = s′3 AND s′′2jusqu’a s1 = s′0 AND s′′1 s0 = s′0 AND s′′0

3.4 Assemblages generaux

L’expression d’une fonction booleenne tres complexe comme compositionde fonctions booleennes plus simples donne une organisation de circuits com-binatoires. Il suffit de coller la structure du circuit sur la structure de la com-binaison de fonctions. C’est le cas pour le circuit de calcul du quantieme dansl’annee presente en exemple.

Dans les cas ou une composition est connue, tout va bien. Si on ne sait pasexprimer la fonction booleenne complexe, il ne reste plus que la table de verite

version en ligne - [PDF Document] (192)

184 Circuits combinatoires

et sa traduction vers une somme de monomes. C’est le cas pour le calcul dunombre premier suivant presente aussi.

Il y a peu de regles dans l’obtention de l’assemblage. C’est une branche del’algorithmique, sans plus. Une propriete toutefois est a retenir : la selection,exprimee dans les algorithmes par des structures choix est realisee par desmultiplexeurs. Souvent ce choix commute avec d’autres operations et cettecommutation peut etre exploitee pour diminuer le cout d’un circuit. Cela sup-pose evidemment connus les couts des multiplexeurs et autres blocs. Ceci estillustre dans le circuit d’Unite Arithmetique et Logique.

Exemple E8.9 : Le calcul du quantieme dans l’anneeCet exemple a sa source dans [SFLM93]. Il a fait l’objet d’une vraie realisationpar un groupe d’etudiants de maıtrise d’informatique dans le cadre d’un projeteuropeen de developpement de l’enseignement de la microelectronique.

Un circuit recoit le code binaire d’une date. Cette date est composee d’unnumero de jour dans le mois, code sur 5 bits, d’un numero de mois, code sur4 bits. L’annee est limitee aux deux chiffres decimaux donnant l’annee dansle siecle2. Chacun de ces deux chiffres decimaux est code en binaire, selon uncode DCB.

Le circuit delivre le code binaire du quantieme de la date dans l’annee.Ainsi le 3 mars est le 62eme jour de l’annee les annees non bissextiles et le63eme les annees bissextiles.

Concevoir ce circuit suppose de connaıtre une methode de calcul. Ici onretient la suivante qui repose sur des fonctions tres specifiques de cette appli-cation :

– Un premier circuit bis delivre 1 si l’annee est bissextile, 0 sinon. Il s’agit dereconnaıtre un multiple de 4, a partir du code DCB.

– Un deuxieme circuit > 2 delivre 1 si le numero de mois est superieur a 2.

– Un circuit Deb donne sur 9 bits le code binaire du quantieme du premierjour du mois les annees non bissextiles, a partir du code du mois. On faitaisem*nt les 9 tables de verite correspondant a cette fonction : 1→1 ; 2→32 ;3→60,. . .,12→334.

– Un additionneur ajoute le numero du jour, le numero du premier du moiset 1 si l’annee est bissextile et si le numero de mois est superieur a 2.

On remarque que plusieurs fonctions sont Φ-booleennes car des codes binairesd’entrees ne representent pas des valeurs du domaine.

Exemple E8.10 : L’unite arithmetique et logiqueL’unite arithmetique et logique que nous etudions recoit deux nappes de fils Aet B. Elle delivre une nappe F.

2Encore un systeme informatique avec le bogue de l’an 2000 !

version en ligne - [PDF Document] (193)

3. Algorithmique cablee : conception logique 185

4

8

9

Déb>2 bis

9

année

mois

jour

5

Fig. 8.15 – Circuit de calcul du quantieme dans l’annee

Operation Operation retenue entree di entree ei sortie fi

souhaitee realisee entrante

A + B A + B + 0 0 ai bi si

A - B A + B + 1 1 ai bi si

B div 2 B div 2 + 0 + 0 0 bi+1 0 si

A AND B A AND B – ai bi xi

Fig. 8.16 – Operations de l’UAL

Operation mux 1 mux 2 mux 3 mux 4

A + B bi ci ai si

A - B bi ci ai si

B div 2 – 0 bi+1 si

A AND B bi ci ai xi

Fig. 8.17 – Commandes des multiplexeurs

Les nappes peuvent etre interpretees comme des entiers ou des vecteurs debits. L’UAL calcule, selon 2 bits de commande com1 com0, la somme de Aet B, la difference de A et B, le quotient de B par 2 ou, sans l’interpretationentiere, le AND (bit a bit) des nappes A et B.

L’UAL comporte un additionneur. En aiguillant les bonnes valeurs sur lesentrees ei, di et la retenue entrante de l’additionneur, on obtient les 3 resultatsarithmetiques en sortie si de l’additionneur (Cf. Figure 8.16). En utilisantla sous-fonction AND presente dans la fonction majorite de chaque tranched’additionneur, on obtient la valeur xi = ei AND di. Un dernier multiplexeurpermet d’obtenir fi egal soit a xi soit a si.

Les selections des multiplexeurs 1, 2, 3 et 4 de la figure 8.18 peuvent etreobtenues aisem*nt (Cf. Figure 8.17). Il reste a exprimer les commandes dechaque multiplexeur en fonction de com1 com0.

version en ligne - [PDF Document] (194)

186 Circuits combinatoires

Add

3

4

Add

1

2

3

4

Add

1

2

3

4

Add

1

2

3

4

ai bi

ri+1 ri

xi si

fi

bi+1

ci

di ei

Fig. 8.18 – UAL. Les tranches representees sont la tranche de plus fort poids, une tranchede rang intermediaire et la tranche de poids faible. Le remplacement decertains multiplexeurs par des portes est fait dans la partie droite.

Exemple E8.11 : Le calcul du nombre premier suivantCeci est un exemple d’ecole. Un circuit recoit le code binaire d’un naturel Acode sur N bits. Il delivre le code binaire du nombre premier immediatementsuperieur a A si A est premier, 0 sinon.

On ne connaıt pas d’algorithme general donnant ce resultat. Pour realiserle circuit il ne reste qu’une solution : pre-calculer la fonction sous forme detable, la coder en binaire sous forme de table de verite et realiser le circuitd’apres les expressions booleennes.

Cela ne pose pas de probleme pour les petites valeurs de N.

4. Etude de cas

Certains circuits peuvent donner lieu a differentes organisations car l’ana-lyse de leur decomposition n’est pas unique. Nous montrons ici un exempled’un tel circuit. Un exemple analogue est propose en exercice E8.18.

Exemple E8.12 : IncrementeurUn incrementeur est un circuit combinatoire qui incremente le naturel presenten entree. Les entrees sont une nappe de N fils xN−1, xN−2, . . . , x1, x0. Cesbits codent en binaire un naturel X. Les sorties sont une nappe de N + 1 filsyN , yN−1, yN−2, . . . , y1, y0. Ces bits codent en binaire un naturel Y . Le circuit

version en ligne - [PDF Document] (195)

4. Etude de cas 187

etudie doit etre tel que Y = X + 1.Introduisons les produits intermediaires Pi definis par : P−1 = 1, P0 = x0,

P1 = x1.x0, P2 = x2.x1.x0, et generalement Pj =∏i=j

i=0 xi.On obtient, pour tout k dans l’intervalle [0, N ], yk = xk ⊕ Pk−1 ou, ce qui

est equivalent, yk = xk ⊕ Pk−1.La realisation de l’incrementeur suppose donc la realisation des produits

partiels Pi. Si N est petit (3 ou 4), il est facile de former les Pi par des portesNAND par synthese systematique. Plus generalement, examinons differentessolutions dans la fabrication des Pi avec des NAND et NOR. Les criteres prisen compte sont le nombre total de portes, le nombre de niveaux logiques entreentrees et sorties et le nombre de portes (ou blocs) differentes a dessiner pourpouvoir les assembler et obtenir le dessin global du circuit.

1) Utilisation de portes AND a 2, 3, . . . , N − 1 entrees (partie 1 de lafigure 8.19) Le nombre de portes est de l’ordre de N . Le nombre de niveaux estoptimal, il est de 1. La regularite est tres mauvaise, chaque porte est differentedes autres. Une solution consiste a dessiner une porte a N entrees et a n’enutiliser qu’une partie, mais ce n’est pas tres economique. Les portes AND sontrealisees par des NAND suivies d’inverseurs. Pour N grand cette technique nefonctionne que si l’on dispose de portes a nombre d’entrees quelconque. Cen’est en general pas le cas.

2) Utilisation de portes AND a 2 entrees (partie 2 de la figure 8.19) Com-plexite : de l’ordre de 2N portes, de l’ordre de 2N niveaux de portes. Une seulecellule physique a dessiner (encadree), est repetee N fois. Malheureusem*nt laporte AND n’est pas une primitive physique en general ; elle est realisee par unNAND suivi d’un inverseur. Cela conduit a chercher une autre solution.

3) Utilisation de portes AND a 2 entrees, alternativement realisees par unNAND ou un NOR (partie 3 de la figure 8.19) Cette solution repose sur lesegalites suivantes :

u⊕ (v.w) = u ⊕ NAND (v, w)t⊕ (u.v.w) = t ⊕ NOR (u, NAND (v, w))

Complexite : de l’ordre de 2N portes, de l’ordre de N niveaux de portes.Une seule cellule physique a dessiner (encadree). Elle comporte deux etages.Elle est repetee N/2 fois.

4) Decomposition recursive des produits partiels, a base de AND a 2 entrees(partie 4 de la figure 8.19) Voyons comment on passe du circuit a 8 entrees aucircuit a 16 entrees. Supposons connu le circuit qui fabrique les Pi pour i allantde 0 a 7 a partir des x7, . . . , x0. Dupliquons ce circuit et connectons-le auxentrees x15, . . . , x8. On obtient des produits partiels P ′

i . P ′8 = x8, P ′

9 = x9.x8,jusqu’a P ′

15 = x15. . . . .x9.x8. Il suffit d’un ensemble de portes AND a 2 entreespour obtenir les Pi car, pour i de 8 a 15 : Pi = P ′

i .P7

Le nombre de portes est de l’ordre de 2 × N × log2N portes, le nombrede niveaux est de log2N . Chaque bloc est redessine deux fois (encadre). Dans

version en ligne - [PDF Document] (196)

188 Circuits combinatoires

12

34

x0

P1P2 P0

P0P1

P0P1

P3

P7

Fig. 8.19 – Differentes solutions pour la realisation de l’incrementeur. Les portes XORne sont pas dessinees dans la solution 4

chaque bloc, il faut dessiner le dernier etage de portes realisant les AND avecle dernier produit de l’etage precedent.

Dans cette solution aussi il conviendrait de remplacer les cascades de ANDpar des cascades de NAND et de NOR, alternativement. La mise au point decette solution est un excellent exercice.

5. Exercices

E8.13 : De toutes les couleursReprendre les codes des couleurs dans le debut du chapitre 3. Pour les couleurscodees dans les deux codes, concevoir le circuit combinatoire qui transcode dansun sens, dans l’autre.

E8.14 : Realisation du XORAvec une porte s = (ab + c) et un NOR a 2 entrees, realiser la fonction XOR.En se servant des schemas en transistor de la figure 7.9 du chapitre 7, compterles transistors de la realisation du XOR.

Essayer d’autres expressions du XOR. Faire les schemas correspondants ;compter les transistors, comparer.

version en ligne - [PDF Document] (197)

5. Exercices 189

E8.15 : Des grandes portes avec des petitesEn utilisant les regles de De Morgan (Cf. Chapitre 2), montrer que

(a + b).(c + d) = a + b + c + d

En deduire le schema d’une fonction NOR a 8 entrees n’utilisant que desNAND ou NOR a 2 entrees. Penser a une organisation arborescente.

De meme3 donner le schema d’une fonction NAND a 8 entrees n’utilisantque des NAND et NOR a 2 entrees.

Generalisation : donner la regle generale permettant de realiser toute fonc-tion AND, OR, NAND ou NOR a nombre quelconque d’entrees en se servant deNAND a au plus 4 entrees, de NOR a au plus 3 entrees et d’inverseurs.

E8.16 : MultiplieurReprendre la technique de multiplication des naturels dans le chapitre 3. Etu-dier le circuit de multiplication. Au lieu d’une iteration en ligne, il faut pensera une iteration en matrice. Il est aussi possible de donner une descriptionrecursive de la solution.

E8.17 : Un circuit combinatoire avec un cyclePrendre un additionneur 1 bit. Reboucler le report sortant sur le report entrant.Se persuader que le circuit a deux entrees obtenu est un circuit combinatoire.

Indication : le report (sortant) est soit constant pour les entrees 00 et 11,soit egal au report entrant pour les entrees 01 et 10. On peut donc le rebouclersur le report entrant.

E8.18 : Un seul 1Soit une nappe de N fils xN−1, xN−2, . . . , x1, x0. Ce sont les entrees d’un circuitcombinatoire C. La sortie S vaut 1 si et seulement si un seul des xi vaut 1.Nous allons esquisser 5 solutions a ce probleme.

– Idee 1 (fonctionne bien pour N petit) : faire la table de verite de S, donnerl’equation de S, en deduire le circuit.

– Idee 2 : concevoir un circuit C’, n’ayant que N − 1 entrees et deux sortiesZ et T. Z vaut 1 si aucune des entrees ne vaut 1. T vaut 1 si une seuledes entrees vaut 1. Concevoir un circuit C” qui, combine avec C’ donne uncircuit ayant meme comportement que C’, mais N entrees. Construire Ccomme circuit iteratif par mise en cascade de circuits C”. Resoudre le casparticulier du premier etage.

– Idee 3 : supposer que N est une puissance de 2. Supposer que l’on sait faireun circuit C’ a N/2 entrees. C’ a deux sorties Z et T. Z vaut 1 si aucunedes entrees ne vaut 1. T vaut 1 si une seule des entrees vaut 1. Concevoirun circuit C” qui combine les quatre sorties des deux circuits C’ et delivredeux sorties Z et T. Construire C comme circuit recursif par mise en arbrede circuits C”. Resoudre le cas particulier du premier etage.

3Apres etre alle au NOR, il faut qu’on pense a faire NAND (G. Brassens)

version en ligne - [PDF Document] (198)

190 Circuits combinatoires

– Idee 4 : se persuader qu’un additionneur un bit donne le nombre de 1parmi trois fils d’entrees. En utilisant un ensemble d’additionneurs un bitsconcevoir un circuit qui donne le nombre de 1 parmi une nappe de fils.Concevoir un circuit qui detecte si ce nombre de 1 est superieur a un, ounul. Simplifier le circuit qui calcule le nombre de 1 pour tenir compte dufait que dans cet exercice on n’a pas besoin du nombre de 1, seulement desavoir s’il est superieur a un ou nul.

– Idee 5 : concevoir un circuit qui recoit une nappe de N fils et delivre unenappe de N fils. Les deux nappes sont ordonnees (de droite a gauche, dehaut en bas...). La notion de premier fait reference a cet ordre. Les sortiesde ce circuit soit sont toutes a 0, soit sont toutes a 0 sauf une, celle dont lerang est le rang du premier 1 de la nappe d’entree.

Utiliser deux tels circuits pour la nappe des xi, l’un pour un ordre, l’autrepour l’ordre inverse. Si il y a un seul 1, le premier 1 dans un sens est aussile premier 1 dans l’autre sens.

Etudier les 5 solutions du point de vue du nombre de portes, du nombred’etages de portes pour N valant 4, 16, 64 et 256. S’aider d’un outil de Concep-tion Assistee par Ordinateur.

version en ligne - [PDF Document] (199)

Chapitre 9

Elements de memorisation

Un ordinateur est muni de composants permettant de stocker les donneeset les programmes ; nous avons parle du tableau MEM au chapitre 4 et nousreparlerons de memoire dans les chapitres ulterieurs.

Des elements de memorisation sont aussi necessaires pour realiser des ma-chines sequentielles telles que nous les avons definies au chapitre 5 (Cf. Cha-pitres 10, 11 et 14).

D’une facon generale, il s’agit de savoir comment realiser la fonction d’af-fectation des langages de haut niveau : x ←− f(a, b, c). La memorisation peutavoir lieu chaque fois qu’une des variables a, b ou c est modifiee (comporte-ment asynchrone) ou a des instants fixes par une entree specifique ne dependantpas des autres entrees (comportement synchrone). Nous avons deja parle deces aspects au chapitre 6 et dans ce livre nous nous limitons aux circuitssynchrones. Un cas particulier de ce type d’affectation est : x ←− f(x, e) oules deux instances du nom x correspondent aux valeurs de x sur une memenappe de fils, a des instants differents. Ce n’est pas une equation de pointfixe. On la lit par exemple, comme dans un langage de programmation usuel,nouveau-x ←− f (ancien-x, e).

Dans ce chapitre nous etudions les elements de memorisation permettantde resoudre les problemes abordes ci-dessus sous les deux aspects :

– la vision externe, fonctionnelle, ou nous voyons qu’un processeur connectea de la memoire peut ecrire une information dans la memoire ou lire uneinformation precedemment memorisee en envoyant des signaux de com-mande a cette memoire. Une memoire ne permet que les affectations detype x ←− f(a, b, c) ; on ne peut pas lire et ecrire a un meme emplacementdans la memoire d’un ordinateur dans le meme instant.

– la vision interne, structurelle, ou nous expliquons comment de la memoirepeut etre fabriquee a partir d’elements de memorisation de base (nouspartons du bistable etudie au chapitre 7). Nous montrons aussi quelselements de memorisation conviennent pour realiser une affectation du typex ←− f(x, e). Ces elements sont aussi utilises dans les dispositifs de traite-ment de l’information dont naturellement les processeurs (Cf. Chapitre 14).

version en ligne - [PDF Document] (200)

192 Elements de memorisation

Dans le paragraphe 1. nous presentons les composants elementaires uti-lises pour memoriser de l’information et pour construire des circuitssequentiels. Nous presentons ensuite la notion de memoire dans un or-dinateur (paragraphe 2.) puis comment est construite une memoire apartir de cellules ou points memoires elementaires (paragraphe 3.). Leparagraphe 4. presente des optimisations et des realisations de memoireparticulieres.

1. Points de memorisation de bits : bascules

et registres

Dans le chapitre 7, nous avons decrit le comportement electrique de certainspoints memoire. Considerons une chaıne de 2k (k ≥ 1) inverseurs, la sortie del’un etant connectee a l’entree du suivant. Si nous rebouclons la sortie de lachaıne d’inverseurs sur l’entree, nous obtenons un circuit sequentiel a deuxetats stables, ou bistable. Nous nous interessons au cas k = 1. Tel que (Cf. Fi-gure 9.1-a), le bistable ne peut que fournir sa valeur a un autre composant,il n’est pas possible de le charger avec une valeur particuliere ; il peut etre lu,mais on ne peut y ecrire.

Nous allons etudier deux realisations permettant de forcer une valeur enentree du circuit. La premiere consiste a remplacer les inverseurs par des portesNOR (ou NAND). On obtient ainsi un circuit avec deux entrees de commandes,appele bascule RS (voir la figure 9.1-b pour le montage). La deuxieme consistea intercaler un multiplexeur entre les deux inverseurs ; ce montage est appeleverrou construit a partir du bistable (Cf. Figure 9.4-a).

Par essence, les points de memorisation sont des circuits ou l’une des sortiesreboucle sur l’une des entrees. Cela conduit a des equations du type x = f(x, e),ou les deux occurrences de x denotent des valeurs de x a des instants differents.Pour distinguer une variable x a un instant et la meme a l’instant suivant, nousecrivons x’. L’equation precedente devient : x’ = f(x, e) : la nouvelle valeur dex est fonction de son ancienne valeur et de e.

Comme nous l’avons precise en introduction, dans ce livre nous nous limitonsaux circuits synchrones. Lorsque nous utiliserons des elements de memorisationdans des assemblages complexes (Cf. Chapitres 10, 11 et 14), les valeurs desvariables seront examinees a des instants definis par un signal en generalperiodique appele horloge.

1.1 Points de memorisation elementaires : bascule RS,verrou

1.1.1 Bascule RS

Une bascule RS possede deux entrees R (Reset) et S (Set) permettant deforcer l’etat respectivement a 0 ou a 1, et deux sorties Q1 et Q2.

version en ligne - [PDF Document] (201)

1. Points de memorisation de bits : bascules et registres 193

R

S

Q1

Q2

(b)

QR

S Q

(c)(a)

Fig. 9.1 – a) le bistable b) la bascule RS realisee avec des portes NOR c) le symbolelogique de la bascule RS

Nous allons detailler le fonctionnement d’une bascule RS realisee a partirde portes NOR (voir pour le montage la figure 9.1-b) :

– Lorsque R et S sont stables a 0, la bascule est equivalente a un bistable. Eneffet, NOR(x, 0) = x.

– A partir de cet etat stable, le passage de R a 1 fait passer Q1 a 0, apres undelai de commutation de la porte NOR. Apres un autre delai, Q2 passe a1. Lorsque R repasse a 0, alors l’etat reste stable.

– Par symetrie, a partir de l’etat stable, le raisonnement est le meme. LorsqueS passe a 1, Q2 passe a 0 et Q1 passe a 1, a ceci pres que Q2 change avantQ1.

– Lorsque S (respectivement R) est a 1 et que R (respectivement S) passe a1, les sorties Q1 et Q2 sont a 0. Cette situation n’evolue pas tant que lesdeux entrees restent stationnaires. Cela constitue le plus souvent une erreurd’initialisation.

Remarquons que lorsque R et S ne sont pas tous deux a 1, Q1 et Q2 sontcomplementaires, ce qui justifie les noms habituels Q et Q.

La stabilisation des sorties ne peut avoir lieu exactement au meme instantque le changement de l’entree, a cause du temps de commutation de chaqueporte. Il existe ainsi un delai de stabilisation de la bascule, delai faible et borne.Nous ne prenons pas en compte de facon chiffree ce delai mais seulement sonexistence et notons que les valeurs en entree et en sortie sont considerees ades instants successifs. Plus precisem*nt, nous notons Q1, Q2 les valeurs dela bascule a un instant donne et Q1’, Q2’ les nouvelles valeurs, a un instantimmediatement ulterieur.

La table d’evolution des valeurs de la bascule est donnee ci-dessous, lapremiere ligne se lisant : si les entrees S et R sont a 0, la sortie Q1 reste a lavaleur qu’elle avait precedemment et donc Q1’ = Q1. A partir de cette table,on obtient les equations donnees a cote.

Du schema de la figure 9.1-b, on tirerait les equations : Q1′ = R + Q2, Q2′ =

S + Q1. D’ou Q1′ = R + S + Q1 = R.(S + Q1) et Q2′ = S + R + Q2 =S.(R + Q2).

version en ligne - [PDF Document] (202)

194 Elements de memorisation

S R Q1’ Q2’

0 0 Q1 Q21 0 1 00 1 0 11 1 0 0

Q1′ = Q1.S.R + S.R= R.(Q1.S + S)= R.(Q1 + S)

Q2′ = Q2.S.R + S.R= S.(Q2.R + R)= S.(Q2 + R)

R

S

temps

Q2

Q1

Fig. 9.2 – Chronogramme du comportement logique ideal d’une bascule RS. Les poin-tilles representent les instants de changement de Q1 et Q2.

On remarque que si R.S 6= 1, Q1 = Q2 ce qui justifie le schema logique dela figure 9.1-c. En revanche, dans le cas ou R et S valent 1, les sorties Q1 etQ2 ne sont pas complementaires.

Le chronogramme de la figure 9.2 montre le comportement temporel logiquede la bascule RS.

Avec la bascule RS a portes NOR, la remise a 0 est prioritaire sur la misea 1 : en effet, Q′ = R.(Q + S). Donc, si R vaut 1, la sortie Q passe a 0. Sinon,la sortie est conditionnee a la valeur de S : si S vaut 1, la sortie Q vaut 1 sinon0.

La bascule RS peut etre aussi realisee avec des portes NAND. Les entreesde commande sont actives a 0 (lorsque R=S=1, la nouvelle valeur est egale al’ancienne, si R vaut 0 et S vaut 1, Q passe a 0, si R vaut 1 et S vaut 0, Qpasse a 1) et la mise a 1 est prioritaire sur la mise a 0.La table d’evolution de la bascule et sa definition equationnelle sont alors :

S R Q′ Q′

1 1 Q Q1 0 0 10 1 1 00 0 1 1

Q′ = R.Q.S = R.Q + S

Q′ = S.Q.R = S.Q + R

version en ligne - [PDF Document] (203)

1. Points de memorisation de bits : bascules et registres 195

1.1.2 Verrou

Un verrou (Cf. Figure 9.4) possede une entree de donnee D (pour Data),qui est la valeur a memoriser, et une entree de commande En (pour Enable).Lorsque l’entree En est active (En=1), le verrou est dit transparent et sa sortieQ est egale a la valeur de l’entree D apres un petit delai appele temps detraversee du verrou. Lorsque En est a 0, le montage est equivalent a un bistable.La sortie Q est figee et sa valeur est celle de l’entree D au moment du frontdescendant de En. La definition equationnelle du verrou D est : Q′ = En.D +En. Q. Le chronogramme de la figure 9.3 illustre ce comportement.

Le verrou peut etre realise de plusieurs facons, par exemple a partir d’un bis-table en intercalant un multiplexeur entre les deux inverseurs (Cf. Figure 9.4-

a). L’equation deduite de la figure est : Q′ = En.D + En.Q. On retrouve la

l’equation du verrou en notant que Q=Q.Un autre montage peut etre envisage en rebouclant directement la sortie

du multiplexeur sur son entree. En effet, la realisation d’un multiplexeur de-mande l’utilisation de portes, induisant ainsi un delai de commutation lors-qu’on effectue le rebouclage de la sortie sur l’entree. Il est donc possiblede ne pas intercaler d’inverseurs (en nombre pair) entre la sortie du multi-plexeur et l’entree. Dans la figure 9.4-d, on montre une realisation de ver-rou a partir d’un multiplexeur, lui-meme realise a partir de portes NAND.Remarquons que nous retrouvons cette realisation a partir de l’equation :

Q’ = En.D + En.Q = En.D.En.Q.Nous proposons une derniere realisation d’un verrou a partir d’une bascule

RS. Nous l’obtenons en transformant l’equation precedente :

Q’ = En.D.En.Q = (En + D)(En + Q)

= D.En + Q.(En + D) = En.D + Q.En.D

= En.D.(Q + En.D)

En rapprochant cette equation de celle de la bascule RS a portes NOR :Q′ = R.(Q + S), avec R = En.D et S = En.D, on obtient la realisationdonnee dans la figure 9.4-b. Notons que, par construction, ce montage interditR = S = 1.

1.2 Points de memorisation pour les circuitssequentiels : bascule maıtre-esclave,bascule sensible au front

Nous avons dit precedemment que nous souhaitions realiser des fonctions dememorisation permettant des affectations de la forme x ←− f(x, e) en nous li-mitant aux systemes synchrones ou la progression des valeurs de x est cadenceepar un signal (generalement periodique) appele horloge.

version en ligne - [PDF Document] (204)

196 Elements de memorisation

D

En

tempsQ

Fig. 9.3 – Chronogramme du comportement logique d’un verrou

QDEn

(c)

En

DQ

(d)

1 0

En

DQ

(a)

QR

S

D

QEn

(b)

Fig. 9.4 – Trois realisations d’un verrou de type D et son symbole logique. a) realisationd’un verrou a partir d’un bistable et d’un multiplexeur, b) realisation d’unverrou a partir d’une bascule RS, c) symbole logique d’un verrou, d) realisationd’un verrou a partir d’un multiplexeur seul (en gris est represente l’interieurdu multiplexeur).

version en ligne - [PDF Document] (205)

1. Points de memorisation de bits : bascules et registres 197

Un verrou ne convient pas pour ce genre de realisation car il ne permet pasde commander les instants ou la memorisation a lieu. Dans ce paragraphe, nousprecisons pourquoi le verrou ne convient pas et nous montrons des solutionspour resoudre le probleme.

1.2.1 Probleme de rebouclage du verrou

Etudions le circuit dont l’equation est x=x.e, realise avec un verrou, dontl’entree d’activation est connectee au signal periodique En (par exemple l’hor-loge) et l’entree D est reliee a la sortie d’une porte NAND a deux entrees.Cette porte NAND a pour entree e et la sortie Q du verrou. Nous avons lesequations suivantes :

Q’ = En.D + En.Q D = e.Q

Pendant que En est a 1, si l’entree e vaut 1, on a Q’=D et D=Q. Si Enreste a 1 pendant un temps superieur au temps de traversee de la porte NAND,la sortie Q et l’entree D peuvent passer successivement de 1 a 0 un nombreindetermine de fois et donc fournir un resultat incoherent.

Illustrons ce comportement incoherent dans un circuit reel effectuant uncalcul sur des nombres codes sur n bits. Supposons que l’on veuille realiserx’ ←− x + e avec x et e entiers (Cf. Figure 9.5-a). Nous etudierons de faconsystematique ces fonctions au chapitre 10. On veut que l’horloge H, connectee al’entree En des verrous, cadence les evolutions de x aux instants i0, i1, i2, i3, i4,. . .Notons x0, x1, x2, x3 et x4 les valeurs successives de x. Les fils d’entree e, eux,changent n’importe quand par rapport aux instants fixes par H. D’apres lesvaleurs de e observees aux instants i1, i2, i3 et i4 (Cf. Figure 9.5-b), les valeursde x a ces memes instants sont respectivement : x1 = x0 + 1, x2 = x1 + 1,x3 = x2 + 3 et x4 = x3 + 7.

Observons le bit de poids faible de x memorise dans le verrou d’entree D0et de sortie Q0. Il change a chaque addition puisqu’on ajoute des nombresimpairs ; donc D0 = Q0.

Si l’horloge H vaut 0, le verrou est stable, il ne se passe rien. Quand H vaut1, le verrou est transparent et Q0 suit les variations de D0. Dans le circuitcombinatoire qui fabrique D0, D0 = Q0, et donc D0 passe alternativement de1 a 0 et de 0 a 1. (Cf. Figure 9.5-c).

On ne peut pas controler combien de fois l’inverseur inverse pendant queH est a 1. Ceci peut donner une valeur quelconque lorsque H repasse a 0.Le verrou ne peut donc pas etre a la base de realisation du comportementx ←− f(x, e).

Reduire la duree de l’etat haut de l’horloge pour eliminer le probleme n’estpas realiste. La solution consiste alors a construire une bascule, c’est-a-dire undispositif pour lequel l’etat transparent est limite a un tres court instant aumoment du front montant (ou descendant) de l’horloge.

version en ligne - [PDF Document] (206)

198 Elements de memorisation

En

DpQp

x2

1 1 3 7

x0 x1 x3 x4x

e

i2 i3 i4i0 i1instants fixespar H

(a) Realisation de l’affectation x’ ←− x + e

e

x

x’

H

EnQ0 D0

memorises dans p verrous1

e (impair)

transparentQ0 D0

ADD

ADD

x est represente sur p booleens

(b) valeurs de x et e aux instants fixes par H

(c) H=1 : verrou transparent

Fig. 9.5 – Probleme pose par la nature transparente d’un verrou

1.2.2 Bascule de type maıtre-esclave

Une bascule de type maıtre-esclave est construite en connectant en seriedeux verrous commandes par des signaux complementaires. Les figures 9.6et 9.7 donnent respectivement le montage et un exemple de chronogramme.

Le premier verrou, appele maıtre, memorise l’entree D lorsque En1, c’est-a-dire H, est a 1 : la sortie Q1 suit l’entree D (D1=D). Pendant ce temps, lavaleur memorisee par le second verrou reste stable, puisque En2=0. LorsqueH prend la valeur 0, le contenu du premier verrou reste fige et est transferedans le second verrou qui devient actif (En2=1) et memorise donc la valeurprecedemment stockee dans le premier verrou. Ainsi, la sortie Q reste stablependant que le signal H est a 1 ou pendant que le signal H reste a 0. La sortieQ change lorsque le signal H passe de 1 a 0. Le temps pendant lequel H est a1 doit etre superieur au temps de traversee du verrou.

1.2.3 Bascule D a front

Une bascule D a front a une entree de donnee D, une entree d’activation Het une sortie Q. La bascule D a front montant (respectivement descendant) estcaracterisee par le fait que sa sortie Q est stable entre deux fronts montants(respectivement descendants) du signal connecte sur H, en general une horloge.La valeur de la sortie est celle de l’entree D au moment du dernier front mon-tant (respectivement descendant) de H. Il est donc necessaire que l’entree Dsoit stable pendant le front. Une bascule a front montant (respectivement des-

version en ligne - [PDF Document] (207)

1. Points de memorisation de bits : bascules et registres 199

En2En1

D1 Q1 D2 Q2QD

H

Fig. 9.6 – Bascule de type maıtre-esclave

H

D

Q1

Q

Fig. 9.7 – Chronogramme decrivant le comportement de la bascule maıtre-esclave. Avantle premier front montant de H, Q1 est indetermine.

S1

R1

D

HQ1

Q3R3

S3 Q3Q2

Q2

R2

S2

Q1Q

Q

QD

H

Q

Fig. 9.8 – Une realisation de la bascule de type D a front descendant et son symbolelogique

version en ligne - [PDF Document] (208)

200 Elements de memorisation

cendant) peut etre realisee a partir de 3 bascules RS NAND (respectivementNOR).

Nous decrivons le comportement de la bascule a front descendant. Larealisation avec 3 bascules RS a portes NOR est donnee dans la figure 9.8.Il y a deux niveaux de bascules :

– la bascule en sortie RS3, dont les entrees sont pilotees par les sorties desbascules RS1 et RS2, et

– les deux bascules RS1 et RS2, dont les entrees sont pilotees par H et D.

Les equations de la bascule a front sont :

S2 = D (1) S1 = H (2)Q1 = S1.(Q1 + R1) (3) R2 = H + Q1 (4)R3 = Q1 (5) Q2 = R2(Q2 + S2) (6)S3 = Q2 (7) Q2 = S2(Q2 + R2) (8)R1 = Q2 (9) Q3 = R3(Q3 + S3) (10)Q3 = S3(Q3 + R3) (11)

Nous allons montrer que la sortie ne change pas entre deux fronts descen-dants de H.

Nous faisons l’hypothese que D reste stable pendant que H passe de 1 a 0.Considerons l’etat initial H=1, qui precede le front descendant de H. En

appliquant les equations, nous obtenons les resultats partiels suivants : S1 =1, Q1 = 0, R2 = 1, R3 =0 , Q2 = 0, S3 =0 . Donc, la bascule RS3 ne changepas d’etat et la sortie Q3 est stable.

Supposons qu’a l’etat initial, on ait en plus D=0. Il en resulte que S2=0,Q2=1, R1=1. Lors du passage de H a 0, nous obtenons S1=0 d’apres (2).

Puisque R1=1 d’apres (3), nous obtenons Q1=1. D’ou R3=1 . Par ailleurs,

le fait que R2=1 entraıne Q2=0 d’apres (4), et donc S3=0 . La sortie de labascule Q3 est 0. Ensuite, tant que H reste a 0, Q1 = 1 et R2=1. Il s’ensuitque R3=1 et S3=0 . La sortie reste a 0. Lorsque H repasse a 1, Q1=0 d’apres

(2) et (3), et R2=1 d’apres (4). Donc R3 passe a 0 et S3 reste a 0 : la sortiereste inchangee.

Si a l’etat initial D=1, alors S2=1, Q2=0, R1=0. Nous obtenons Q1 = 0.Comme R2=0 et S2=1, Q2=1. La bascule RS3 est forcee a 1. Par un raison-nement analogue au cas ou D=0 a l’etat initial, la sortie Q3 reste stable.

Nous avons montre que, si l’entree D reste stable pendant que H passe de1 a 0, la sortie Q3 reste stable jusqu’au front descendant suivant.

Le chronogramme de la figure 9.9 montre l’evolution de la sortie Q de labascule a front descendant en fonction de l’entree D.

Du point de vue de la realisation, en technologie CMOS, la bascule a frontutilise autant de transistors qu’une bascule maıtre-esclave c’est-a-dire deux foisplus qu’un verrou.

version en ligne - [PDF Document] (209)

1. Points de memorisation de bits : bascules et registres 201

H

D

Q

Fig. 9.9 – Chronogramme decrivant le comportement de la bascule a front descendant

1.2.4 Un exemple de circuit utilisant des bascules a front :le detecteur de passage

Le detecteur de passage, necessaire lorque l’on veut reperer le passage d’unsignal de 1 a 0, est un montage sequentiel qui echappe aux techniques derealisation systematique que nous etudions au chapitre 10.

La figure 9.10 decrit un dispositif permettant la detection d’un passage.La sortie Q1 prend la valeur de l’entree e aux fronts descendants de H etla sortie Q2 recopie Q1 aux fronts montants de H. Q1 est stable entre deuxfronts descendants. La sortie Q2 prend ainsi la valeur de la sortie Q1 avec unedemi-periode de retard.

Supposons que les deux bascules soient initialement a 0. Si l’entree e passea 1, Q1 et S passent a 1. Apres une demi-periode, Q2 passe a son tour a 1 etS passe a 0. On obtient une impulsion de S d’une demi-periode apres chaquetransition de 0 a 1 de l’entree.

1.3 Autres commandes associees a une bascule

Pour certains circuits complexes, il est indispensable d’introduire une nou-velle entree dite de commande de chargement sur les bascules. L’ensemble desbascules a l’entree d’horloge connectee a l’entree d’horloge du circuit et desgroupes de bascules peuvent avoir l’entree de chargement en commun.

En interne, le signal d’horloge est l’entree d’horloge de la bascule (H) etle signal de chargement (Ch) commande un multiplexeur (Cf. Figure 9.11).Notons que dans certaines documentations l’entree de chargement est appeleeenable ce qui peut entraıner une certaine confusion avec le verrou.

On peut ajouter d’autres signaux, par exemple, pour l’initialisation Preset(ou Set) et Clear (ou Reset) forcent respectivement la valeur de la bascule a 1 eta 0. Dans le chapitre 10, on fera figurer sur les bascules les entrees de commandeet d’initialisation. Selon la structure interne de la bascule, ces entrees sontconsiderees soit a un front (initialisation synchrone), soit des qu’elles sontactives (initialisation asynchrone).

version en ligne - [PDF Document] (210)

202 Elements de memorisation

S

Q2

Q1

e

H

Se

Q2Q1

H

Fig. 9.10 – Detecteur de passage de 0 a 1

D Q10

Ch

D

HHCh

H

D QQ

Fig. 9.11 – Une realisation d’une bascule avec commande de chargement et son symbolelogique

version en ligne - [PDF Document] (211)

2. La memoire : organisation matricielle des points de memorisation 203

1.4 Notion de registre

Un verrou a n bits permet de stocker des informations codees sur plus d’unbit. On l’obtient par simple juxtaposition de verrous elementaires commandespar le meme signal de chargement.

Sur le meme principe, en utilisant des bascules D, on obtient un registre an bits.

La nappe des n booleens peut etre interpretee comme un vecteur de bitsmais aussi comme un nombre, un caractere, etc. (Cf. Chapitre 3).

Dans les chapitres 11 et 14, nous verrons l’utilisation de tels registres dansla realisation des parties operatives. Dans la suite et en particulier dans ceschapitres, nous considerons systematiquement des registres fabriques a partirde bascules a front et le plus souvent avec une commande de chargement.

2. La memoire : organisation matricielle des

points de memorisation

Tout ordinateur est dote de memoires plus ou moins grandes a acces plusou moins rapide. Ce paragraphe presente la memoire du point de vue externe,celui de l’utilisateur. Nous expliquons ce que sont un mot memoire et un accesmemoire, et nous donnons une idee des differents types de memoire.

2.1 Notion de memoire dans un ordinateur

Une memoire est l’organisation d’un ensemble de points de memorisationelementaires en matrice a p lignes et n colonnes. On peut ainsi voir la memoirecomme l’assemblage de n × p bits. Mais on l’utilise comme un tableau de pelements de taille n auxquels on accede par indice. Une ligne est appelee motde la memoire et on parle d’une memoire de p mots de n bits.

A chaque mot, c’est-a-dire a l’ensemble des n points de memorisationelementaire qui le composent, est associe un fil dit de selection du mot. Laselection d’un mot consiste ainsi a mettre a 1 le fil de selection associe.

L’interface de la memoire est composee de p fils de selection S0, ..., Sp−1.Lors d’un acces un seul des S0, ..., Sp−1 doit valoir 1. De plus, un fil permet depreciser si l’acces souhaite est une lecture ou une ecriture. Le signal specifiantle sens de l’acces est note l/e (r/w en version anglaise) ; s’il est a 1 il s’agitd’une lecture (read) et s’il est a 0 c’est une ecriture (write). Une telle notationa deja ete vue au chapitre 8 pour le signal Add/Sub.

Habituellement, le mot auquel le processeur accede est designe par unnumero (compris entre 0 et p − 1) appele adresse. Si p = 2m, l’adresse estcodee sur m bits (Am−1, ..., A0) et un decodeur associe a la memoire realisela fonction de calcul de l’unique fil de selection valant 1 ; ainsi, si les m bitsd’adresse Am−1, ..., A0 codent l’entier i (0 ≤ i ≤ 2m − 1), le fil de selection denumero i vaut 1 et tous les autres valent 0.

version en ligne - [PDF Document] (212)

204 Elements de memorisation

Dec

odeu

r

mot 1mot 0

n

Adresses

A0

Am-1

FinAcces

l/eDonnees

Sp−1

bit 0bit n-1

SelMem l/e Operation

1

1

1

1

0 0 pas d’acces

pas d’acces

ecriture

lecture

S0

CelluleMemoire

mot 2m − 1

SelMem

Fig. 9.12 – Memoire de 2m mots de n bits et signification des signaux SelMem et l/e.

De plus, un acces a la memoire est materialise par l’activation d’un signalde selection memoire que nous notons dans la suite SelMem.

La figure 9.12 represente une memoire de 2m mots de n bits ainsi quel’operation realisee selon la valeur des signaux SelMem et l/e.

Remarque : Dans certains processeurs, les signaux de commande de lamemoire sont definis de facon differente avec, par exemple, deux signaux lecet ecr. L’acces a la memoire en lecture est realise par la commande : lec ETecr et l’acces en ecriture par la commande : lec ET ecr ; lec ET ecr signifiequ’il n’y a pas d’acces a la memoire, et lec ET ecr n’a aucun sens (et doit etreevite).

La valeur a stocker dans la memoire (cas d’une ecriture) ou a extraire decelle-ci (cas d’une lecture) est appelee la donnee (de taille n).

Le processeur dialogue avec la memoire via les signaux de controle SelMem,FinAcces et l/e, et via le bus memoire comprenant les adresses et les donnees.On parle de bus d’adresses et de bus de donnees.

2.2 Deroulement d’un acces memoire par un processeur

Nous considerons ici un ordinateur compose d’un processeur et d’unememoire vive, avec les hypotheses simplificatrices suivantes :

1. Les adresses sont sur m bits et les donnees sur n bits. Les adresses sontdes adresses de mots de n bits et les acces memoire sont limites aux seulsmots de n bits. Le cas general permettant l’acces a des sous-ensembles dumot memoire est etudie dans le chapitre 15. L’acces a des sur-ensemblesdu mot memoire, en mode rafale, est etudie dans le paragraphe 4.3 dupresent chapitre.

version en ligne - [PDF Document] (213)

2. La memoire : organisation matricielle des points de memorisation 205

2. La taille de memoire physique et la capacite d’adressage du processeursont identiques. En general, la capacite d’adressage du processeur estsuperieure a la taille de la memoire physique ; une meme adresse risquealors de correspondre a plusieurs mots memoire. Nous etudions cettesituation au chapitre 15.

Le raccordement des signaux entre processeur et memoire est tres simple : lebus de donnees est connecte aux entrees et sorties des donnees de la memoire,le bus d’adresse aux entrees de selection de mot. Le bus de donnees est bidi-rectionnel alors que le bus d’adresses est monodirectionnel. L’entree l/e de lamemoire est reliee au signal de meme nom du processeur, et l’entree d’acti-vation de la memoire SelMem au signal de demande d’acces a la memoire duprocesseur AccesMem. La sortie FinAcces est reliee au signal du meme nom duprocesseur.

1. Lors d’une ecriture, le processeur 1) affiche sur le bus d’adresses le numerode l’emplacement memoire auquel il accede ; 2) affiche l’information aecrire sur le bus de donnees ; 3) met a 0 le signal l/e ; 4) met a 1 le signalAccesMem.

A l’interieur de la memoire, le decodeur d’adresses selectionne l’emplace-ment correspondant, active le dispositif d’ecriture et desactive la sortiedu circuit de lecture. Pour chaque bit du mot dont la nouvelle valeurdiffere de l’ancienne, le bistable memoire change d’etat. Le delai maxi-mal de commutation definit le temps d’acces en ecriture de la memoire.Le signal FinAcces est alors emis. A la fin de l’ecriture, le processeur meta 0 le signal AccesMem.

2. Dans le cas d’une lecture, le processeur 1) affiche sur le bus d’adresses lenumero de l’emplacement memoire auquel il accede ; 2) met a 1 le signall/e ; 3) met a 1 le signal AccesMem.

A l’interieur de la memoire, le decodeur d’adresse selectionne l’emplace-ment correspondant, desactive le dispositif d’ecriture et active la sortie ducircuit de lecture. Apres un certain delai, dont la borne superieure est letemps d’acces en lecture, la valeur lue se stabilise sur le bus de donnees.Le signal FinAcces est alors emis. A la fin de la lecture, le processeurmemorise la valeur stabilisee sur le bus de donnees dans un registre (ouun verrou) interne et met a 0 le signal AccesMem.

Entre deux cycles d’acces memoire, le signal AccesMem vaut 0 et les signauxd’adresses, de donnees et l/e ne sont pas significatifs.

Si un acces a la memoire dure un seul cycle d’horloge du processeur et sile temps de cycle de la memoire est inferieur ou egal a ce dernier, on peutsimplifier le protocole de communication : la memoire n’emet pas l’acquit-tement FinAcces pour signifier explicitement la fin d’un acces. Le processeurdemande l’acces, signal emis sur sa propre horloge, et la lecture ou l’ecrituresont supposees etre effectives lors du prochain top d’horloge du processeur.

version en ligne - [PDF Document] (214)

206 Elements de memorisation

Adresse

l/e

A2

T1 T2

AccesMem

A1

Fig. 9.13 – Chronogrammes decrivant l’acces a la memoire. L’intervalle T1 corresponda la lecture du mot memoire d’adresse A1 ; l’intervalle T2 correspond al’ecriture du mot memoire d’adresse A2.

La figure 9.13 montre une evolution possible des differents signaux, donneeset adresses intervenant lors d’un acces a la memoire par le processeur.

2.3 Typologie de memoires

On peut donner une premiere classification de la memoire en considerantl’ordre dans lequel le processeur accede aux donnees. La plupart des memoirescentrales offrent un acces aleatoire : les donnees peuvent etre lues ou ecritesa n’importe quel emplacement (en anglais RAM ou Random Access Memory).Le temps d’acces a une valeur est pratiquement independant de l’emplacementdans lequel elle est stockee.

Les bandes, cartouches et cassettes magnetiques sont au contraire d’excel-lents exemples de dispositifs a acces sequentiel (Cf. Chapitre 19). Pour accedera une donnee situee en fin de bande, il faut d’abord parcourir la totalite dela bande et des donnees qui precedent. Le temps d’acces est proportionnel al’eloignement de l’information sur la bande.

Les memoires peuvent etre classees selon leurs fonctionnalites. Une dis-tinction est faite entre ROM (Read Only Memory) et RWM (Read Write Me-mory). Les premieres etant accessibles en lecture seule, les secondes en lec-ture et ecriture. Dans les RWM, les donnees sont memorisees dans des pointsmemoires statiques (bascules) ou dynamiques (capacites). Dans la mesure ouun point memoire dynamique peut etre realise avec moins de transistors, pourune meme surface, une memoire dynamique aura une plus grande capacite destockage. En revanche, elle devra etre rafraıchie regulierement.

La structure des ROM est generalement basee sur un autre principe : l’in-formation est codee dans la structure du circuit en ajoutant ou retranchantdes transistors (Cf. Chapitre 7). La structure etant figee, la memoire ne peutetre modifiee. De plus, la deconnexion electrique du dispositif ne modifie pas

version en ligne - [PDF Document] (215)

3. Realisation des memoires statiques 207

les donnees memorisees.Pour des raisons historiques, le sigle RAM est utilise a la place de RWM

(Read Write Memory).

3. Realisation des memoires statiques

3.1 Decomposition de la memoire globaled’un ordinateur en boıtiers et barettes

Nous avons presente la memoire d’un ordinateur comme un tableau de 2m

mots de n bits (Cf. Paragraphe 2.). En pratique, on cherche a minimiser lenombre de broches. On va construire la memoire a l’aide de plusieurs boıtierspour obtenir la capacite voulue. On peut envisager deux strategies :

– considerer un boıtier de capacite une colonne de 2m mots de 1 bit et jux-taposer les boıtiers. Cela donne, par boıtier, un decodeur ayant m entreesd’adresse, une entree SelMem, une entree l/e et une sortie representant lebit selectionne. Le schema est analogue a la figure 9.12, en considerant unememoire de 2m mots de 1 bit. En juxtaposant n boıtiers, partageant lesmemes entrees, on obtient une barette de capacite 2m × n.

– integrer les mots les plus longs possibles jusqu’a la taille n. Dans ce cas, nousconsiderons p boıtiers de 2ki mots de n bits, tels que Σp

i=12ki = 2m. Nous

obtenons ainsi une decomposition de la memoire en tranches horizontales.

La premiere solution est plus souple et peut s’adapter a des processeursde tailles differentes (16, 32 ou 64 bits). De plus, le nombre de broches estoptimise : il y a m broches d’adresses et n broches de donnees. Si on ajouteune broche de donnee, on passe d’une capacite de 2m × n a une capacite de2m × (n + 1). Si on ajoute une broche d’adresse, on passe d’une capacite de2m × n a 2m+1 × n. Toutes les memoires de grande capacite sont organiseessuivant ce schema. Dans la suite, on assimilera une barette de n boıtiers de 1bit a un boıtier de n bits.

3.2 Realisation physique

3.2.1 Principe d’une realisation avec verrous

Nous donnons une realisation interne d’un boıtier memoire de 2m mots de1 bit a l’aide de verrous et de portes 3 etats (Cf. Figure 9.14-a). Ce boıtier am + 3 entrees qui sont : l’adresse du mot (Am−1, ...A0), le bit de donnee Don,le signal SelMem, et le signal l/e. Le boıtier comporte un decodeur qui sert aselectionner le bon verrou : si Am−1, ...A0=i, moti=1. A l’aide du signal l/e,on selectionne le sens de transfert de la donnee : si ce signal est a 1, alors lavaleur sur le fil de donnee Don est recopiee dans la bascule selectionnee. Si ce

version en ligne - [PDF Document] (216)

208 Elements de memorisation

signal est a 0, la porte 3 etats en sortie de bascule selectionnee est activee etle contenu de la bascule est recopie sur le fil de donnee Don.

La realisation de chaque bit met en jeu 2 sorties pour le decodeur, 1 verrou,2 portes et, 1 inverseur et une porte 3 etats.

3.2.2 Cellule de memoire statique

La figure 9.14-b montre une autre solution : la cellule memoire a bistableet forcage par court-circuit.

Le processeur selectionne la cellule de numero i en activant le mot de ligne(moti), qui connecte via les deux transistors C1 et B1, les inverseurs aux co-lonnes v et v definissant la valeur d’un bit.

En lecture (SelMem vaut 1 et l/e vaut 1), la valeur stockee dans la cellule(cote gauche du bistable) et son complement (cote droit du bistable) appa-raissent respectivement sur les colonnes v et v avec une degradation des si-gnaux logiques. Le comparateur analogique detecte la colonne sur laquelle latension est la plus elevee et donne la valeur stockee dans la cellule. Cette valeurest envoyee en sortie (Don) de la memoire via un amplificateur 3 etats activepar le produit des signaux l/e et SelMem.

En ecriture (SelMem vaut 1 et l/e vaut 0) on impose un zero sur un descotes du bistable en reliant une des colonnes v et v a la masse via un des deuxtransistors B2 ou C2. Le signal de commande du transistor B2 ou C2 est leproduit du signal de selection du boıtier (SelMem), du signal d’ecriture (l/e)et du signal d’entree (Don pour B2 (v) et Don pour C2 (v)).

– La colonne v est reliee a la masse si C2 est passant, ce qui est le cas lorsqueDon vaut 0. Pendant ce temps, B2 est bloque. Si de plus moti est a 1, letransistor C1 est passant et le cote gauche du bistable est force a la masse.Ceci installe un 1 du cote droit.

– La colonne v est reliee a la masse si B2 est passant, ce qui est le cas lorsqueDon vaut 1. Si de plus moti est a 1, le transistor B1 est passant et le cotedroit du bistable est force a la masse. Ceci installe un 1 du cote gauche.

3.2.3 Organisation de cellules de memoire en matrice

On peut qualifier une memoire en fonction de son debit : c’est le nombre demots auxquels on accede par seconde. Considerons une memoire de 220 mots(20 bits d’adresse) de 1 bit organisee comme nous l’avons vu precedemment.On peut organiser cette memoire, par exemple, comme une matrice (Cf. Fi-gure 9.15) de 2048 (211) lignes de 512 (29) bits. La memoire est ainsi constitueede lignes, une ligne etant selectionnee grace aux 11 bits de poids forts del’adresse, et un etage de decodage des informations d’une colonne, la colonneetant selectionnee grace aux 9 bits de poids faibles de l’adresse. Le debit estalors ameliore puisque pendant le decodage des colonnes, il est possible decommencer le decodage d’une nouvelle ligne.

version en ligne - [PDF Document] (217)

3. Realisation des memoires statiques 209

Am−1

moti

SelMem

motj

v

-

Don

C2 B2

C1 B1

v

+

l/e

Selecteur

(b)(a)

QEnD

SelMem

EnQD

l/e Don

A0

moti

motj

Cellule

Fig. 9.14 – Deux realisations de points de memoire. a) a partir de verrous et de portes,b) a partir de bistables (le triangle en gris est un comparateur analogique).

Donnees

SelMem

l/e

Selecteurs

A9

A0

Poids faibles

A8

Poids forts

A19

Fig. 9.15 – Matrice de Cellules construite a partir de bistables

version en ligne - [PDF Document] (218)

210 Elements de memorisation

Nous verrons dans le paragraphe 4. qu’une telle organisation permet aussid’optimiser l’acces a des donnees appartenant a une meme colonne.

4. Optimisations et techniques particulieres

Il existe divers types de realisation des memoires. Nous en presentonsquelques-unes et a la suite de l’observation du paragraphe 3.2.3, nous montronsquelques approches permettant d’ameliorer encore le debit de la memoire.

4.1 Multiplexage lignes/colonnes

Dans le cas d’une organisation de la memoire telle que nous l’avons vue ala figure 9.15, on peut diminuer le nombre de broches de moitie. En effet, il nesert a rien d’activer une colonne avant que la ligne ne soit selectionnee.

L’idee est de reutiliser les broches servant a la selection des lignes pourrealiser la selection des colonnes. Il convient alors que le nombre de fils soit lememe et on fabrique ainsi des matrices carrees de cellules.

Etant donne m/2 broches et une adresse codee sur m bits (m etant pair),les m/2 bits de poids forts codent une ligne et les m/2 bits de poids faiblesune colonne. Le circuit recoit les m/2 bits de poids forts, qui sont memoriseset relies au decodeur des lignes. Puis, pendant ce decodage, le circuit recoit lesm/2 bits de poids faibles qui sont relies au decodeur des colonnes.

Ce circuit est realise a partir d’une matrice de cellules, en utilisant deuxsignaux supplementaires RAS (Row Address Strobe) et CAS (Column AddressStrobe). La ligne (respectivement la colonne) est selectionnee au front des-cendant de RAS, i.e. RAS (respectivement CAS). Le temps d’acces a unecellule memoire est la somme du temps de selection d’une ligne et du tempsde selection d’une colonne.

4.2 Memoires dynamiques

Les memoires dynamiques sont organisees en matrices tout comme lesmemoires statiques. Dans une cellule, l’information y est codee sous forme decharge electrique stockee dans la capacite grille-source d’un transistor MOS.

La capacite de la cellule de memoire dynamique se decharge lentement etl’information stockee disparaıt avec le temps. Pour eviter cela, chaque ligneest periodiquement lue et reecrite en totalite. Ce processus, connu sous lenom de rafraıchissem*nt, est effectue sur chaque ligne toutes les 2 a 4 ms.Dans une memoire de 16Mbits (4096 lignes) de 50 ns de temps de cycle, lerafraıchissem*nt represente de l’ordre d’un acces ligne par microseconde, ce quiconsomme environ 5% du debit theorique de la memoire. La cellule dynamiquene necessite que deux transistors et un seul signal de colonne. Cela autorise laconstruction de memoires de plus grande capacite.

version en ligne - [PDF Document] (219)

4. Optimisations et techniques particulieres 211

Par ailleurs, les memoires dynamiques sont dotees d’un registre internede stockage de numero de ligne (adresses de poids fort), ce qui permetd’economiser la moitie des broches d’adresse sur le boıtier au prix d’un dispo-sitif externe de multiplexage (commun a tous les boıtiers).

L’acces memoire se deroule en deux temps : le numero de ligne est en-voye le premier et stocke dans un verrou interne. Le temps de decodage etl’etablissem*nt de la connexion entre la ligne selectionnee et les signaux de co-lonne est mis a profit pour transmettre la deuxieme partie de l’adresse (numerode colonne) au boıtier. Notons que dans la salve d’acces a differentes colonnesd’une meme ligne, l’etape de selection et de connexion de la ligne aux colonnespeut etre effectuee en une seule fois en debut de salve. Cette optimisation estapplicable a toute suite d’acces memoire a des adresses ne differant que par lespoids faibles, qui correspondent au numero de colonne (Cf. Paragraphe 4.3).A partir de ce principe, certaines memoires ont ete concues specialement pourla realisation de cartes video (Cf. Paragraphe 4.5).

4.3 Mode rafale

Le multiplexage ligne/colonne permet d’economiser non seulement desbroches mais aussi du temps : une fois l’acces a une ligne realise, l’acces ades colonnes dans cette ligne est rapide.

Si l’intervalle d’adresses auquelles on accede appartient a une meme ligne,on accede a la premiere adresse par l’intermediaire des poids forts, puis onaccede a chaque colonne. Si on realise N acces consecutifs a des elements ap-partenant a la meme ligne, le temps d’acces total est egal a : Temps d’accesligne + Temps d’acces colonne * N.

On parle d’acces en mode rafale. Il existe de nombreuses manieres de realiserle mode rafale ; nous n’en donnons ici que quelques principes. Par exemple,pour le mode dit quartet, la memoire est dotee d’un circuit interne qui comptemodulo quatre ; a chaque impulsion de CAS, le circuit incremente le numerode colonne modulo 4 : on accede a quatre informations consecutives. Le modedit page permet de selectionner n’importe quelle colonne dans une ligne : unepage correspond a une ligne.

Nous etudions l’acces memoire un peu plus precisem*nt en considerant deuxtypes d’interface entre la memoire et le processeur : asynchrone et synchrone.Dans les deux cas, nous nous interessons a la lecture de 4 donnees de la memeligne. Nous ne representons pas le signal de lecture/ecriture, il est echantillonneen meme temps que l’adresse de colonne par CAS.

Lorsque l’interface est asynchrone RAS joue le role de SelMem et CAS per-met la selection des colonnes auxquelles on accede dans la rafale. Consideronsles chronogrammes de la figure 9.16. Le signal RAS reste actif durant laselection des colonnes d’une ligne.

Soit R-C une adresse composee d’un numero de ligne R et d’un numero decolonne C. Soient a, b, c et d les mots d’adresses R-C1, R-C2, R-C3 et R-C4.

version en ligne - [PDF Document] (220)

212 Elements de memorisation

r c1 c2 c3 c4

r c1mode quartet

Donnee

RAS

CAS

adressemode page

adresse

a b c da

Fig. 9.16 – Chronogrammes decrivant l’acces memoire en mode rafale, pour une interfaceasynchrone

r c1

a b c da

mode quartetadresse

RAS

CAS

SelMem

Donnee

Horloge

Fig. 9.17 – Chronogrammes decrivant l’acces memoire en mode rafale, pour une interfacesynchrone

version en ligne - [PDF Document] (221)

4. Optimisations et techniques particulieres 213

mot b

mot a

V W W V

Fig. 9.18 – Schema interne d’une cellule de memoire a 2 acces simultanes

En mode page, le processeur envoie le numero de ligne (R), puis celui de lacolonne C1, celui de la colonne C2, celui de la colonne C3 et enfin celui de lacolonne C4 (C1, C2, C3 et C4 pouvant etre quelconques).

En mode quartet, le processeur envoie seulement le numero de la premierecolonne C1 apres celui de la ligne R. On accede a des emplacements consecutifset c’est le circuit memoire qui incremente en interne le numero de colonne :(C4 = C3 + 1, C3 = C2 + 1, C2 = C1 + 1).

Avec une interface synchrone (Cf. Figure 9.17), le processeur et la memoiresont synchronises sur la meme horloge. L’acces memoire se deroule un peucomme dans le mode quartet decrit precedemment a quelques differences pres :il y a un signal SelMem en plus de RAS ; tout est cadence par une horloge debus H, derivee de celle du processeur ; la longueur des rafales est definie eninitialisant un registre de commande avant utilisation.

Lors de la commande d’initialisation de la memoire, les nombres de cyclesd’horloge entre RAS et CAS et entre CAS et la stabilisation des donnees sontdefinis en fonction du temps d’acces de la memoire (qui est fixe), et de laperiode d’horloge qui peut varier avec la frequence du bus. Par exemple, a 33Mhz, la memoire sera capable de fonctionner sans cycle d’attente entre RAS,CAS et la stabilisation des donnees. A 66 Mhz, on intercalera un cycle d’attentepour avoir le meme temps d’acces.

4.4 Memoires a plusieurs acces

Le principe est d’acceder simultanement a deux (ou plus dans le cas d’accesmultiple) emplacements memoire. On a autant de decodeurs, de signaux l/e,de selection de boıtiers SelMem et de bus de donnees, que d’acces. De plus,on rajoute un comparateur pour verifier qu’il n’y a pas d’acces simultanes aumeme emplacement memoire en ecriture. Le schema interne d’une cellule d’unetelle memoire est donne figure 9.18.

Les memoires a n acces permettent de realiser des bancs de n registresutilises par exemple dans la partie operative du processeur.

version en ligne - [PDF Document] (222)

214 Elements de memorisation

4.5 La memoire video

Le processeur est connecte a de la memoire et l’ensemble proces-seur/memoire est lui-meme connecte a des peripheriques permettant le dia-logue avec le monde exterieur. L’ecran et le clavier dont dispose tout utilisateursont deux peripheriques particuliers. Nous detaillons au chapitre 16 les aspectsconnexion et synchronisation, et au chapitre 17 les problemes poses par la ges-tion de peripheriques de plus en plus elabores. Nous nous interessons ici a l’und’entre eux, posant des problemes de gestion memoire : l’ecran graphique.

L’image affichee par un ecran graphique est construite sous la forme d’unematrice a deux dimensions indiquant les points (ou pixels) de l’ecran a allumer.Chaque element de cette matrice, stocke dans une memoire appelee memoired’ecran, definit l’intensite et la couleur du pixel correspondant de l’ecran.

L’interieur du tube cathodique est recouvert d’une substance qui emet dela lumiere lorsqu’elle est frappee par un faisceau d’electrons qui balaie lasurface de l’ecran, ligne apres ligne. Le contenu de la memoire d’ecran estdonc transmis sequentiellement au dispositif qui module l’intensite du fais-ceau. L’image generee est par nature fugitive et doit etre rafraıchie (reaffichee)periodiquement, cinquante a cent fois par seconde.

La memoire d’ecran est une partie de la memoire principale a laquelle onaccede en ecriture par le processeur pour modifier l’image affichee, et en lecturepar le dispositif de rafraıchissem*nt de l’ecran. Dans certains cas, cette memoired’ecran n’est accessible qu’a un processeur specialise, le processeur graphique.

En utilisant les techniques presentees dans les paragraphes precedents, ledebit de la memoire resterait insuffisant. Il faut organiser l’acces differemment.L’idee consiste a transferer un paquet de memoire important vers leperipherique et a lui deleguer le travail consistant a calculer les pixels a affi-cher ; essentiellement, il s’agit de realiser des decalages sur les donnees fourniesau peripherique (le paquet de memoire transfere).

On appelle memoire video une memoire optimisee au niveau temps d’acces(matrice), et pourvue d’un registre interne sur lequel agit un circuit sequentielpermttant d’effectuer les decalages necessaires a l’affichage des pixels aux ins-tants fixes par les contraintes du balayage ecran.

version en ligne - [PDF Document] (223)

Chapitre 10

Circuits sequentiels

Un circuit sequentiel possede, comme un circuit combinatoire (Cf. Cha-pitre 8), un ensemble d’entrees et un ensemble de sorties. Un circuit sequentielest un circuit dont les valeurs de sortie a l’instant present dependent de lasequence des valeurs d’entree qu’il y a recues depuis l’instant initial. Il se dis-tingue ainsi d’un circuit combinatoire dans lequel les valeurs de sortie a l’ins-tant present dependent seulement des valeurs d’entree presentes a cet instant(apres le delai de stabilisation du a la traversee des portes logiques). Le circuitsequentiel possede une memoire lui permettant de stocker des informations surla succession des valeurs d’entree. Ces informations constituent l’etat courantdu circuit sequentiel a un instant donne.

Un circuit sequentiel comporte ainsi des elements de memorisation(Cf. Chapitre 9) dotes d’une fonction permettant de fixer l’etat initial. Lavaleur ecrite dans ces elements de memorisation est fonction de celle qui yetait a l’instant precedent : l’etat suivant est une fonction de l’etat courantet des valeurs d’entree. Des circuits combinatoires permettent de calculer lessorties du circuit et l’evolution de son etat.

Ce type de circuit permet de realiser un comportement qui peut etre decrita l’aide d’un automate d’etats fini (Cf. Chapitre 5) ou d’un algorithme. Onpeut parler de machine algorithmique.

Le nombre d’etats, d’entrees et de sorties du circuit a concevoir sont tresvariables suivant la complexite de l’application. Cela determine le choix de lamethode de conception. On retrouve les deux familles de solution evoquees auchapitre 8.

Dans le cas ou l’algorithme peut etre decrit de facon simple par un automated’etats fini le point de depart de la synthese est le graphe explicite de l’automated’etats fini. La methode de conception depend du type de l’automate, de labibliotheque de circuits combinatoires disponibles, et du type d’elements dememorisation utilises ; nous nous limitons ici aux bascules de type D presenteesau chapitre 9. On est proche ici de la synthese logique.

Dans le cas plus general ou la construction du graphe de l’automate corres-pondant a l’algorithme est impossible pour cause de trop grande complexite,

version en ligne - [PDF Document] (224)

216 Circuits sequentiels

la conception du circuit se fait selon des procedes differents (Cf. Chapitre 11).On est proche ici de l’algorithmique cablee. Deux grands types d’architectures(organisations materielles) des circuits sequentiels sont alors employes.

Dans l’un, la partie qui permet de stocker les variables de l’algorithmeet de realiser les calculs sur ces variables (partie operative) est separee de lapartie commandant l’enchaınement de ces operations (partie controle). Cesdeux parties sont des circuits sequentiels.

Dans l’autre type d’architecture, les aspects de controle et de calcul sontmelanges. Ce sont les valeurs des variables (les donnees) qui controlent direc-tement l’enchaınement des operations sur celles-ci. On parle d’architecture aflots de donnees (Data flow en anglais). Des architectures a flots de donneessont illustrees par des exemples dans ce chapitre. Le cas particulier des orga-nisation a pipeline est introduit.

La methode de synthese basee sur une partie controle et une partie operativeest presentee en detail au chapitre 11.

Ces methodes de conception de circuits sont aujourd’hui automatisees gracea des outils de CAO de circuits. La realisation se fait a partir des specificationsdes algorithmes dans differents langages. Le plus courant, VHDL (devenuun standard) permet de decrire des specifications de circuits sequentiels adifferents niveaux : graphes d’automates d’etats fini et algorithmes a based’instructions de types divers (iteratif, conditionnel . . .).

Nous definissons dans le paragraphe 1. la notion de circuit sequentiel enprecisant son architecture et en decrivant son comportement temporel.Dans le paragraphe 2. nous etudions en detail les methodes de realisationde circuits sequentiels a partir du graphe explicite d’un automate d’etatsfini (Cf. Chapitre 5). Nous detaillons ici deux types de synthese : cablee etmicroprogrammee. Dans le paragraphe 3. nous decrivons deux exemplesde realisations par flots de donnees de circuits sequentiels a partir d’unalgorithme. Nous donnons aussi une idee de la notion de pipeline.

1. Notion de circuit sequentiel

1.1 Caracterisation

Un circuit sequentiel memorise des informations qui lui permettent de reagira une sequence d’entrees. Les sorties a un instant donne ne dependent plusseulement des entrees presentes a cet instant, mais aussi de la sequence desentrees qu’il y a recues depuis un instant initial. Pour definir cet instant initialle circuit comporte une entree particuliere souvent appelee init.

Le changement des entrees peut etre pris en compte soit a n’importe quelmoment (celui ou l’entree change reellement), soit a des instants determineset reguliers dependant d’une entree particuliere (horloge ou clock). Dans lepremier cas on parle de circuits sequentiels asynchrones, dans le deuxieme de

version en ligne - [PDF Document] (225)

1. Notion de circuit sequentiel 217

circuits sequentiels synchrones. La conception de circuits asynchrones, beau-coup plus delicate, continue d’etre aujourd’hui utilisee pour des applicationsayant des contraintes temporelles ou de consommation critiques. Pour des rai-sons pedagogiques, nous nous limitons dans ce livre a la conception de circuitsde type synchrone.

Dans le cas synchrone, le circuit a besoin d’une entree definissant les ins-tants successifs de prise en compte des valeurs des entrees de donnees. C’est engeneral un signal regulier de periode fixe. Le circuit est synchronise sur cettehorloge : son etat evolue vers un nouvel etat sur un des fronts (montant oudescendant) de l’horloge.

Remarque : Dans la suite nous appelons entrees les entrees de donnees,les autres entrees sont designees par leur nom specifique (init et clock).

L’etat courant de l’automate est memorise a l’aide de bascules sensibles aufront (Cf. Chapitre 9) dont l’entree d’activation est l’horloge. L’etat suivantdepend de l’etat courant et des entrees presentes a l’instant courant. Les sortiesdependent soit de l’etat courant (modele de Moore), soit de l’etat courant etdes entrees presentes a l’instant courant (modele de Mealy). Les deux modelessont presentes dans le chapitre 5.

1.2 Architecture generale

La figure 10.1 decrit l’architecture generale du circuit realisant un automatedans le cas des deux modeles de Moore et de Mealy. Cette architecture peutetre decomposee en 3 blocs aux fonctionnalites distinctes :

– Un bloc de bascules permet de memoriser l’etat courant de l’automate. Ildonne ainsi en sortie la valeur de l’etat courant et prend en entree la valeurde l’etat suivant. Ces bascules sont sensibles au front de l’entree particuliereclock : le passage de l’etat courant au suivant est cadence par cette entreeclock. Les bascules peuvent etre initialisees a une valeur donnee (etat initial)grace a l’entree init.

– Un bloc permet de calculer la fonction de sortie de l’automate. Si l’automateest de Mealy les sorties dependent des entrees courantes et de l’etat courant.Si l’automate est de Moore les sorties ne dependent que de l’etat courant.

– Un bloc permet de calculer la fonction de transition de l’automate : ildonne l’etat suivant a partir de l’etat courant et des entrees courantes.

1.3 Comportement temporel

1.3.1 Echantillonnage des entrees et frequence de l’horloge

Pour que l’automate fonctionne correctement il est indispensable quel’entree des bascules soit stabilisee au moment du front d’activation du si-gnal clock. Si ce n’est pas le cas la valeur de la sortie de ces bascules estindeterminee (Cf. Chapitre 9). Deux cas peuvent se presenter :

version en ligne - [PDF Document] (226)

218 Circuits sequentiels

transitionde

transitionde

Fonctionde sortie

Fonction

Fonctionde sortie

Fonction

bas

cule

s

bas

cule

s

entrees entreessorties sorties

Etat courant Etat suivant

init clock init clock(a) (b)

Fig. 10.1 – Architecture generale d’un circuit realisant un automate d’etats fini.a) Modele de Moore ; b) modele de Mealy.

– le systeme en amont (fournissant les entrees) ne connaıt pas l’horloge, c’estle cas par exemple lorque les entrees proviennent de capteurs sur un mondeexterieur. Nous avons vu dans le chapitre 9 comment mettre en place unmecanisme simple pour obtenir un echantillonnage a partir de l’horloge.

– le systeme en amont est deja synchronise sur la meme horloge que l’auto-mate. C’est le cas par exemple de composants d’un meme ordinateur. Lesdifferents composants ont en entree la meme horloge. On verra au para-graphe 1.3.3 comment realiser la synchronisation entre deux systemes de cetype.

Calcul de l’etat suivant (Cf. Figure 10.2) Supposons ici que le front d’ac-tivation des bascules du circuit sequentiel soit le front montant de l’horloge.Soit t-etats le delai necessaire a la stabilisation des circuits combinatoires decalcul de l’etat suivant. Nous avons vu au chapitre 8 que ce delai n’est pas nul.Soit i-entrees l’instant a partir duquel les entrees sont stables.

Remarque : Le temps de stabilisation de la sortie des bascules n’est pasnul. On le neglige ici par rapport aux delais de stabilisation des circuits com-binatoires.

Pour que l’automate puisse evoluer a chaque front montant de l’horloge,il faut que le resultat du calcul du nouvel etat soit stable avant le prochainfront montant de clock. Le chronogramme de la figure 10.2-a montre cettedependance.

Etudions le cas simple pour lequel on sait echantillonner les entrees surl’horloge, c’est-a-dire ou les entrees changent toujours sur un front de l’horloge.Dans ce cas i-entrees correspond a un des deux fronts de l’horloge. On peutfaire deux choix d’echantillonnage.

version en ligne - [PDF Document] (227)

1. Notion de circuit sequentiel 219

Temps

Clock

i-entrees

t-etats t-etats

i-entrees

Clock Clock

Temps

t-etats

i-entrees(a) (b) (c)

Temps

Fig. 10.2 – Chronogrammes d’echantillonnage des entrees d’un automate. a) Temps decalcul ; b) echantillonnage sur front descendant ; c) echantillonnage sur frontmontant.

Une premiere idee est d’echantillonner les entrees sur le front descendantde clock. Le circuit arrivant dans un nouvel etat au front montant et les entreessur le front descendant, les sorties des circuits combinatoires calculant l’etatsuivant ont alors une demi-periode de l’horloge pour se stabiliser. Le chrono-gramme de la figure 10.2-b montre cette dependance : la demi-periode de clockdoit etre superieure a t-etats pour que les entrees des bascules soient stablesau front montant.

Si l’on regarde de plus pres, il s’avere que l’on peut anticiper cetechantillonnage et l’effectuer au meme front que le changement d’etat. Aumeme instant l’etat suivant est memorise et les entrees sont fournies. En effetgrace au temps de stabilisation des sorties des circuits combinatoires t-etats,l’arrivee des nouvelles valeurs des entrees n’est pas encore repercutee a l’entreedes bascules au moment du chargement du nouvel etat. La periode de clock doitetre superieure a t-etats. Pour une valeur de t-etats maximale donnee, on peutainsi doubler par rapport a la premiere solution (Figure 10.2-b) la frequencemaximale a laquelle l’automate peut evoluer (si on prend des niveaux haut etbas de l’horloge de meme duree). Le chronogramme de la figure 10.2-c montrecette evolution.

Calcul des sorties (Cf. Figure 10.3) Si la solution adoptee estl’echantillonnage des entrees sur le front d’activation des bascules, que l’onsoit dans le cas d’un automate de Moore ou de Mealy le resultat est le meme.

Soit t-sorties le delai de stabilisation des circuits combinatoires calculant lessorties. Les signaux de sorties seront stables un temps t-sorties apres le frontd’activation des bascules (Cf. Figure 10.3-a).

En revanche, dans le cas ou l’echantillonnage ne se fait pas sur le frontd’activation des bascules, les sorties d’un automate de Mealy auraient un com-portement different de celui d’un automate de Moore. Dans le cas de Moore,les sorties ne dependant que de l’etat courant, l’echantillonnage des entrees nechange en rien leur calcul.

Dans le cas du modele de Mealy, les sorties dependent des entrees et del’etat courant. Soit i-entrees l’instant a partir duquel les entrees sont stables.

version en ligne - [PDF Document] (228)

220 Circuits sequentiels

Temps

t-sorties t-sorties

ClockClock

Temps

i-entrees

(a) (b)

Fig. 10.3 – Chronogrammes des sorties d’un automate. a) Cas de Moore ; b) cas deMealy.

Les sorties sont stables un temps t-sorties apres i-entrees (Cf. Figure 10.3-b).Il apparaıt alors des valeurs transitoires sur les sorties pendant des temps nonnegligeables avant leur stabilisation. Ces valeurs transitoires peuvent provoquerdes evolutions non voulues pour un systeme aval (qui utiliserait les sorties ainsiproduites).

1.3.2 Initialisation

Nous avons vu au chapitre 9 qu’il existe deux sortes d’initialisation desbascules. L’initialisation asynchrone est effectuee des la presence de la valeurd’initialisation sur le signal correspondant. L’initialisation synchrone n’est ef-fectuee qu’au moment du front d’activation de l’horloge.

Si l’initialisation n’est pas effectuee au moment du front montant de l’hor-loge l’automate peut passer dans un etat indetermine si les circuits combi-natoires de calcul de l’etat suivant n’ont pas le temps de se stabiliser entrel’instant d’initialisation et le prochain front montant de l’horloge. La solutionsynchrone est donc utilisee de preference.

1.3.3 Synchronisation de deux realisations

On a souvent besoin de realiser deux automates 1 et 2, les sorties de l’au-tomate 1 etant connectees aux les entrees de l’automate 2. Pour les raisonsevoquees precedemment les horloges de ces deux automates ne peuvent pasetre independantes. Supposons que le front d’activation de l’automate 1 soitle front montant et que ses entrees soient echantillonnees sur le front montantde son horloge clock1 (Cf. Figure 10.4). Supposons que le front d’activation del’automate 2 soit aussi le front montant. Le temps de calcul de ses sorties n’estpas negligeable : elles sont stables un temps t-sorties1 apres le front d’activationde l’horloge clock1. Le front montant de l’horloge de l’automate 2 doit avoirlieu apres que ses entrees (les sorties de l’automate 1) sont devenues stables etque le calcul de son etat suivant s’est stabilise (t-etats2).

Une premiere idee consiste a penser que les fronts d’activation des deuxhorloges doivent etre decales du temps de stabilisation necessaire.

version en ligne - [PDF Document] (229)

1. Notion de circuit sequentiel 221

Clock1

Clock2

t-etats1

t-sorties1

t-etats2

Fig. 10.4 – Chronogrammes de synchronisation de deux automates

Une facon simple pour realiser ce decalage est de prendre pour clock2 lecomplement de clock1. Le decalage est alors d’une demi-periode. Pour que lesentrees des bascules des deux automates soient toujours stables au moment dufront d’activation, la periode minimale P de l’horloge doit alors verifier :

– P/2 > t-sorties1 + t-etats2 pour que l’etat de l’automate 2 soit stable aumoment du front montant de clock2.

– P > t-etats1 pour que l’etat de l’automate 1 soit stable au moment du frontmontant de clock1.

Dans ce cas le decalage de l’evolution de l’etat des deux automates estd’une demi-periode de l’horloge.

Il s’avere que l’on peut aussi prendre clock1 egale a clock2. Les entrees desbascules restent stables si l’on respecte les conditions suivantes sur la periodeP de l’horloge :

– P > t-sorties1 + t-etats2 pour que l’etat de l’automate 2 soit stable aumoment du front montant de clock.

– P > t-etats1 pour que l’etat de l’automate 1 soit stable au moment du frontmontant de clock.

Automates en boucle Le cas particulier ou les sorties de l’automate 2 sontles entrees de l’automate 1 est interessant a etudier. Ce cas de figure se presentesouvent et apparaıt en particulier dans la realisation d’algorithmes complexesetudies au chapitre 11.

Dans le cas ou les deux automates sont de type Mealy, nous obtenons laconfiguration de la figure 10.5. Cette architecture peut ne pas arriver dansun etat stable puisque les entrees des blocs combinatoires C1 et C2 sont dessorties de ces memes blocs.

Il faut donc que l’un des deux automates soit de type Moore. Pour simplifier

version en ligne - [PDF Document] (230)

222 Circuits sequentiels

transitiondetransition

de

C1 C2

bas

cule

s

clockinit

sorties2

Fonction

bas

cule

s

clockinit

Fonction

entrees1sorties1 entrees2

Fonctionde sortie

Fonctionde sortie

Fig. 10.5 – Cas de deux automates de Mealy en boucle

Clock

t-sorties1

t-sorties2 t-etats1

t-etats2

Fig. 10.6 – Chronogramme decrivant la synchronisation de deux automates en boucle

supposons que les deux soient de type Moore. Les deux automates peuvent alorsevoluer a l’aide de la meme horloge clock (chronogramme de la figure 10.6).

Nous obtenons alors les conditions suivantes sur la periode P de l’horloge :

– P > t-sorties1 + t-etats2 pour que l’etat de l’automate 2 soit stable aumoment du front montant de clock.

– P > t-sorties2 + t-etats1 pour que l’etat de l’automate 1 soit stable aumoment du front montant de clock.

2. Synthese des automates decrits par leur

graphe

Le point de depart de cette synthese est le graphe explicite d’un automated’etats fini. Nous nous limitons ici aux automates de type :

– synchrone (Cf. Chapitre 6) : les instants de changement des entrees sont

version en ligne - [PDF Document] (231)

2. Synthese des automates decrits par leur graphe 223

connus et synchronises avec l’evolution de l’automate, le signal d’horlogepermettant d’effectuer cette synchronisation. L’utilisation de ce type d’au-tomate est largement repandue. La synthese en est plus simple et donc d’uninteret pedagogique important.

– reactif et deterministe (Cf. Chapitre 5) : d’un point de vue materiel, il estobligatoire que le circuit resultant evolue toujours en fonction de ses entreesvers un nouvel etat determine et unique.

En ce qui concerne le choix du type de l’automate Moore ou Mealy, il n’y apas de regle precise. On peut toujours decrire un automate de Moore equivalenta un automate de Mealy (Cf. Paragraphe 1.1.4, Chapitre 5). Suivant le systemea specifier une des deux formes peut etre plus complexe que l’autre en nombred’etats et de transitions. Cependant pour des raisons de comportement tem-porel dans le cas de synchronisation d’automates (Cf. Paragraphe 1.3), le typeMoore est en general plus utilise.

Nous detaillons dans ce paragraphe la synthese de deux types d’architec-ture. La premiere est dite cablee car la realisation des fonctions de sortieset de transition est faite a l’aide de circuits combinatoires. On va cabler lesportes logiques correspondantes. La realisation de ces fonctions booleennes esteffectuee suivant les techniques de synthese de circuits combinatoires etudieesau chapitre 8.

Nous donnons ensuite les principes de realisation d’un deuxieme type d’ar-chitecture dite microprogrammee. Dans ce type de synthese les fonctions desortie et de transition sont en grande partie realisees a l’aide d’une memoiremorte (rom). Ce type de realisation s’inspire des principes de programmationen langage d’assemblage (Cf. Chapitre 12).

2.1 Realisation cablee

Les differentes etapes de ce type de synthese sont expliquees et illustreessur un exemple simple.

2.1.1 Un exemple : une commande de feu tricolore

On veut realiser une commande d’un feu tricolore a plaque. Les informationsd’entrees sont : voiture-presente (vp), voiture-absente (va). La sortie est lacouleur du feu : Vert (V), Orange(O) ou Rouge (R).

Le comportement du systeme est le suivant (automate de Moore de lafigure 10.7). Au depart le feu est rouge. Si le feu est rouge : si une voiture estpresente, le feu passe au vert sinon le feu reste rouge. Si le feu est orange lefeu passe au rouge. Si le feu est vert : si une voiture est presente, le feu resteau vert ; si une voiture est absente deux fois de suite, le feu passe au orange.

Remarque : Le terme deux fois de suite implique que le temps est decoupeen intervalles reguliers. Nous retrouvons ici les entrees d’un automate syn-

version en ligne - [PDF Document] (232)

224 Circuits sequentiels

va

vp

vp

va

UnR

O

V

VDeuxQuatre

Trois

vpva

vp

va

Fig. 10.7 – Automate decrivant un systeme de commande de feu tricolore

(a)

Vocabulaire e

va 0

vp 1 (b)

Vocabulaire s1 s2

R 0 0

O 0 1

V 1 0 (c)

Etat q1 q2

Un 0 0

Deux 0 1

Trois 1 0

Quatre 1 1

Fig. 10.8 – Codage des entrees, des sorties et des etats du systeme de commande de feutricolore.

chrone echantillonnees sur une horloge qui decoupe le temps de facon reguliere.deux fois de suite signifie alors pendant deux periodes d’horloge successives.

2.1.2 Choix de l’element de memorisation

Pour pouvoir memoriser l’etat courant de l’automate nous avons a notredisposition les elements de memorisation elementaires presentes au chapitre 9.Nous ne pouvons pas utiliser de verrous puisque la valeur de l’etat suivantdepend de l’etat courant. Nous utilisons donc des bascules de type D sensiblesau front. Elles comportent un signal d’activation qui force le changement d’etatet un signal d’initialisation (soit a 1, soit a 0 suivant le codage de l’etat initial).Ce signal d’initialisation est de type synchrone.

2.1.3 Codage des entrees et des sorties

Les elements des vocabulaires d’entree et de sortie sont codes en binaire. Lescodes inutilises dans ce codage correspondent a des cas de valeur phi-booleennedans les fonctions de transition et de sortie.

Reprenons l’exemple. Le vocabulaire d’entree {va, vp} est code a l’aided’une variable booleenne e (Figure 10.8-a). Le vocabulaire de sortie {R, O, V}est code a l’aide de deux variables booleennes s1 et s2 (Figure 10.8-b). Le codes1 = s2 = 1 ne correspond a aucune sortie.

version en ligne - [PDF Document] (233)

2. Synthese des automates decrits par leur graphe 225

2.1.4 Codage des etats

L’etat etant memorise dans des bascules, une bascule stockant une infor-mation binaire, les differentes valeurs de l’etat doivent etre codees en binaire.Les variables booleennes correspondant a ce codage sont appelees variablesd’etats. Differents types de codage peuvent etre utilises (Cf. Chapitre 3). Soitn le nombre d’etats, le nombre minimum de bits permettant de realiser le co-dage est log2(n). Un tel codage est appele compact . Il permet une realisationavec un nombre minimum de points de memorisation. Un autre type de co-dage souvent utilise est le codage un parmi n. Ce type de codage entraıneun nombre maximum de points de memorisation mais l’elaboration du circuitrealisant l’automate peut se faire d’une maniere specifique que nous precisonsdans le paragraphe 2.1.6.

L’automate de la figure 10.7 comporte 4 etats. La figure 10.8-c donne unexemple de codage compact des etats de cet automate a l’aide de deux variablesd’etats q1, q2.

Le choix du code q1 = 0, q2 = 0 pour l’etat initial implique que l’initialisa-tion des bascules a l’aide du signal init est une initialisation a zero.

On peut choisir un autre code pour l’etat initial. Dans ce cas les basculesdoivent comporter les deux types d’initialisation (a 0 et a 1).

Il est a noter que les fonctions booleennes de sortie et de transitiondependent de ces codages et que le choix du codage influence fortement lescaracteristiques du circuit (par exemple sa complexite en nombre de portes)et donc ses performances. Les outils de CAO realisant cette synthese prennenten compte ces criteres lors du choix de ces codes.

2.1.5 Expression algebrique des fonctions de transition et de sortie

L’architecture generale du circuit (pour un automate de Moore) est donneedans la figure 10.9. Soient (d1, d2, . . . dn) les variables codant l’etat suivant,(q1, q2, . . . qn) les variables codant l’etat a l’instant courant, (s1, s2, . . . sm) lesvariables codant les sorties et (e1, e2, . . . et) les variables codant les entrees.

– Le bloc memorisant l’etat courant de l’automate est compose de n basculesD sensibles au front de l’horloge clock. Chacune a sur son entree D un signaldi et sa sortie Q donne un signal qi.

– Le circuit combinatoire calculant la fonction de sortie realise les fonc-tions booleennes definissant la valeur des si. Dans le cas d’un automatede Moore, si est une fonction booleenne des variables de l’etat courant :si = fi(q1, q2, . . . qn). Dans le cas d’un automate de Mealy nous avons :si = fi(q1, q2, . . . qn, e1, e2, . . . et).

– Le circuit combinatoire calculant l’etat suivant realise les fonctionsbooleennes : di = gi(q1, q2, . . . qn, e1, e2, . . . et).

La fonction de transition de l’automate de la figure 10.7 peut etre decritesous forme de table. En utilisant les codes choisis precedemment, cette table

version en ligne - [PDF Document] (234)

226 Circuits sequentiels

init clock

...

Q Dn n

t

e1...et Circuit combinatoire calculant l’etat suivant

q1...qn

d1...dn

Memorisation de l’etat courant

s1...sm

m

Circuit combinatoire calculant les sorties

Fig. 10.9 – La structure d’un circuit realisant un automate de facon cablee

donne les valeurs des variables codant l’etat suivant (d1, d2) en fonction desvariables codant l’etat courant (q1, q2) et de l’entree (e). Ce tableau corresponda la table de verite des deux fonctions booleennes d1, d2. La figure 10.10 donneces tables ainsi que celles correspondant aux sorties. La figure 10.11 decrit lecircuit resultant realise a base de portes NAND et d’inverseurs.

2.1.6 Cas particulier du codage des etats un parmi n

Ce codage consiste a coder n etats sur n bits en representant chaque etat parun bit ; le code d’un etat comporte alors un seul bit (parmi n) a 1. On peutproceder de la meme facon que precedemment. Les fonctions de l’automatecomportent alors beaucoup de phi-booleens puisqu’il y a un nombre importantde codes inutilises pour les etats.

Toutefois on peut obtenir plus simplement une solution equivalente (etsimplifiee) du circuit en se calquant directement sur le graphe de l’automate.La figure 10.13 montre la realisation du circuit de commande de feu tricolore.Par exemple, la bascule 1, codant l’etat 1, est chargee avec la valeur 1 si l’etatcourant est 1 et l’entree e ou si l’etat courant est 4. De facon plus generale,pour realiser le circuit on applique les regles suivantes :

version en ligne - [PDF Document] (235)

2. Synthese des automates decrits par leur graphe 227

entree etat courant etat suivant

va Un Unvp Un Deuxva Deux Troisvp Deux Deuxva Trois Quatrevp Trois Deuxva Quatre Unvp Quatre Un

e q1 q2 d1 d2

0 0 0 0 0

1 0 0 0 1

0 0 1 1 0

1 0 1 0 1

0 1 0 1 1

1 1 0 0 1

0 1 1 0 0

1 1 1 0 0

etat sortie

Un RDeux VTrois V

Quatre O

q1 q2 s1 s2

0 0 0 0

0 1 1 0

1 0 1 0

1 1 0 1

Fig. 10.10 – Tables de definition des fonctions de transition et de sortie de l’automatede commande de feu tricolore

QD

D Q

e

s1

s2

clock init

q2

q1

d1

d2

Fonctions de sortie

Fonctions de transition

Fig. 10.11 – Synthese de l’automate de la figure 10.7 a base de portes NAND etde bascules D. Les expressions booleennes correspondantes sont : d1 =q1.q2.e + q1.q2.e et d2 = q1.e + q1.q2 ; s1 = q1.q2 + q1.q2 et s2 = q1.q2.

version en ligne - [PDF Document] (236)

228 Circuits sequentiels

Etat q1 q2 q3 q4

Un 1 0 0 0

Deux 0 1 0 0

Trois 0 0 1 0

Quatre 0 0 0 1

Fig. 10.12 – Codage 1 parmi n des etats du systeme de commande de feu tricolore

– On associe a chaque etat un point de memorisation (bascule D a front).

– Un arc sortant de l’etat X portant l’entree E est realise par une porte ETdont les entrees sont la sortie de la bascule correspondant a l’etat X etl’entree E. Si un arc sort de l’etat X pour toute entree du vocabulaire, cetteporte E est inutile (comme l’arc de l’etat 4 a l’etat 1 dans l’exemple).

– Pour un ensemble d’arcs entrants dans un etat Y les differentes sorties desportes ET correspondantes sont mises en entree d’une porte OU dont lasortie est reliee a l’entree de la bascule correspondant a l’etat Y. Dans lecas ou il n’y a qu’un seul arc entrant dans un etat, cette porte OU estinutile (comme a l’entree de l’etat 3 ou 4).

– On realise chaque sortie par une porte OU qui a comme entrees les sortiesdes bascules correspondant aux etats ou la sortie vaut 1.

– L’initialisation s’effectue en initialisant a 1 la bascule correspondant a l’etatinitial et a 0 les autres bascules.

– Au cas par cas une combinaison de portes ET-OU peut etre remplacee parune combinaison NAND-NAND.

Pour l’exemple du feu tricolore, nous choisissons de coder l’etat a l’aide des4 variables q1, q2, q3, q4 (Figure 10.12). Le codage des entrees et des sortiesreste inchange. La figure 10.13 montre l’automate et le circuit resultant. Surla figure la commande d’initalisation n’est pas representee : la commande initinitalise la bascule de numero 1 a 1 et les autres a 0.

2.2 Realisation microprogrammee

Dans ce type de synthese les fonctions de transition et de sortie sontrealisees a l’aide d’une memoire de type ROM. Chaque adresse de cettememoire est le code d’un etat de l’automate.

On parle de microprogrammation car on peut utiliser un langage de des-cription textuel du contenu de la ROM comme on le ferait avec le langaged’assemblage pour du langage machine. Chaque ligne de la memoire corres-pond a une micro-instruction du microprogramme.

Ce type de synthese a beaucoup ete utilise pour la realisation de gros auto-mates demandant une mise au point importante. Elle permet en effet de mo-difier l’automate par simple reprogrammation d’une eprom (Cf. Chapitre 9).

version en ligne - [PDF Document] (237)

2. Synthese des automates decrits par leur graphe 229

� ��

� �� �

��

��

� �

� � � ��

� ��

��

��

� �� �

� �� �

2

1

3

4s2

1

s1

e

2

3

4

e

s1

s1

s2

e

e

ee

e

QD

Fig. 10.13 – Un circuit realisant un automate avec un codage un parmi n des etats

Elle a ete en particulier employee pour la conception de la partie controle decertains processeurs cisc comme le 68000. En effet, la partie controle d’un telprocesseur est un automate de plusieurs centaines d’etats et de sorties. Elleest aussi utilisee dans des circuits de type automate programmable.

2.2.1 Architecture generale d’une realisation microprogrammee

Cette technique s’applique a la synthese d’automates de type Moore. L’ar-chitecture generale du circuit est donnee dans la figure 10.14.

Contraintes sur l’automate Pour des raisons liees a l’architecture uti-lisee, des transformations preliminaires de l’automate peuvent etre necessaires :chaque etat doit posseder au plus deux successeurs. On a vu au paragraphe 2.4du chapitre 5 comment effectuer une telle transformation. Il est a remarquerque l’ajout d’etats supplementaires, s’il ne change pas le comportement del’automate d’un point de vue fonctionnel, change son comportement temporel.

Les codes des etats sont choisis de facon a ce que :

– quand un etat x ne possede qu’un etat successeur, le code de celui-ci estsoit le code de x plus 1, soit un autre code choisi afin de limiter le nombrede codes.

– quand un etat x possede 2 successeurs, le code de l’un des 2 est le code de xplus 1. L’autre est choisi de maniere a minimiser le nombre de codes. Il se

version en ligne - [PDF Document] (238)

230 Circuits sequentiels

+1

Bas

cule

sROM

entrees

clock init

cond [q] (types de condition)

succ [q]

q

sorties[q]

Fonction f decalcul de condition

q + 1

etat

-suiv

ant

Fig. 10.14 – Architecture d’une realisation microprogrammee d’un automate

peut que cela ne soit pas possible, on ajoute alors un etat supplementaireafin d’obtenir cette configuration.

Calcul de l’etat suivant Le code de l’etat courant est memorise dans desbascules et fournit une adresse de la memoire.

Les primitives de calcul de l’etat suivant sont de deux types : uneincrementation (circuit +1 sur la figure 10.14) ; la donnee dans la memoiredu code de l’etat suivant, l’acces a ce code se faisant a l’aide du code de l’etatcourant (adresse d’une ligne de la memoire).

Le fait que chaque etat ait au maximum deux etats successeurs permet delimiter la largeur de la memoire. Quand le code de l’etat suivant n’est pas lecode de l’etat courant plus 1, son code se trouve dans la memoire.

Par ailleurs, il faut pouvoir specifier quelle est la condition permettant dechoisir l’etat successeur (dependant des entrees de l’automate) quand il y ena deux. Cette condition est aussi specifiee dans la memoire et correspond acertaines sorties de celle-ci. On parle de champ condition.

Soit q le code d’un etat, soit succ[q] le code de l’etat successeur (qui n’estpas q + 1) contenu dans la memoire, soit cond[q] la condition a tester pourchoisir l’etat successeur suivant les entrees de l’automate. L’architecture mi-croprogrammee comporte les circuits permettant de definir le code de l’etatsuivant comme suit :

etat-suivant(q)= si f (cond[q], entrees) alors succ[q] sinon q+1.Les codes sont choisis de facon a ce que :– quand un etat de code q ne possede qu’un etat successeur, cond [q] specifie

soit la condition toujours vraie et etat-suivant(q) = succ[q], soit toujours

version en ligne - [PDF Document] (239)

2. Synthese des automates decrits par leur graphe 231

fausse et etat-suivant(q) = q + 1, quelles que soient les entrees de l’automate.

– quand un etat q possede 2 successeurs, pour traiter les conditions d’entreesse trouvant sur les transitions de l’automate, un circuit combinatoire delivrela valeur de la fonction booleenne f calculant la condition a tester specifieedans la memoire cond[q] a partir des entrees de l’automate. La selectionselon cette condition entre la sortie de l’incrementeur et de la memoirepourra se faire naturellement a partir d’un multiplexeur 2 voies vers 1.

Le calcul de l’etat suivant est donc realise a l’aide d’une partie de lamemoire, d’un incrementeur et d’autres circuits combinatoires pour le calculde la condition (en gris sur la figure 10.14).

Calcul des sorties Apres avoir procede comme precedemment au codagedes sorties, pour chaque etat, la valeur de chaque sortie est memorisee une foispour toute dans la ligne de la memoire correspondant a l’etat (note sorties[q]sur la figure 10.14).

Optimisations On a limite ici le nombre d’etats successeurs a 2 pour ne pasaugmenter la largeur de la memoire. Des techniques ont ete developpees pourdefinir plusieurs etats dans la memoire sans trop en augmenter la largeur. Ellesconsistent par exemple a ne donner dans la memoire que les bits qui changentpour les adresses successives a partir d’une adresse de base. Ainsi par exemple 2bits supplementaires peuvent suffire pour resoudre les cas ou un etat possede 4successeurs. D’autres techniques sont aussi souvent employees pour minimiserla largeur de la memoire dependant des sorties. Par exemple, on peut utiliserle champ contenant l’etat successeur pour certaines sorties quand celui-ci n’estpas necessaire.

On peut aussi remarquer que dans le cas tres particulier de l’exemple dela commande de feu tricolore, repris ci-dessous, la colonne la plus a gauchepourrait etre supprimee puisqu’elle ne comporte que des 0.

Microprogrammation Pour specifier le contenu de la memoire et permettreune mise au point aisee, les concepteurs definissent un langage particulierdont la syntaxe ressemble a celle d’un langage d’assemblage (Cf. Chapitre 12).Chaque ligne de la ROM est une micro-instruction du microprogramme. Onretrouve ainsi des micro-instructions de branchement conditionnel pour lescas ou un etat possede deux successeurs. Les micro-instructions permettentaussi de specifier des valeurs specifiques pour les sorties. Elles peuvent alorsfaire reference, au niveau de la syntaxe, a des entites exterieures a l’automate,comme par exemple des registres ou une UAL dans le cas d’une partie controled’un processeur (Cf. Chapitres 11 et 14).

version en ligne - [PDF Document] (240)

232 Circuits sequentiels

10

0 0

0 1

0 1

0 0

c01

D

D Q

Q

2

φ

e

+1

1

1

0 0

1 0

1 0

0 1

s1 s2

Fig. 10.15 – Architecture d’une realisation microprogrammee de l’exemple du feu trico-lore

et1 : bne et1et2 : be et2, s1

be et2, s1ba et1, s2

etat code succ etat + 1 cond code

1 00 00 01 e 02 01 01 10 e 13 10 01 11 e 14 11 00 00 - -

Fig. 10.16 – Microprogramme de l’exemple du feu tricolore

2.2.2 Exemple de la commande de feu tricolore

Chaque etat possede au plus deux etats successeurs. Le codage compactchoisi precedemment verifie la condition sur le code des etats successeurs (q+1ou succ[q]). Les differentes conditions a tester sont : e dans l’etat Un ; e dansles etats Deux et Trois ; VRAI dans l’etat Quatre.

En utilisant un incrementeur modulo 4 cette derniere condition est inutile.Un seul bit c suffit donc pour specifier dans la ROM quelle est la condition atester. Nous choisissons c = 1 pour la condition e et c = 0 pour la condition e.

Pour les sorties, on choisit le meme codage que precedemment. La ROMpossede 4 lignes. Deux bits de la ROM sont donc utilises pour les sorties, unpour le calcul de la condition, deux pour le codage de l’etat suivant. La fonctionf permettant de calculer la condition determinant le choix de l’etat suivant estrealisee a l’aide d’un multiplexeur 2 voies vers 1 (Cf. Figure 10.15).

L’initialisation se fait a l’aide du signal init qui initialise les bascules a 0puisque le code de l’etat initial est 00.

Le contenu de la memoire dans le cas du feu tricolore pourrait etre decritpar le microprogramme suivant de la figure 10.16.

ba et1 est une micro-instruction de branchement inconditionnel a uneetiquette et1. bne et be sont les micro-instructions de branchement sur lesconditions e et e. Seules les sorties a 1 dans un etat sont specifiees dans lamicro-instruction correspondante.

version en ligne - [PDF Document] (241)

3. Synthese des circuits sequentiels par flots de donnees 233

2.3 Un exemple detaille : la machine a cafe

Nous reprenons l’exemple de la machine a cafe presente dans le chapitre 5.La figure 10.17 rappelle son graphe de Moore. Nous etudions le codage desentrees/sorties du controleur et la synthese d’un circuit sequentiel d’apres lamachine sequentielle qui decrit son comportement.

Exemple E10.1 : Machine a cafe (suite de E5.2, p 105 et E6.3, p 133)Nous supposons ici que les entrees s1, s2 et s5 venant des capteurs et quel’entree fs venant de la machine a cafe sont synchronisees sur le front d’unehorloge clock. Nous allons etudier comment elaborer une realisation cablee decet automate.

Le vocabulaire d’entree de l’automate est {rien, s1, s2, s5, fs}. rien signifie :toutes les autres entrees sont fausses. Les combinaisons sur les 4 entrees s1,s2 , s5 et fs n’etant pas toutes possibles, 3 bits suffisent pour les coder. Lescodages choisis sont donnes dans la figure 10.18. Les 3 codes sur e1, e2, e3 nonutilises correspondent a des cas qui ne peuvent survenir.

D’autre part, vues les specifications de l’automate, certaines de ces combi-naisons ne peuvent pas survenir dans certains etats. Ainsi on ne peut avoir nis1, ni s2, ni s5 dans les etats 2F recu et Trop percu. On ne peut avoir fs dansles autres etats. La fonction de transition est phi-booleenne.

Nous procedons de meme pour les sorties. Le vocabulaire de sorties del’automate etant { CB, RCB, AUCUNE}, trois cas sont possibles. Les sortiessont codees sur 2 bits (Cf. Figure 10.18).

Il y a 4 etats que nous codons sur deux bits q1 et q2 (Cf. Figure 10.18).L’etat est memorise dans des bascules D sensibles au front montant de

l’horloge clock. La figure 10.19 donne la table de verite des deux fonctions detransition d1 et d2. La derniere ligne resume tous les autres cas pour lesquelsles deux fonctions sont a φ.

Si l’on effectue une minimisation de la forme polynomiale (Cf. Chapitre 2),on obtient les expressions : d1 = e2.q1.q2+e1.e2.q1+e3 et d2 = e1.q2+e1.e2.q2+e3.Pour les sorties on trouve : sortie1 = q1.q2 et sortie2 = q1.

De ces equations on peut aisem*nt deduire la realisation de cet automateen utilisant 2 bascules D et des portes ou un PLA (Cf. Chapitre 8).

3. Synthese des circuits sequentiels par flots

de donnees

Dans le cas ou la specification du systeme a realiser est donnee sous formed’algorithme manipulant des variables, la modelisation sous forme de graphed’etats fini devient rapidement impossible. En effet le nombre d’etats peutdevenir tres grand. Il est proportionnel au nombre de valeurs possibles desvariables de l’algorithme.

version en ligne - [PDF Document] (242)

234 Circuits sequentiels

fsfs

s1s1

s2

s2

Troppercu

AttentePieces

2F recus

1F recu

s5

C,B

rien

rien

s5

R,C,B

AUCUNE

AUCUNE

rien rien

Fig. 10.17 – Graphe de Moore de l’automate de la machine a cafe

s1 s2 s5 fs e1 e2 e3

0 0 0 0 0 0 0

1 0 0 0 1 0 0

0 1 0 0 0 1 0

0 0 1 0 1 1 0

0 0 0 1 0 0 1

Vocabulaire de sorties sortie1 sortie2

AUCUNE 0 0

R,C,B 1 1

C,B 0 1

Etats q1 q2

Attentes Pieces 1 1

1F recu 1 0

2F recu 0 1

Trop percu 0 0

Fig. 10.18 – Codage des entrees, des sorties et des etats pour la synthese de l’automatede controle de la machine a cafe

e1 e2 e3 q1 q2 d1 d2

0 0 0 0 0 0 0

0 0 1 0 0 1 1

0 0 0 0 1 0 1

0 0 1 0 1 1 1

0 0 0 1 0 1 0

1 0 0 1 0 0 1

1 1 0 1 0 0 0

e1 e2 e3 q1 q2 d1 d2

0 1 0 1 0 0 0

0 0 0 1 1 1 1

1 1 0 1 1 0 0

1 0 0 1 1 1 0

0 1 0 1 1 0 1

- - - - - φ φ

Fig. 10.19 – Tables de verite des fonctions de transition de l’automate de controle de lamachine a cafe

version en ligne - [PDF Document] (243)

3. Synthese des circuits sequentiels par flots de donnees 235

Par exemple l’algorithme : u ←− 0 ; tant que vrai : u= (u+1) mod 2n avec urepresente sur n bits peut etre modelise par un automate d’etats fini dont legraphe comporterait 2n etats.

Une methode systematique permet de realiser le circuit sans passer par ladefinition de son graphe d’etats. L’etat du circuit sequentiel est defini par lavaleur des variables apparaissant dans l’algorithme. Un registre est alors utilisepour chacune de ces variables. Chaque calcul apparaissant dans l’algorithme estrealise par les composants combinatoires necessaires. L’enchaınement des cal-culs se fait au gre du flot des donnees a travers ces composants. Ainsi l’exempleci-dessus se realise evidemment avec un incrementeur n bits et un registre nbits.

Dans la suite de ce paragraphe, nous illustrons cette methode sur deuxexemples. Puis nous donnons une idee de la notion de pipeline.

3.1 Circuit flot de donnees a une seule variable :la suite de Syracuse

Nous nous interessons ici a l’etude d’un circuit qui delivre successivementles entiers composant une suite particuliere (dite de Syracuse) definie par :si UN est pair alors UN+1 = UN DIV 2 sinon UN+1 = 3 * UN+1, ou DIV denotela division entiere. On peut decrire le calcul de cette suite par l’algorithme :

LexiqueU0 : l’entier > 0 donne ; U : un entier > 0

AlgorithmeU ←− U0tantque vrai :

si U MODULO 2 = 0alors U ←− U DIV 2sinon U ←− 3 * U + 1

Cette suite a la particularite de converger vers les trois valeurs 4, 2, 1 pourcertaines valeurs de U0. Prenons comme hypothese que U est borne quelleque soit la valeur de U0. Nous pouvons alors decrire cet algorithme a l’aided’un automate d’etats fini, mais cela serait fastidieux, l’automate comportantautant d’etats que de valeurs possibles de U .

La figure 10.20 donne l’architecture d’un circuit flot de donnees realisantcet algorithme.

Comme dans la synthese cablee, l’etat est memorise dans un ensemble debascules qui contiennent la valeur de U . La boucle principale est realisee autourde ce registre puisque U change de valeur a chaque iteration. Une iterationest effectuee pendant une periode de l’horloge clock activant les bascules duregistre. Nous sommes obliges de fixer une borne superieure a U , en fixant lenombre de bascules de ce registre a n. Un circuit combinatoire calcule la valeursuivante U ′ de U .

version en ligne - [PDF Document] (244)

236 Circuits sequentiels

10

3 ∗ x + 1n

1U0

U ′

U0

QD1

x DIV 2

clockinit U

Fig. 10.20 – Calcul de la suite de Syracuse par un circuit a flot de donnees

L’action si . . .alors . . .sinon . . . est realisee en effectuant en parallele les cal-culs : U DIV 2 et 3 * U + 1, puis en selectionnant un des deux resultats a l’aided’un multiplexeur. L’evaluation de l’expression de la condition ne demande pasde calcul puisqu’elle correspond au bit de poids faible de U (U0).

Le composant calculant x DIV 2 est realise par un decalage vers les poidsfaibles avec introduction d’un 0. Le composant calculant 3 * x + 1 peut serealiser a l’aide d’un additionneur en observant que 3 * x + 1 = 2 * x + x + 1,2 * x se realisant a l’aide d’un decalage vers les poids forts avec introductiond’un 0. L’operation d’incrementation + 1 peut s’effectuer en forcant la retenueentrante de l’additionneur a 1.

L’initialisation de U a U0 peut se faire a l’aide d’un multiplexeurselectionnant l’entree du registre memorisant U , la valeur de U0 ou de U ′.Si l’entree init est a 1 le circuit initialise U par U0, sinon il donne a U saprochaine valeur U ′.

La figure 10.21 donne l’architecture de ce circuit sous forme de tranches de0 a n-1. Toutes les tranches sont identiques, sauf les tranches 0 et n-1. Chaquetranche implemente l’algorithme sur 1 bit et contient une bascule memorisantle ieme bit de U . On retrouve les multiplexeurs de l’initialisation (en haut) et del’action si alors sinon en bas. La division et multiplication par 2 se retrouventdans le decalage des indices sur l’entree de l’additionneur et du multiplexeurdu bas.

3.2 Circuit flot de donnees a plusieurs variables :la racine carree

L’algorithme de la figure 10.22 calcule la partie entiere de la racine carreede l’entier naturel x.

La premiere boucle de l’algorithme qui consiste a calculer la valeur de laplus petite puissance de 4 superieure a x peut se faire a l’aide d’un circuitcombinatoire. Le lecteur pourra s’interesser au probleme a titre d’exercice surles circuits combinatoires.

version en ligne - [PDF Document] (245)

3. Synthese des circuits sequentiels par flots de donnees 237

D

Q

Add

D

Q

Add

D

Q

Add

U00U0i

c1

Qi+1 Q1

Q0

tranche 0tranche i

U0n−1

ci+1 ci

Q0Qi

Qi

Qn−2

cn−1

Qn−10

1

clock

init

Qi−1

tranche n-1

Fig. 10.21 – Architecture en tranche pour le calcul de la suite de Syracuse par un circuita flot de donnees

Lexiquex : l’entier ≥ 0 donneu, z, y, resultat : des entiers ≥ 0

Algorithmeu ←− 1tantque u ≤ x : u ←− 4* uz ←− u ; y ←− xtantque u > 1 :

u ←− u DIV 4z ←− z DIV 2 - usi z ≤ y :

y ←− y - zz ←− z + 2 * u

resultat ←− z DIV 2

Fig. 10.22 – Algorithme de calcul de la racine carree [BB83]

version en ligne - [PDF Document] (246)

238 Circuits sequentiels

plus

moins

moins

u div 4

y-z

si z ≤ y

z + 2*u

1

Z Y

test

test

z div 2 - u

div4

div2

mult2

U

tant que u > 1

resultat

Fig. 10.23 – Calcul de la racine carree par un circuit a flot de donnees

Nous nous interessons ici a la deuxieme boucle de l’algorithme. Le circuitd’ensemble est donne figure 10.23.

Les variables internes u, z et y modifiees dans cette boucle constituentl’etat de l’automate. Elles sont memorisees dans trois registres U , Z, et Y . Laboucle correspond a la fonction de transition de l’automate. Un passage dansla boucle correspond a une transition de l’automate, donc a une periode del’horloge activant les registres. Par exemple la fonction de transition, restreintea la partie U de l’etat, est NouvU = si (U − 1 = 0) alors U sinon U DIV 4,ou NouvU denote le nouvel etat.

On ne s’interesse pas ici au dialogue du circuit avec un hypothetique mondeexterieur. Le resultat est present tout au long du deroulement de l’algorithmemais il n’est valide que lorsque U ≤ 1. La progression s’arrete quand U arrive ala valeur 1. Comme un automate ne s’arrete pas, on reproduit ce comportementen ne faisant plus changer les valeurs de U .

La boucle tant que U > 1 est realisee a l’aide des 3 multiplexeurs du bas dela figure 10.23, chaque multiplexeur decidant du changement des variables U ,Zet Y . Le predicat (U > 1) a besoin d’etre calcule. Pour cela on peut faire unesoustraction de 1 a U . On peut aussi, plus simplement, fabriquer le booleenU > 1 a l’aide d’une simple porte OU sur les tous les bits de U sauf le premier(composant test1 sur la figure 10.23).

Chaque calcul apparaissant dans la boucle est realise a l’aide d’un ou plu-sieurs composants apparaissant dans un etage de la figure 10.23. Le calcul de

version en ligne - [PDF Document] (247)

3. Synthese des circuits sequentiels par flots de donnees 239

Z DIV 2 − U necessite un soustracteur (composant moins sur la figure). Lecalcul Z + 2 ∗ U necessite un additionneur (composant plus sur la figure). Lecalcul Y − Z necessite un soustracteur (composant moins sur la figure). Onneglige evidemment les multiplications ou divisions par une puissance de 2(composants div2, mult2 et div4 sur la figure). Ce sont de simples decalages.

Le calcul du predicat Z ≤ Y necessite le calcul de Z−Y ou Y −Z, on profitedu calcul de Y −Z pour l’obtenir a travers le composant test. La realisation del’instruction si Z ≤ Y est effectuee a l’aide de deux multiplexeurs commandespar la sortie du composant test et decidant du changement des valeurs de Zet Y par les resultats des calculs Z + 2 ∗ U et Y − Z.

3.3 Notion de pipeline

Le principe de pipeline est une optimisation particuliere du principe deflot de donnee. Son utilisation est largement repandue dans la conception desmicroprocesseurs actuels. Le lecteur peut trouver une description plus detailleedans [HP94].

Remarque : Le terme de pipeline est un mot anglais. Il se prononce avecles diphtongues (aI) /paIplaIn/. Une traduction francaise, oleoduc, ligne depipe, n’ayant qu’un rapport lointain avec ce dont nous parlons, nous gardons leterme ”pipeline”. On peut le prononcer a la francaise... On peut aussi risquerocteoduc.

L’organisation sous forme de pipeline d’un systeme sequentiel digital s’ap-plique a des classes de fonctions particulieres : il s’agit de systemes qui delivrentun flot de sorties en fonction d’un flot d’entrees, en respectant un cadencement :la Neme sortie est l’image de la Neme entree. On peut voir une analogie avecla file d’attente de certaines cafeterias ou cantines : les clients arrivent dansun certain ordre, prennent ou non entree, dessert, boisson ou plat chaud dansl’ordre ou ces plats sont presentes puis payent ; mais l’usage est que l’on ne sedouble pas. Par opposition on trouve des organisations de type buffet ou cha-cun passe d’un comptoir a l’autre a sa guise. Si l’on prend peu de plats, on peutpasser a la caisse avant un consommateur arrive avant mais qui prend chaqueplat. Evoquons les avantages et inconvenients des deux formules : attente dansle pipeline derriere l’indecis qui hesite entre frites et pommes sautees, bouscu-lade dans le buffet asynchrone.

On suppose qu’a l’entree les consommateurs arrivent a intervalles constantsde duree T. Au premier plat presente le premier client met moins de T a choisir.A l’instant T il passe alors au rayon du deuxieme plat et un deuxieme clientprend sa place au premier rayon. A l’instant 2*T, le premier client passe autroisieme rayon, le second client au second rayon et un troisieme arrive dansle premier rayon. Le processus peut continuer. Si un client met plus de T achoisir ou s’il veut passer au rayon suivant plus vite que T, le systeme se meta mal fonctionner (Cf. “Les Temps Modernes” de Charlie Chaplin).

version en ligne - [PDF Document] (248)

240 Circuits sequentiels

SortiesEntreesC1R1 R2 C2

Clock

Fig. 10.24 – Un circuit a pipeline a trois niveaux

On a un fonctionnement du meme type dans le systeme materiel decrit parla figure 10.24. A la date 1, un premier item d’entree est charge dans le registred’entree R1. Le circuit combinatoire C1 calcule une fonction f1 a partir de lasortie de ce registre.

A la date 2, un deuxieme item d’entree est charge dans le registre R1. Si-multanement R2 est charge avec la sortie du circuit C1. Le circuit combinatoireC1 calcule f1 sur la sortie de R1, C2 calcule f2 sur la sortie de R2.

La simultaneıte est necessaire au bon fonctionnement du systeme. Evidem-ment la periode T de l’horloge qui pilote les chargements de tous les registresdoit etre superieure au maximum des delais des circuits combinatoires inter-venant dans le pipeline. La s’arrete l’analogie avec le restaurant self-service oul’on passe au rayon suivant de facon un peu asynchrone (des que l’on a fini aun rayon et que le client precedent a libere la place).

Le temps de reponse unitaire pour chaque traitement est le produit de laperiode par le nombre de tranches dans le pipeline. Il peut etre superieur a lasomme des delais de chacun des circuits, voire tres superieur si le pipeline estmal equilibre.

4. Exercices

E10.2 : CompteurOn veut realiser un compteur. Il delivre en sortie les entiers successifs de 0a 7 (sur 3 bits). La sortie sur 3 fils (s2, s1, s0) est incrementee modulo 8 achaque front montant d’une entree incr. L’initialisation a 0 des sorties se faita l’aide du signal init actif a 1. Donner l’automate de Moore correspondant aces specifications. Donner une realisation cablee de cet automate.

Comment pourrait-on realiser un circuit equivalent a l’aide d’un circuitcombinatoire calculant une sortie S sur 3 bits egale a une entree E (sur 3 bits)plus 1 ? Ce circuit a fait l’objet d’une etude de cas dans le chapitre 8.

Verifiez en dessinant un chronogramme que le circuit de la figure 10.25 ale meme comportement que les circuits precedents.

E10.3 : Automate reconnaisseur de sequenceDonner un codage binaire de trois informations a, b et c et construire unerealisation de l’automate etudie au chapitre 5 reconnaissant le langage reguliera∗b + c∗.

version en ligne - [PDF Document] (249)

4. Exercices 241

clock

reset

clock

reset

clock

resetDQ DQ Q D

incr

init

s2 s1 s0

Fig. 10.25 – Circuit realisant un compteur sur 3 bits

e

s = 0e

e e

s = 1

s = 0

ee

Fig. 10.26 – Graphe de Moore de l’automate correspondant au detecteur de front

E10.4 : Compteur/decompteur modulo 10Un automate memorise un entier naturel u de l’intervalle [0, 9]. Il a deux entreesplus, moins. L’evolution de l’etat (c’est-a-dire de l’entier u) est definie ainsi :

u ←− 0 ;tant que vrai :

si plus alors u ←− (u+1) mod 10sinon

si moins alors u ←− (u-1) mod 10sinon u ←− u

Donnez une realisation en portes et bascules de ce compteur/decompteurmodulo 10.

E10.5 : Detecteur de frontOn veut realiser l’automate du detecteur de front decrit dans le chapitre 9,paragraphe 1.2.4. On suppose que l’entree e est synchronisee sur les frontsmontants d’une horloge clock. La sortie s passe a 1 apres chaque front montantde e et au front descendant de clock suivant. Elle doit rester a 1 jusqu’auprochain front montant de clock.

Verifier que l’automate de la figure 10.26 correspond a ces specifications.Faire la synthese cablee de cet automate. Quelle doit etre le signal que l’ondoit mettre sur l’entree d’activation des bascules de l’automate ? La sorties de l’automate reste a 1 pendant une periode de l’horloge, comment fairepour qu’elle reste a 1 seulement pendant la demi-periode voulue ? Faire unchronogramme pour comprendre.

version en ligne - [PDF Document] (250)

242 Circuits sequentiels

E10.6 : Machine a laverOn veut realiser un controleur de machine a laver. La machine a laver possede 4fils en entree permettant d’effectuer des commandes sur les elements de la ma-chine : Lancer-Moteur-vitesse1, Lancer-Moteur-vitesse2, Entree-Eau, Entree-Lessive. La mise sous tension de 5 volts de ces fils correspond a :– Lancer-Moteur-vitesse1 : active le moteur du tambour de la machine a une

vitesse lente pendant une duree fixe T1 (permettant le lavage)– Lancer-Moteur-vitesse2 : active le moteur du tambour de la machine a une

vitesse rapide pendant une duree fixe T2 (permettant l’essorage)– Entree-Eau : permet l’arrivee de l’eau dans le tambour pendant une duree

fixe T3 (active une pompe a eau)– Entree-Lessive : ouvre le conteneur de lessive (pour la mettre dans le tam-

bour).

La machine a laver possede 1 fil Fin en sortie indiquant la fin d’une tachelancee par l’une des 4 commandes precedentes. Ce fil passe a 5 Volts lorsque latache en cours se termine. Il repasse a 0 volts lors du lancement d’une nouvellecommande. Il est a 0 a l’initialisation.

On veut realiser le circuit permettant de commander cette machine. Il aen entree Fin, Init et Demarrer. Init est la commande d’initialisation a la misesous tension. Demarrer passe a 5 volts un court instant lorsque l’utilisateurlance un programme de lavage. Il a en sortie les 4 commandes Lancer-Moteur-Vitesse1 (LMV1), Lancer-Moteur-Vitesse2 (LMV2), Entree-Eau (EE), Entree-Lessive (EL).

On veut offrir a l’utilisateur un seul programme de lavage qui corresponda la suite des etapes suivantes : un lavage : entree de l’eau, de la lessive etlancement du tambour a vitesse lente ; un rincage : entree de l’eau et lancementdu tambour a vitesse lente ; un essorage : lancement du tambour a vitesserapide.

Pour les etapes a plusieurs taches, les commandes correspondantes peuventetre effectuees simultanement. Fin passe alors a 1 a la fin de la tache laplus longue. Donner le graphe de l’automate d’etats fini qui correspond aucontroleur de la machine a laver. Faire une synthese de cet automate en uti-lisant des bascules D sensibles au front montant et des portes NAND et in-verseurs. Donner le dessin du circuit en faisant apparaıtre les entrees (Init,Demarrer, et Fin) et les sorties du circuit (LMV1, LMV2, EE, EL).

On veut maintenant offrir a l’utilisateur 2 programmes au choix. Pour celaon rajoute au controleur une entree Prog specifiant le programme de lavage a ef-fectuer. Si Prog vaut 1 le programme de lavage est celui defini precedemment, siProg vaut 0 le programme de lavage correspond seulement aux etapes de lavageet rincage. Le controleur possede comme precedemment l’entree Demarrage.Donner le graphe de l’automate correspondant a ce nouveau controleur et enrealiser une synthese.

version en ligne - [PDF Document] (251)

Chapitre 11

Conception de circuitssequentiels par separation ducontrole et des operations

Nous avons vu dans le chapitre 10 comment concevoir un circuit sequentielcorrespondant a un automate d’etats fini en partant de son graphe explicite.Ceci n’est faisable que lorsque le graphe de l’automate n’a pas trop d’etats(une centaine). Au-dela le travail est complexe et fastidieux. C’est en parti-culier le cas lors de la realisation de circuits correspondant a des algorithmesmanipulant des variables entieres. Dans ce cas d’autres techniques de concep-tions de circuits existent. Nous avons vu dans le chapitre 10 a travers deuxexemples une technique appelee flot de donnees. Nous nous interessons ici aune technique differente permettant de decomposer le probleme (et du couple circuit correspondant) en deux parties distinctes : une partie controle etune partie operative. La partie operative est formee d’un ensemble de registreset d’operateurs permettant de memoriser les variables de l’algorithme et derealiser les operations apparaissant sur ces variables dans l’algorithme. Parcontre l’enchaınement dans le temps des operations est decide par la partiecontrole. Par rapport au flot de donnees cette technique permet d’optimi-ser le nombre d’operateurs necessaires mais souvent au detriment du tempsd’execution.

Nous expliquons dans le paragraphe 1. le principe general d’une telle ar-chitecture. Nous decrivons dans le paragraphe 2. une partie operativetype, utilisable dans la plupart des cas. Nous donnons dans le para-graphe 3. les principes de la partie controle et etudions sa synchroni-sation temporelle avec la partie operative. Nous appliquons ensuite cesprincipes generaux a deux exemples detailles (paragraphe 4.).

Nous nous appuyons sur cette technique pour expliquer les principes deconception d’un processeur au chapitre 14.

version en ligne - [PDF Document] (252)

244 Conception de circuits sequentiels...

Partie operative

Init

Ordres

Horloge

Entrees

Sorties

Donnees :

Partie controleAcquittements

Comptes-rendus

Commandes

Fig. 11.1 – Principaux signaux d’une architecture PC/PO

1. Principe general

La partie operative (ou PO) offre les ressources (Bus, registres, UAL . . .)necessaires a chaque operation sur les differentes variables apparaissant dansl’algorithme. Mais ce n’est pas elle qui decide de l’operation a effectuer a uninstant donne. Elle envoie des signaux de comptes rendus sur ces calculs a lapartie controle.

La partie controle (ou PC) gere l’enchaınement des calculs effectues surles donnees au vu des comptes rendus de la PO. Elle genere l’activation desoperations a un instant donne, en envoyant des signaux de commandes a lapartie operative. Elle ne modifie pas directement les donnees. Elle traduit lesprimitives de controle apparaissant dans l’algorithme.

Les deux parties sont deux circuits sequentiels cadences sur la meme hor-loge. La figure 11.1 donne l’organisation des signaux entre la PC, la PO etle monde exterieur. Les communications entre les deux parties se font parles signaux de commande et de compte-rendu. A chaque front (montant parexemple) d’horloge :

– des valeurs de commandes sont envoyees a la PO par la PC pour selectionnerun calcul donne (par exemple : selection des entrees de l’UAL, operationeffectuee dans l’UAL, . . .).

– des comptes-rendus du calcul effectue (par exemple les indicateursarithmetiques d’une UAL) peuvent alors etre renvoyes par la PO a la PCafin de lui permettre de prendre une decision pour le choix du calcul suivant.

Les connexions au monde exterieur tiennent compte de cette specialisation :

– la PC ne recoit que des ordres et ne delivre que des acquittements, signalantla fin de sa mission, par exemple.

– la PO ne recoit que des donnees et ne delivre que des donnees. Les filsd’entrees et de sorties peuvent dans certains cas etre les memes (bus bidi-rectionnel).

version en ligne - [PDF Document] (253)

2. Notion de partie operative type 245

Nous avons vu au chapitre 5 comment obtenir une machine sequentielle avecactions a partir d’un algorithme. Chaque action apparaissant dans la machinesequentielle doit pouvoir etre executee dans la PO. Les actions atomiques, oumicroactions, auxquelles nous nous interessons sont de type Ri ←− Rj op Rk,Ri ←− entree ou sortie ←− Ri ou op est une operation et Rj un registre.On peut aussi avoir dans la PO type des microactions composees telle quesortie ←− Rj || Ri ←− Rj op Rk. La partie controle peut etre decrite explici-tement par le graphe de l’automate dans lequel on remplace les actions par unensemble de sorties booleennes correspondant aux signaux de commande de laPO. Les entrees de cet automate sont les comptes-rendus des calculs effectuesdans la PO. Le tableau 11.3 donne la correspondance entre microactions etsorties booleennes.

2. Notion de partie operative type

Nous donnons Figure 11.2 la structure d’une partie operative type per-mettant une construction methodique et repondant a la plupart des besoins.Cette PO peut etre dans la plupart des cas optimisee en termes de nombre deressources (registres, bus, operateurs) ou en termes de temps d’execution. Cescriteres sont souvent incompatibles.

Une partie operative comprend des registres, un operateur appele UAL(Unite Arithmetique et Logique) et des bus.

Remarque : Il est interessant de noter qu’une partie operative peut etredecrite comme un automate d’etats fini. Ses entrees sont les donnees entrantes,les commandes de chargement et d’initialisation des registres, les commandesd’operation. Son etat est compose des valeurs contenues dans les differentsregistres. Ses sorties sont les donnees sortantes et les comptes-rendus a des-tination de la PC. Une utilisation systematique de cette description est faitedans l’exercice E14.4 du chapitre 14.

2.1 Registres et commandes de chargement

Les registres contiennent les valeurs des variables apparaissant dans l’al-gorithme. Un registre est un ensemble de bascules de meme type partageantles memes commandes d’activation et d’initialisation (Cf. Chapitre 9, para-graphes 1.3 et 1.4). Les primitives materielles sur un registre permettent d’yforcer une valeur presente sur la nappe de fils en entree. Ceci est fait en connec-tant l’horloge generale du circuit a l’entree d’horloge des bascules et en connec-tant l’entree Enable des bascules a un signal de commande nomme signal dechargement de ce registre.

Sur la figure 11.2 chaque registre (Ri, i = 1, ..., n) est connecte a l’horlogegenerale et au signal de chargement note ChRi. Ces signaux de chargement fontpartie des commandes envoyees par la PC.

version en ligne - [PDF Document] (254)

246 Conception de circuits sequentiels...

SelUAL

UAL

horloge

Sorties

SelBusAR1

SelBusBR1

Operation UAL

SelEntrees

Entrees

SelSorties

Bus B

Bus A

R1 Rn

ComptesRendus

Bus Resultat

ChR1

Fig. 11.2 – Une partie operative type

microactions commandes pendant le coup d’horloge

Ri ←− Rj op Rk ChRi = 1 ; ChRi′(i6=i′) = 0 ;SelBusARj = 1 ; SelBusARj′(j 6=j′) = 0 ;SelBusBRk = 1 ; SelBusBRk′(k 6=k′) = 0 ;

SelUAL = 1 ; SelEntrees = 0 ; SelSorties = 0 ;commandes UAL pour l’operation op

Ri ←− entree ChRi = 1 ; ChRi′(i6=i′) = 0 ;SelBusARj = ϕ ;SelBusBRk = ϕ ;

SelUAL = 0 ; SelEntrees = 1 ; SelSorties = 0 ;commandes UAL = ϕ

sortie ←− Ri ChRi = 0 ;SelBusARi = 1 ;SelBusBRk = ϕ ;

SelUAL = 0 ; SelEntrees = 0 ; SelSorties = 1 ;commandes UAL = ϕ

Fig. 11.3 – Sorties correspondant aux microactions pour la P.O type de la figure 11.2

version en ligne - [PDF Document] (255)

2. Notion de partie operative type 247

La sortie de chaque registre est connectee aux deux entrees de l’UAL maisune de ces deux connexions peut etre inutile et donc supprimee. Il peut etreinteressant d’initialiser les registres a l’aide du signal d’initialisation (a 1 ou a0) des bascules plutot que d’obtenir des valeurs initiales via le bus Entrees.

2.2 Operateur et commande d’operation

La realisation de l’operateur (ou UAL) suppose d’identifier la liste desoperations necessaires a l’execution de l’algorithme. L’operateur est un circuitcombinatoire susceptible de realiser ces differentes operations selon des signauxde commande (OperationUAL sur la figure 11.2). Si l’operateur doit effectuer poperations differentes, il est commande par log2(p) fils de commande. En plusdu resultat de l’operation proprement dit, des sorties de l’operateur peuventetre de type indicateurs arithmetiques, ressemblant aux classiques Z, N, C et Vdes mots d’etat de processeurs (Cf. Chapitre 12). Rien n’empeche d’en utiliserd’autres si l’expression de l’algorithme utilise des primitives de test differentes.Ces sorties de l’operateur forment les signaux de compte-rendu de la PO versla PC (ComptesRendus sur la figure 11.2).

Il y a dans ce travail de conception d’un operateur un aspect tout a faitparticulier. L’expression d’un algorithme se fait a base de primitives supposeesdonnees ; ici le concepteur de machine algorithmique a le choix des primitives :ce sont celles realisables par un circuit a un cout convenable. On peut parexemple decider d’utiliser un multiplieur combinatoire de nombres codes envirgule flottante sur 64 bits dans une machine algorithmique si on en a besoin.Cela permet de considerer la multiplication de reels comme une primitive. Sil’on ne veut pas utiliser un tel circuit, mais seulement un additionneur 8 bits,il faudra exprimer l’algorithme en n’utilisant que des additions de nombrescodes sur 8 bits.

On peut utiliser plusieurs operateurs effectuant chacun une operationdonnee afin de pouvoir paralleliser certaines operations et donc diminuer letemps d’execution de l’algorithme. Toutefois ce genre d’optimisation augmentele nombre de connexions et d’operateurs necessaires. Si on le pousse a l’extreme,on retombe sur la solution flot de donnees presentee au paragraphe 3. du cha-pitre 10.

2.3 Liaisons, bus et multiplexeurs,commandes de selection

Les liaisons entre les registres et l’operateur se font par des liaisons nommeesbus . Deux bus operandes (A et B) permettent d’amener aux deux entrees del’UAL le contenu d’un des registres. Les signaux SelBusARi et SelBusBRi per-mettent d’effectuer cette selection. Un bus Resultat permet d’amener a l’entreedes n registres le resultat du calcul. Les signaux ChRi permettent d’effectuerle chargement du registre souhaite.

version en ligne - [PDF Document] (256)

248 Conception de circuits sequentiels...

BUS

D2 D3 D4

C1 C2

S1 S2 S3 S4

BUS

C1 C2

D1

D4

D2

D3

Decodeur

(b)(a)

D1

Fig. 11.4 – Liaisons de 4 registres a un bus. a) a base de multiplexeurs ; b) a base deportes trois etats.

La liaison des registres a chaque bus est realisee soit a l’aide de multi-plexeurs, soit a l’aide de portes trois etats entre les sorties des registres etle bus. Elle necessite des signaux de commande permettant de determiner cechoix. La figure 11.4 montre la realisation d’un bus supportant 4 entrees D1,D2, D3 et D4 (qui sont par exemple les sorties de 4 registres) a l’aide de deuxsignaux de commande C1 et C2. Dans le cas d’une realisation a base de portestrois etats, le bus obtenu est a double sens (contrairement a l’autre cas). Celapeut etre indispensable dans le cas d’entrees/sorties avec l’exterieur. Cettesolution est la plus souvent utilisee.

Sur la figure 11.2, c’est la solution a base de portes trois etats qui a etechoisie. Le decodeur delivrant les signaux Si (dans la figure 11.4) n’apparaıtpas sur la figure 11.2. Ces signaux de selections (Si) peuvent etre directementdelivres dans chaque etat de la PC. Une autre solution consiste a realiser ledecodeur dans la PC ; le nombre de fils de commande entre la PC et la PO estalors fortement augmente.

On peut diminuer le nombre de connexions en diminuant le nombre debus au detriment du temps d’execution de l’algorithme. On peut placer parexemple un registre tampon supplementaire en sortie de l’UAL et connecter ceregistre a un bus qui servira en meme temps de bus resultat et de bus operande.

2.4 Entrees/Sorties

Le bus Entrees permet de charger des valeurs depuis l’exterieur dans lesregistres. Les signaux SelEntrees et ChRi du registre concerne doivent alorsetre actifs et la valeur initiale presente sur le bus Entrees.

Le bus Sorties permet de delivrer a l’exterieur les resultats de l’algorithme.Il est donc connecte a un des deux bus de sorties des registres de la PO. Laporte trois etats activee par SelSorties n’est pas toujours necessaire.

version en ligne - [PDF Document] (257)

3. Partie controle 249

Dans certains cas, il peut etre interessant de posseder plusieurs nappes defils de sorties. Dans ces cas-la les sorties de certains registres peuvent etre, parexemple, directement des sorties du circuit.

Dans d’autres cas les entrees et les sorties peuvent etre multiplexees sur lesmemes fils. On peut alors relier les bus Entrees et Sorties grace a la presencede la porte trois etats commandee par SelSorties sur la figure 11.2.

2.5 Relations entre microactions et commandes

On peut recapituler (Cf. Figure 11.3) l’ensemble des commandes necessairesa l’execution des 3 types de microactions sur la base d’une partie operativecomme celle de la figure 11.2. On verra dans la suite des primitivesd’entrees/sorties plus riches permettant un protocole de poignee de mains.

2.6 Synchronisation du calcul et de l’affectationdu resultat

Deux schemas simples de synchronisation peuvent etre utilises. Dans lepremier schema, tous les registres sont sensibles au (meme) front d’horloge.A chaque coup d’horloge une microaction Ri ←− Rj op Rk est effectuee et leresultat est charge dans le registre concerne au prochain front de l’horloge.

Dans le deuxieme schema, on peut utiliser des registres de type verrou(Cf. Chapitre 9) ; on ajoute alors un registre tampon en sortie de l’operateur.Ce registre est pilote par un signal de chargement actif sur le niveau hautde l’horloge. Les autres registres sont pilotes par un signal de chargementactif sur le niveau bas. Une microaction se decompose alors en deux phases,correspondant aux deux niveaux de l’horloge. Dans la premiere phase (haut)les operandes sont aiguilles vers l’operateur et le resultat du calcul est chargedans le tampon. Dans la deuxieme phase (bas), le resultat est charge dans leregistre concerne.

Dans la suite on fera abstraction de cette alternative de mise en oeuvre desactions atomiques.

3. Partie controle

Comme decrit au chapitre 5, nous pouvons a partir de l’algorithme obtenirune machine sequentielle avec actions. Pour des raisons de synchronisationavec la PO (Cf. Chapitre 10, paragraphe 1.3.3) le modele de Moore est utilise.

Cette machine sequentielle avec actions est ensuite transformee en auto-mate d’etats fini en remplacant les actions apparaissant sur les etats par l’af-fectation des valeurs correspondantes a ces actions, aux signaux de commandea destination de la PO. Cette etape est detaillee dans les etudes de cas traitees

version en ligne - [PDF Document] (258)

250 Conception de circuits sequentiels...

au paragraphe 4. Cet automate peut etre ensuite realise par du materiel suivantune des methodes decrites dans le chapitre 10.

Le probleme est de decider quels operateurs et comptes-rendus de calculssont disponibles dans la PO. Chaque calcul et affectation de variable corres-pondante effectue dans un etat de l’automate doit etre realisable en un cycled’horloge dans la PO. Chaque condition apparaissant sur les transitions del’automate doit etre un compte-rendu de l’operateur utilise disponible dansl’etat precedent.

3.1 Entrees/sorties

La gestion des entrees et des sorties necessite une synchronisation avec lemonde exterieur. Le protocole de poignee de mains (Cf. Chapitre 6) peut etreemploye pour permettre le chargement ou la sortie de certains registres de laPO. Ce protocole de poignee de mains peut etre adapte au cas par cas suivantl’environnement dans lequel on doit implanter le circuit a realiser. Des signauxde synchronisation necessaires a ces entrees/sorties sont ajoutes aux signauxde donnees. Ils sont recus par la PC.

Dans le cas d’une entree le circuit est le recepteur et le monde exterieur estl’emetteur, et inversem*nt pour une sortie. On reprend le schema de l’automatedu recepteur et de l’emetteur dans une poignee de mains presente dans lechapitre 6. On associe a l’automate de la PC deux etats pour chaque acquisitiond’entree et pour chaque delivrance de sortie (Cf. Figure 11.5). Les entrees sontechantillonnees sur la meme horloge que la PC comme nous l’avons vu dans lechapitre 10. Dans le cas d’une entree, le signal PresE correspond au signal depresence d’une entree venant de l’exterieur (emetteur pret). Le signal EPrisecorrespond au signal de signification a l’exterieur de la prise en compte del’entree (recepteur non pret). Bien entendu ce signal est a 0 dans tous lesautres etats de l’automate. Dans l’etat Chargement de l’entree les commandesa destination de la PO sont SelEntrees pour amener la valeur du bus exterieura l’entree des registres et ChRi pour charger le registre voulu.

Dans le cas d’une sortie, le signal PresS correspond au signal de presenced’une sortie pour l’exterieur (emetteur pret). Ce signal est a 0 dans tous lesautres etats de l’automate. Le signal SPrise permet a l’exterieur de signalerau circuit qu’il a pris en compte la sortie (recepteur non pret). Dans l’etatSortie presente les commandes a destination de la PO sont SelBusARi pourtransmettre le registre voulu sur le bus A et SelSorties pour amener la valeurdu bus A sur le bus de sortie.

Nous pouvons illustrer ce protocole a travers le dialogue d’un circuit avecune memoire. Considerons par exemple un processeur effectuant des ecritures(sorties) ou des lectures (entrees) en memoire. Nous avons explique au para-graphe 2.2 du chapitre 9 comment se deroule un acces memoire. Dans le casou la memoire est lente par rapport au processeur celui-ci doit attendre lorsd’un acces en lecture ou en ecriture que la memoire lui signale la fin de l’acces.

version en ligne - [PDF Document] (259)

3. Partie controle 251

de l’entreeChargement

EntreeAttenteEPrise

PresE

PresE

de l’entreeChargement

EntreeAttenteEPrise

PresE

PresE

PresS

SPrise

SPrise

PresEpresenteSortie

AttentePresE SPrise

SPrise

SelBusARiSelSorties

PresS

SelEntrees

EPriseChRi

(a) (b)

Fig. 11.5 – Gestion d’entrees/sorties : a) acquisition d’une entree ; b) delivrance d’unesortie

La memoire delivre alors un signal FinAcces lorsque, soit la donnee a lire estprete sur le bus, soit la donnee a ecrire est effectivement ecrite en memoire.Le processeur delivre les signaux SelMem et l/e lors d’un acces a la memoire.On reprend les automates de la figure 11.5. Pour l’ecriture SPrise correspond aFinAcces, PresS a SelMem et l/e ; pour la lecture PresE correspond a FinAcces,Eprise a SelMem et l/e.

Nous retrouverons la connexion d’un processeur avec une memoire dans l’etudede cas du paragraphe 4.3 et dans le chapitre 14. Nous nous placerons alors dansle cas simple et ideal ou la memoire est suffisamment rapide pour permettre unacces en un cycle d’horloge du processeur ; le signal FinAcces n’est alors plusutile, il est implicite.Nous retrouverons les aspects de synchronisation au chapitre 15, pour relierl’ensemble processeur/memoire avec le monde exterieur.

3.2 Synchronisation de la partie controle et de la partieoperative

Nous avons vu dans le chapitre 10, paragraphe 1.3.3, comment synchroniserles realisations de deux automates. Dans le cas d’une realisation PC/PO lessorties de la PO sont des entrees de la PC et inversem*nt. Nous sommes doncen presence de deux automates en boucle.

Supposons que l’automate realisant la PC evolue a chaque front montantd’une horloge H. Il faut qu’entre deux fronts montants de H, la PO effectue lecalcul commande et donne un compte-rendu pour permettre a la PC de calculerle prochain etat. Regardons ce qui se passe dans les deux cas de synchronisationetudies au paragraphe 1.3.3 du chapitre 10.

Dans le cas ou les registres de la PO sont charges au front montant (Cf. Fi-gure 11.6), c’est le resultat du calcul effectue dans l’etat precedent qui estcharge. La PO doit alors effectuer le calcul et emettre le compte-rendu demaniere a laisser le temps a la PC de calculer l’etat suivant avant le prochain

version en ligne - [PDF Document] (260)

252 Conception de circuits sequentiels...

Passage dans l’etat i Passage dans l’etat i + 1

Compte rendu valide

Calcul de l’etat i+1 (PC)

Calcul effectue dans l’etat i (PO)

H

Chargement du resultat de l’etat i (PO)

Fig. 11.6 – Chronogrammes montrant la synchronisation de la PC et de la PO avecchargement du registre resultat en fin de periode

Passage dans l’etat i + 1Passage dans l’etat i

Compte rendu valide

Calcul effectue dans l’etat i (PO)

Calcul de l’etat i+1 (PC)et Chargement du resultat

H

Le compte-rendu peut changer

de l’etat i (PO)

Fig. 11.7 – Chronogrammes montrant la synchronisation de la PC et de la PO avecchargement du registre resultat au milieu de la periode

front montant de H. Dans ce cas-la, il n’est pas necessaire de memoriser cescomptes-rendus.

Dans le cas ou le calcul est effectue dans la premiere phase (Cf. Figure 11.7)les comptes-rendus changent alors une deuxieme fois dans la deuxieme phasepuisque certains des registres peuvent avoir change apres le front descendantde H. Il faut donc memoriser ces comptes-rendus dans un registre au frontdescendant de H. L’emission des commandes de la PC et le calcul doiventdonc etre realises dans la premiere demi-periode de H, le calcul de l’etat suivantdans la deuxieme. Cette solution est plus contraignante dans l’enchaınementdes differentes operations de la PC et de la PO.

version en ligne - [PDF Document] (261)

4. Etudes de cas 253

4. Etudes de cas

4.1 Demarche de conception

Avant de traiter concretement des exemples precis nous donnons l’ebauched’une methode de conception d’une architecture PC/PO. Les deux premieresetapes apparaissant ci-apres sont completement liees et sont a effectuer simul-tanement.

– Transformation de l’algorithme en une machine sequentielle avecactions :

Repertorier les actions et les predicats apparaissant dans l’algorithme.Definir les operations necessaires aux calculs de ces predicats. Definir lesoperations et les affectations de variables pouvant etre realisables par uncircuit disponible pour construire la PO.

Decrire l’algorithme a l’aide d’une machine sequentielle avec actions uti-lisant ces variables et ces operations. Les actions associees a chaque etatdoivent etre realisables dans la PO en un coup d’horloge.

– Obtention de la PO :

Repertorier l’ensemble des variables apparaissant dans la machinesequentielle avec actions, chacune correspond a un registre de la PO.

Repertorier l’ensemble des operations apparaissant dans l’algorithme, ycompris celles necessaires aux calculs des predicats. Construire une PO type(Cf. Parapraphe 2.) possedant un operateur permettant de realiser tous lescalculs. On pourra eventuellement optimiser cette PO (au niveau temps decalcul) en multipliant les operateurs et parallelisant les calculs par fusiond’etats dans la machine sequentielle.

– Obtention de l’automate correspondant a la PC :

Au vu de la PO et de la machine sequentielle avec actions obtenir l’auto-mate d’etats fini correspondant a la PC. Cet automate a comme entreesles fils de comptes-rendus (correspondant aux conditions apparaissant dansl’algorithme) sortant de l’operateur de la PO et les signaux de synchroni-sation avec le monde exterieur. Il a comme sorties les fils de commandeapparaissant sur les ressources de la PO et des signaux avec l’exterieur. Ilfaut donc definir pour chaque etat la valeur des commandes a destinationde la PO correspondant aux actions effectuees.

– Synthese de l’automate de controle :

Il reste a effectuer la synthese de l’automate obtenu en utilisant une desmethodes donnees dans le chapitre 10.

– Assemblage de la PC et de la PO

version en ligne - [PDF Document] (262)

254 Conception de circuits sequentiels...

Lexiquem,n : des entiers ≥ 0 { m et n etant donnes}fin : le booleen Vraij, k : des entiers ≥ 0∆ : un entier

AlgorithmeTantque VRAI :

Acquerir(m) ; Acquerir(n) ;k ←− 0 ; j ←− 0 ; ∆ ←− −m ;tantque j ≤ m : {invariant : 0 ≤ j ≤ m et −2.m ≤ ∆ ≤ 0 }

Delivrer (j) ; Delivrer (k) ;j ←− j+1 ;∆ ←− ∆ + 2.n ; {−2.m + 2.n ≤ ∆ ≤ 2.n}si ∆ ≥ 0

k ←− k + 1 ;∆ ←− ∆ − 2.m ; { apres cela : −2.m ≤ ∆ ≤ 0 }

fin ←− VRAI ;Delivrer(fin) ;

Fig. 11.8 – Algorithme de Bresenham

4.2 Le traceur de segments

Le circuit que nous voulons concevoir doit delivrer les coordonnees despoints d’un segment de droite sur un ecran. Nous choisissons l’algorithme deBresenham presente au paragraphe 2.3 du chapitre 5. La figure 11.8 rappellel’algorithme. Les actions Acquerir et Delivrer correspondent aux entrees et sor-ties. Pour que le circuit puisse fonctionner pour un nombre de segments illimite,nous ajoutons une boucle globale sans fin.

4.2.1 Obtention d’une machine sequentielle avec actions a partir del’algorithme

On peut classer les actions a effectuer en deux categories. Certaines corres-pondent a des entrees/sorties : Acquerir(m), Acquerir(n), Delivrer (j), Delivrer(k),Delivrer (fin) ; d’autres correspondent a des calculs : j ←− 0, k ←− 0, ∆←− −m , j ←− j + 1, ∆ ←− ∆ + 2.n, k ←− k + 1, ∆ ←− ∆ − 2.m.

Les initialisations de j et k a 0 se font directement a travers un signald’initialisation sur les registres. On peut ainsi reunir les actions j ←− 0, k←− 0, et ∆ ←− −m dans le meme etat. On choisit d’utiliser un seul operateur(Cf. Paragraphe 2.), les autres actions doivent donc se faire dans des etatsdistincts.

Les predicats a tester sont j ≤ m et ∆ ≥ 0. On peut de facon equivalentecalculer chaque predicat ou son complementaire ; par exemple on peut calculerj>m ou j ≤ m. Pour le calcul du predicat j > m on effectue m − j. Il est plus

version en ligne - [PDF Document] (263)

4. Etudes de cas 255

k ←− k+1

j ←− j +1

Delivrer(fin)

Acquerir(m)

Acquerir(n)

∆ ←− −m || j ←− 0 || k ←− 0

m-j

Delivrer(j)

Delivrer(k)

∆ ←− ∆ − 2.m

∆ ←− ∆ + 2.n

ResNeg

ResNeg

ResNeg

ResNeg

Fig. 11.9 – Une machine sequentielle avec actions realisant l’algorithme de Bresenham

facile de realiser une UAL qui donne un indicateur signifiant resultat negatifque resultat negatif ou nul. Pour le predicat ∆ ≥ 0, on a besoin du memeindicateur.

Le calcul d’un predicat peut necessiter l’ajout d’un etat. Par exemple ici lecalcul de j > m doit etre effectue dans un etat specifique alors que le calcul de∆ ≥ 0 peut etre effectue au moment de l’action ∆ ←− ∆ + 2.n.

On obtient la machine sequentielle avec actions de la figure 11.9.

4.2.2 Description de la partie operative

La figure 11.11 donne la partie operative. Le circuit comporte 5 registresnommes J, K, M, N et D contenant les valeurs des variables j, k, m, n et ∆.

Les registres J et K possedent un signal d’initialisation InitJK a 0 pourpouvoir effectuer les actions j ←− 0 et k ←− 0.

Les calculs a effectuer correspondent aux diverses actions enumereesprecedemment : − M, K + 1, J + 1, D + 2.N, D − 2.M. Il faut ajouterles calculs correspondant aux predicats : j > m et ∆ ≥ 0.

On utilise une PO type comme definie precedemment mais on minimise lenombre de connexions des registres aux bus. Ainsi les connexions J ; BusA,K ; BusA, M ; BusB, N ; BusB, D ; BusA suffisent.

Nous realisons toutes les operations avec un operateur unique ; il doit

version en ligne - [PDF Document] (264)

256 Conception de circuits sequentiels...

Op2 Op1 Op0 Operation

0 0 0 A + 1

0 0 1 B − A

0 1 0 A + 2*B

Op2 Op1 Op0 Operation

0 1 1 A − 2*B

1 0 0 − B

Fig. 11.10 – Signaux de commande de l’UAL de l’algorithme de Bresenham

BUS Resultat

KJUAL

ChJ ChK ChD ChM

Bus A

Bus BH

ChN

Sel

NB

usB

Sel

JBusA

Sel

KB

usA

Sel

DB

usA

Sel

MB

usB

InitJK InitJK

D M N

Sorties

SelEntrees

Entrees

ResNeg

Op2, Op1, Op0

Sel

UA

L

Fig. 11.11 – Partie operative correspondant a l’algorithme de Bresenham

realiser les operations suivantes sur ses operandes A et B : A+1, B−A, A+2*B,A−2*B et −B. Chacune de ces operations doit etre effectuee dans un etatdifferent de la machine sequentielle avec actions.

La signification des trois signaux Op2 , Op1 , Op0 de commande desoperations de l’UAL est donnee dans le tableau de la figure 11.10.

Cette UAL peut etre realisee a l’aide d’un additionneur (Cf. Chapitre 8).Elle doit generer un bit de signe du resultat (ResNeg).

4.2.3 Hypotheses sur les entrees/sorties

Sans hypotheses sur l’environnement exact (ecran, table tracante,..) il estimpossible de decrire precisem*nt la primitive d’affichage d’un pixel.

Nous convenons que M et N sont initialises a partir d’un bus d’entrees (noteEntrees sur la figure 11.11), que J et K sont delivres sur un bus de sorties (noteSorties sur la figure 11.11) et que le signal Fin est delivre directement par unfil particulier issu de la PC (fil portant une valeur constante, on pourrait biensur l’eliminer).

Pour les entrees sur M et N et les sorties sur Fin, J et K nous utilisons leprotocole de poignee de mains.

version en ligne - [PDF Document] (265)

4. Etudes de cas 257

4.2.4 Definition de la partie controle par un automate d’etats fini

La figure 11.12 donne la partie controle. Les etats correspondant aAcquerir(N) et Acquerir(M) sont remplaces chacun par les deux etats durecepteur dans le protocole poignee de mains. On introduit ainsi les signauxde controle venant de l’exterieur (PresN et PresM) et un meme signal versl’exterieur pour les deux cas EPrise. De meme pour les sorties Fin, J et K avecles signaux SortieFin, SortieJ, SortieK et SPrise.

Nous supposons que les bascules utilisees dans la PO sont des bascules Dsensibles au front montant, avec signal d’initialisation actif a 1.

Il est a remarquer que dans certains cas la valeur de signaux de commandede la PO n’a pas d’importance. Ces valeurs sont alors definies comme phi-booleennes pour les fonctions de sortie correspondantes.

La figure 11.13 donne le detail des sorties pour chaque etat de la PC ; cesont des fils de commande apparaissant sur la PO de la figure 11.11 et les filsdestines aux entrees/sorties avec l’exterieur.

4.2.5 Assemblage de la PC et de la PO

Le circuit de la figure 11.14 montre l’ensemble des signaux echanges lorsde l’assemblage de la PC et de la PO ainsi que ceux permettant la gestion desentrees/sorties. Le seul compte-rendu de la PO vers la PC est ResNeg. La PCet la PO evoluent avec la meme horloge H.

4.3 La machine a trier

Cette etude de cas montre l’utilisation d’une memoire a cote d’une machinealgorithmique. C’est a ce titre une bonne introduction au chapitre 14 qui portesur la conception d’un processeur. Le mecanisme d’entree/sortie utilise ici estspecifique et different de ceux explicites plus haut.

Soit une memoire permettant de stocker M mots de N bits. On desireconstruire une machine permettant de realiser le tri des elements contenusdans cette memoire. On considere que ces elements sont des entiers naturelscodes en base 2. La figure 11.15 donne l’algorithme du tri par insertion.

On suppose que M est initialise au depart de l’algorithme. La memoirecomporte un bus donnee, un bus adresse et un signal de commande, note l/e,precisant si on realise une operation de lecture ou d’ecriture. Il faut donc que lecircuit realisant l’algorithme possede un bus de sortie correspondant a l’adresseen memoire et un bus d’entrees/sorties correspondant a la donnee stockee enmemoire. On suppose que l’acces a la memoire en lecture ou ecriture peut sefaire en un cycle d’horloge du circuit a concevoir. Il n’y a donc pas de signalFinAcces.

version en ligne - [PDF Document] (266)

258 Conception de circuits sequentiels...

Chargement de M

Chargement de N

M−J

2

3

9

10

12

15

16

1

4

5

6

7

8

11

13

14

PresN

Sortir J

Sortir K

D ←− −M ‖ J ←− 0 ‖ K ←− 0

K ←− K+1

D ←− D − 2*M

PresM

SPrise

D ←− D+2*NJ ←− J +1

Sortir Fin

PresN

PresM

PresM

PresM

PresN

PresN

ResNeg

SPrise

SPrise

SPrise

ResNeg

ResNeg

SPrise

SPrise

ResNeg

SPrise

SPrise

SPrise

SPrise

SPrise

SPrise

Fig. 11.12 – Automate d’etats fini correspondant a l’algorithme de Bresenham

version en ligne - [PDF Document] (267)

4. Etudes de cas 259

1 Attente : InitJK = ChJ = ChK = ChD = ChM = ChN = φ,(Op2, Op1, Op0) = (φ, φ, φ)

2 Chargement de M : ChM = SelEntrees = EPrise = 1, InitJK =ChJ = ChK = ChD = ChN = φ, (Op2, Op1, Op0) = (φ, φ, φ)

3 Attente : InitJK = ChJ = ChK = ChD = ChN = φ,(Op2, Op1, Op0) = (φ, φ, φ)

4 Chargement de N : ChN = SelEntrees = EPrise = 1,InitJK = ChJ = ChK = ChD = φ, (Op2, Op1, Op0) = (φ, φ, φ)

5 D ←− −M ; J ←− 0 ; K ←− 0 : ChD = InitJK = SelMBusB =SelUAL = 1, (Op2, Op1, Op0) = (1, 0, 0)

6 M − J : SelJBusA = SelMBusB = 1, (Op2, Op1, Op0) = (0, 0, 1)

7 Sortir J : SortieJ = SelJBusA = 1, (Op2, Op1, Op0) = (φ, φ, φ)

8 Attente : (Op2, Op1, Op0) = (φ, φ, φ)

9 Sortir K : SortieK = SelKBusA = 1, (Op2, Op1, Op0) = (φ, φ, φ)

10 Attente : (Op2, Op1, Op0) = (φ, φ, φ)

11 J ←− J+1 : ChJ = SelJBusA = SelUAL = 1, (Op2, Op1, Op0) = (0, 0, 0)

12 D ←− D+2*N : ChD = SelDBusA = SelNBusB =SelUAL = 1,(Op2, Op1, Op0)=(0, 1, 0)

13 K ←− K+1 : ChK = SelUAL = SelKBusA = 1, (Op2, Op1, Op0) =(0, 0, 0)

14 D ←− D−2*M : ChD = SelDBusA = SelMBusB = SelUAL = 1,(Op2, Op1, Op0) = (0,1,1)

15 Sortir fin : SortieFin = 1, InitJK = ChJ = ChK = ChD = ChM =ChN = φ, (Op2, Op1, Op0) = (φ, φ, φ)

16 Attente : InitJK = ChJ = ChK = ChD = ChM = ChN = φ,(Op2, Op1, Op0) = (φ, φ, φ)

Fig. 11.13 – Sorties emises dans chaque etat de la partie controle de la figure 11.12. Lessignaux dont la valeur est 1 ou φ sont precises et ceux pour lesquels ellevaut 0 sont omis.

PresN

PresM

SPrise

EPrise

SortieJSortieKSortieFin

H Init

ResNegSorties

EntreesSelJBusA SelKBusASelMBusB SelNBusBSelDBusA SelSortiesSelUAL SelEntreesOp2 Op1 Op0 InitJK

ChJ ChK ChD ChM ChN

operative

Partie

controle

Partie

Fig. 11.14 – Vue generale du traceur de segments

version en ligne - [PDF Document] (268)

260 Conception de circuits sequentiels...

LexiqueM : un entier donnei, j, t : des entiers ≥ 0 ; trouve, fin : des booleensmem : un tableau [0..M−1] d’entiers ≥ 0

Algorithmei ←− 1tantque i ≤ M−1 :

j ←− i ; t ←− mem[i] ; trouve ←− FAUXtantque (j > 0 et non trouve) :

si mem[j−1] > t alors mem [j] ←− mem[j−1] ; j←− j−1sinon trouve ←− VRAI

mem [j] ←− t ; i ←− i + 1fin ←− VRAI ;Delivrer (fin)

Fig. 11.15 – Algorithme de la machine a trier

4.3.1 Obtention d’une machine sequentielle avec actions a partir del’algorithme

Les actions a effectuer sont :i ←− 1, j ←− i, t ←− mem[i], trouve ←− FAUX,mem[j] ←− mem[j−1], j ←− j−1, trouve ←− VRAI, mem[j] ←− t, i ←− i+1.

Nous convenons de coder FAUX par la valeur 0 et VRAI par la valeur 1.Etudions l’evaluation des predicats :

– i ≤ M−1 : on peut calculer i − M et tester si le resultat est nul. En effet,i − M ≤ −1 ⇐⇒ i − M < 0. Initialement i < M et i etant incremente de 1a chaque iteration on peut tester i = M.

– j > 0 et non (trouve) : on peut calculer j et tester si le resultat est non nul,puis calculer trouve et tester si le resultat est nul. Initialement j > 0 et jetant decremente de 1 a chaque iteration on peut tester j = 0.

– mem[j−1] > t : on calcule mem[j−1] − t et on teste si le resultat eststrictement positif. Pour ce calcul si l’on se restreint a un seul operateur, ilfaut tout d’abord aller chercher en memoire mem[j−1] et stocker la valeurdans une variable temporaire que nous appelons temp. On peut ensuitecalculer temp − t. Le calcul se fait donc dans deux etats successifs realisantles actions temp ←− mem[j−1] puis evaluation du signe de temp − t.

L’affectation mem [j] ←− mem[j−1] necessite deux acces a la memoire. Onne peut donc la realiser dans un seul etat de la machine sequentielle. Il fautcomme precedemment utiliser une variable, soit temp, permettant de stockermem[j−1] avant de l’affecter a mem[j] ; a deux etats successifs seront alorsassociees les actions temp ←− mem[j−1] puis mem[j] ←− temp. Comme l’af-fectation temp ←− mem[j−1] se fait juste apres le test mem[j−1] > t, tempcontient deja la valeur de mem[j−1] ; il est donc inutile de realiser cette affec-tation.

version en ligne - [PDF Document] (269)

4. Etudes de cas 261

1

9

10

11

13

7

8

6

5

4

3

2

0 i ←− 1

i−M

j

12

trouve ←− VRAI

j ←− i

t ←− mem[i] || trouve ←− FAUX

Delivrer(fin)

mem[j] ←− temp

j ←− j − 1

i ←− i + 1

mem[j] ←− t

ResNul

ResNul

ResNul

ResPosResPos

ResNul

ResNul

ResNul

trouve

temp ←− mem[j−1]

temp - t

Fig. 11.16 – Machine sequentielle avec actions de la machine a trier

L’initialisation de trouve a FAUX peut etre faite dans le meme etat quel’affectation t ←− mem[i] en se servant de l’initialisation a 0 du registre trouve.

Le calcul du predicat j > 0 et non (trouve) se fait dans deux etats successifs(voir le mecanisme d’eclatement de conditions complexes dans le chapitre 5).

La machine sequentielle avec actions donnee dans la figure 11.16 tientcompte de ces remarques.

4.3.2 Obtention de la PO

On part de la PO type decrite dans le paragraphe 2. La figure 11.17 decritune PO qui permet toutes les actions apparaissant dans les differents etats dela machine sequentielle avec actions donnee precedemment.

version en ligne - [PDF Document] (270)

262 Conception de circuits sequentiels...

SelUAL

SelAdr

TEMP

UALI

BusResultat

InitI

J

JBusA

IBusA

ChTChJChI

ResetTR

TPBusB

ChTEMP

MBusB

TRB

usA

SetTRTPB

usA

SelEntrees

BusDonnees

BusAdressesBus A

Bus BComptesRendus

SelSorties

Op2,Op1

TRT M

Fig. 11.17 – Partie operative pour la machine a trier

Il y a 6 registres permettant de stocker les variables de l’algorithme : I, J,T, TR (pour trouve), M et TEMP (pour la variable intermediaire introduite).Le registre TR ne comporte qu’une seule bascule. Sa liaison sur n fils au busA est completee par des 0.

On se sert d’un operateur unique a deux operandes A et B qui doit permettreles calculs : A, A−B, A−1, A+1 et delivrer les comptes-rendus : resultat nul etresultat positif.

Pour realiser I ←− 1, TR ←− 0 et TR ←− 1 on se sert des commandesd’initialisation des bascules des registres correspondants.

Les entrees/sorties sont effectuees via le bus adresses en sortie et le busdonnees en entree et sortie.

On connecte I, J, TR et TEMP au bus A pour realiser les actions J ←− I, J←− J−1, I ←− I+1 et les calculs necessaires a l’evaluation des predicats I=M,J=0, TEMP>T et non (TR).

On connecte M et T au bus B pour le calcul des predicats I=M et TEMP>T.Pour les actions necessitant un acces memoire en ecriture ou en lecture :

T ←− mem[I], TEMP ←− mem[J−1], mem[J] ←− T, mem[J] ←− TEMP, ona le choix, soit de connecter le bus A ou B au bus adresses, soit de passerpar l’UAL. On choisit la deuxieme solution puisqu’il faut effectuer un calculd’adresses pour l’action TEMP ←− mem[J−1].

On connecte le bus donnees au bus resultat pour les actions comportant unelecture en memoire : T ←− mem[I] et TEMP ←− mem[J−1]. Pour les actionscomportant une ecriture en memoire : mem[J] ←− T et mem[J] ←− TEMP,on transmet J sur le bus adresses en passant par le bus A et l’UAL, et onconnecte T et TEMP au bus B puis le bus B au bus donnees.

En resume, on doit pouvoir avoir sur le bus A le contenu des registres I,J, TR et TEMP. On doit pouvoir avoir sur le bus B le contenu des registres

version en ligne - [PDF Document] (271)

5. Exercices 263

3 j ←− i : IBusA = ChJ = 1, (Op2, Op1) = (0, 1), ChTEMP = ChT = ResetTR= SetTR = φ

4 t ←− mem[i] ; trouve = FAUX : IBusA = ChT = ResetTR = l/e = SelMem= SelAdr = SelEntrees = 1, (Op2, Op1) = (0, 1), ChTEMP = φ

5 j : JBusA = 1, (Op2, Op1) = (0, 1)

7 temp ←− mem[j−1] : JBusA = ChTEMP= l/e = SelMem = SelAdr = Se-lEntrees = 1, (Op2, Op1) = (1, 1)

Fig. 11.18 – Sorties pour quelques etats de l’automate de la figure 11.16 ; sont precisesles signaux a 1 et a φ et omis ceux a 0.

M, T et TEMP. On doit pouvoir charger les registres I, J, TEMP et T par lavaleur presente sur le bus resultat. On doit pouvoir amener la valeur presentesur le bus donnees sur le bus resultat. On doit enfin pouvoir amener la valeurpresente sur le bus B sur le bus donnees.

4.3.3 Obtention de l’automate d’etats fini de la partie controle

Le passage de la machine sequentielle a l’automate d’etats fini se fait commeprecedemment. On peut utiliser le protocole de poignee de mains pour l’actionDelivrer (fin). On remplace l’etat correspondant par les deux etats de l’emetteurdans la poignee de mains (Cf. Paragraphe 3.1).

Nous donnons dans la figure 11.18, pour quelques etats, les sorties de l’au-tomate d’etats fini correspondant a la machine sequentielle avec action dela figure 11.16. Nous utilisons les signaux apparaissant sur la PO de la fi-gure 11.17. Pour les ecritures et lectures en memoire les signaux SelMem et l/ea destination de la memoire sont des sorties supplementaires de l’automate.

Les configurations 00, 01, 10 et 11 des deux signaux Op2 , Op1 qui com-mandent l’operation de l’UAL (OperationUAL) correspondent respectivementaux operations : A + 1, A, A−B, A−1.

4.3.4 Optimisation

On peut simplifier ce circuit en n’utilisant plus de registre pour stockerle booleen trouve. En effet on peut sortir directement de la boucle quand letest du predicat mem[j-1] > t donne VRAI (voir la modification sur la machinesequentielle de la figure 11.19).

5. Exercices

E11.1 : La racine carreeIl s’agit de construire un circuit permettant de calculer la partie entiere de laracine carree d’un entier naturel x. L’algorithme correspondant est donne auparagraphe 3.2 du chapitre 10. En suivant la methode decrite dans ce chapitre

version en ligne - [PDF Document] (272)

264 Conception de circuits sequentiels...

ResNul

ResNul

ResNul

j

mem[j] ←− t

ResPos

ResPos

i ←− i + 1

Delivrer(Fin)

j ←− i

t ←− mem[i]

i ←− 1

i−M

temp ←− mem[j−1]

temp − t

j ←− j − 1

mem[j] ←− temp

ResNul

Fig. 11.19 – Machine sequentielle avec actions optimisee de la machine a trier

version en ligne - [PDF Document] (273)

5. Exercices 265

LexiqueU : un entier > 0 ; fin : un booleen

AlgorithmeTantque VRAI :

Acquerir(U)tantque U > 1 :

si U MODULO 2 = 0 alors U ←− U DIV 2sinon U ←− 3 * U + 1Delivrer (U)

Delivrer(fin)

Fig. 11.20 – Algorithme de la suite de Syracuse

UAL

Op

SelEntrees

SelSorties

SelUAL

horloge

U

ChU

ResNeg

Bus Resultat

Bus A

Sorties

Entrees

BitPoidsFaible

Fig. 11.21 – Une partie operative pour la suite de Syracuse

donner une PO et une PC permettant de realiser cet algorithme ; s’inspirer dela PO type donnee a la section 2.

E11.2 : La suite de SyracuseLa figure 11.20 donne l’algorithme correspondant au calcul de la suite de Syra-cuse. La figure 11.21 represente une PO issue de la PO type du paragraphe 2.permettant de realiser cet algorithme. Donner la machine sequentielle avec ac-tions correspondant a l’algorithme et utilisant cette PO. Les comptes-rendus del’UAL sont le bit de poids faible et le signe du resultat. En deduire l’automated’etats fini correspondant. Faire une synthese cablee de cet automate avec uncodage compact. On choisira pour cela un codage pour les trois operations del’UAL (Op) : 1−X, X DIV 2 et 3*X+1. On effectuera les entrees/sorties a l’aidedu protocole a poignee de mains via les bus Entrees et Sorties pour U.

version en ligne - [PDF Document] (274)

266 Conception de circuits sequentiels...

version en ligne - [PDF Document] (275)

Troisieme partie

Techniques del’algorithmique logicielle

version en ligne - [PDF Document] (276)

version en ligne - [PDF Document] (277)

Chapitre 12

Le langage machine et lelangage d’assemblage

Nous avons etudie au chapitre 4 un ensemble de modeles des traitementsqu’on peut vouloir faire effectuer par un dispositif informatique. Toutefois, niles langages de programmation de haut niveau, ni les machines sequentielles,ne sont directement exploitables par un ordinateur, tel que nous l’avons definien introduction.

Le seul langage comprehensible par un ordinateur est le langage machinede son processeur. Un programme en langage machine est une suite finie debits, que le processeur interprete. Nous etudions au chapitre 14 les circuitssequentiels qui realisent cette tache d’interpretation. Un langage machine, bienque difficilement lisible par un etre humain, possede une structure : il estpossible d’y voir une suite de paquets de bits, chacun codant une instruction duprocesseur, c’est-a-dire une operation elementaire realisable par le processeur(par exemple additionner deux entiers codes sur un octet).

Concevoir un langage machine est une tache indissociable de la conceptiondu processeur. On doit choisir un ensemble d’instructions (on dit aussi : jeud’instructions) de maniere a fournir un modele de calcul universel, mais ce n’estpas la seule contrainte. On peut avoir a assurer la compatibilite ascendantedans une famille de processeurs, c’est-a-dire a assurer que les programmes enlangage machine qui fonctionnaient sur un processeur de la generation n sontreutilisables sur le processeur de la generation n + 1.

Pour definir completement un langage machine, il faut ensuite choisir uncodage de l’ensemble des instructions sur un certain nombre de bits.

Si l’on suppose donnes le processeur et son langage machine, on peuts’interesser au probleme de la programmation de ce dispositif par un etre hu-main, qui ne saurait s’exprimer directement en termes de sequences de bits.Le langage d’assemblage est un langage textuel bati sur le modele du langagemachine. Il a la meme structure, c’est-a-dire les memes instructions, mais il senote par du texte.

Traduire le langage d’assemblage en langage machine suppose : une analyse

version en ligne - [PDF Document] (278)

270 Le langage machine et le langage d’assemblage

lexicale et syntaxique du texte, pour y reperer les structures ; la verificationdes contraintes d’utilisation des operateurs et operandes ; un codage des struc-tures en sequences de bits. Nous etudions les principes de cette traductiondans le present chapitre. C’est par ailleurs la tache principale de l’outil appeleassembleur des environnements de programmation. Nous verrons egalement auchapitre 18 les aspects de compilation separee ou d’abstraction vis-a-vis de laposition en memoire a l’execution. Nous verrons au chapitre 13 que le langaged’assemblage est lui-meme une cible pour la traduction des langages de hautniveau.

Dans le paragraphe 1. nous exposons la demarche de conception d’un lan-gage machine : choix du jeu d’instructions et codage, en prenant quelquesexemples parmi les processeurs existants. Le paragraphe 2. decrit les ca-racteristiques d’un langage d’assemblage construit sur le langage ma-chine. Les problemes de la traduction du langage d’assemblage vers lelangage machine correspondants sont etudies au paragraphe 3. Enfin nousdonnons au paragraphe 4. un exemple de programme, sous 5 formes : unalgorithme du langage d’actions decrit au chapitre 4 ; un texte ecrit dansun langage d’assemblage pour un processeur 68000 ; un texte d’un langaged’assemblage pour processeur sparc ; un programme en langage machine68000 ; un programme en langage machine sparc.

1. Le langage machine

1.1 Description generique de la machine

Pour definir la notion de langage machine, et proposer des criteres de choixd’un ensemble d’instructions qui constitue un modele de calcul universel, ilfaut tout d’abord definir precisem*nt la machine.

Nous nous restreignons ici au modele d’architecture de Von Neu-mann [BGN63] : une machine comporte une unite de calcul (qui realise desoperations de base sur les entiers codes en binaire) et une memoire qui contientdes operandes et des codes d’operations (les instructions). Les instructions sontexecutees dans l’ordre ou elles sont rangees en memoire.

Nous distinguons par la suite :

– Une memoire de grande taille, dont les elements sont designes par desnumeros qu’on appelle des adresses. C’est la memoire que nous avons ma-nipulee en en donnant une abstraction par le tableau MEM au chapitre 4.Nous parlerons souvent de memoire principale

– Une memoire de plus petite taille dont les elements, appeles registres, sontdesignes par des noms ou par des numeros courts. Sur certaines machineson distingue des registres donnees et des registres adresses, avec des instruc-tions travaillant sur l’une des categories de registres seulement. Sur d’autres

version en ligne - [PDF Document] (279)

1. Le langage machine 271

machines, au contraire, les registres sont banalises. Les machines les plusanciennes ne comportaient qu’un seul registre, dit accumulateur

Nous detaillons au chapitre 14 l’influence de ce genre de distinction sur ce qu’onappelle la partie operative du processeur, c’est-a-dire la structure du circuit quiconnecte l’unite de calcul aux bus et aux divers registres.

La distinction entre ces deux types de memoire permet de tenir compte, dans lechoix d’un jeu d’instructions, de criteres tels que le temps d’acces a la memoire :les registres sont accessibles plus rapidement que la grande memoire. Nous ver-rons au chapitre 15 que les registres sont en general situes physiquement dansle processeur, contrairement a la grande memoire. D’autre part les adressesdes octets dans la grande memoire sont des entiers assez longs (typiquement32 bits), qui soit ne peuvent pas apparaıtre tels quels dans le codage d’une ins-truction (Cf. Paragraphe 1.3), soit en ralentissemnt l’execution ; en revanche,les adresses ou numeros des registres sont de petit* entiers — 5 bits sur le pro-cesseur sparc1 par exemple — et peuvent donc apparaıtre comme designationd’operande dans le codage d’une instruction.

1.2 Elements et structure du langage machine

Un programme ecrit en langage machine est une suite finie de codagesbinaires d’instructions eventuellement parametrees.

1.2.1 Instructions et codage

Une instruction elementaire peut etre par exemple un transfert memoirevers memoire, dont l’effet peut etre decrit par une phrase du langage d’actionspresente au chapitre 4 : MEM[a] ←− 4 MEM[b]. Dans ce cas le codage completde l’instruction comprend : les representations en binaire pur des adresses aet b, codees sur un certain nombre de bits fixe ; le codage du type d’operationeffectue : transfert memoire vers memoire de taille 4 octets. En langage machine68000, cette instruction est codee sur 16 + 32 + 32 bits. Les 16 premiers bitscodent le type d’operation effectue, la taille du transfert et le fait que l’on doittrouver ensuite deux adresses de 32 bits ; les 32+32 bits suivants codent lesdeux adresses d’operandes (voir paragraphe 1.3 pour un expose des principesde codage des instructions).

L’ajout d’une constante a une case memoire (MEM[a] ←− MEM[a] + k)peut egalement constituer une instruction elementaire dans un langagemachine. Dans ce cas le codage complet de l’instruction comporte : larepresentation en binaire pur de l’adresse a ; le codage du type d’operationeffectue : incrementation de case memoire designee par son adresse ; le codagebinaire de la constante k.

1Dans ce chapitre, sparc designe le sparc V8 qui a des mots de 32 bits, et non le sparcV9, qui a des mots de 64 bits.

version en ligne - [PDF Document] (280)

272 Le langage machine et le langage d’assemblage

1.2.2 Notion de compteur programme

Sauf indication contraire, une suite d’instructions est lue sequentiellementpar le processeur, qui interprete chacune d’entre elles, et passe a celle qui setrouve en memoire a l’adresse suivante. Le processeur gere donc ce qu’on ap-pelle le compteur programme, qui donne le numero de la prochaine instructiona lire. Le compteur programme est incremente a chaque instruction.

Comme consequence de l’interpretation d’une instruction, le processeurpeut modifier le contenu de la memoire ou d’un registre, ou commander uneoperation de l’unite de calcul. Il peut egalement modifier le numero (l’adresse)de la prochaine instruction a lire. On parle alors de rupture de sequence, oubranchement. Une instruction de rupture de sequence doit comporter l’adressede destination. Une rupture de sequence peut etre inconditionnelle, auquel casl’interpretation de l’instruction produit toujours le meme effet ; elle peut etreconditionnee, par exemple, par le signe du contenu d’une case memoire, in-terprete comme un entier relatif ou comme le resultat d’un calcul. Dans cecas la rupture effective de sequence, lors d’une execution, depend de l’etat desdonnees et donc de la memoire a ce moment-la.

1.2.3 Designation d’adresse et modes d’adressage

Nous traitons dans ce paragraphe de tout ce qui concerne les mecanismesde designation d’emplacements en memoire (memoire principale ou registres),utilisables dans toute instruction de calcul si elle a des operandes en memoire,dans les instructions de transfert depuis ou vers la memoire, et dans les ins-tructions de rupture de sequence. Ces mecanismes sont appeles des modesd’adressage. La figure 12.1 en donne une vue synthetique.

Considerons tout d’abord le cas des instructions de calcul. Lorsqu’elles com-portent un ou plusieurs operandes en memoire, le ou les parametres correspon-dants de l’instruction doivent designer une adresse d’octet en memoire. Ce peutetre fait en donnant directement dans l’instruction une constante entiere posi-tive qui est l’adresse voulue (c’est le cas dans l’exemple MEM[a] ←− 4 MEM[b]evoque ci-dessus). On parle alors d’adressage absolu. Ce peut etre faitegalement en donnant comme parametre un numero de registre, dont lecontenu, lors de l’execution, donnera l’adresse memoire ; il s’agit dans ce casd’adressage indirect par registre.

Il en existe de nombreuses variantes : indirect par registre avecdeplacement ; indirect par registre predecremente (ou postincremente, ou pre-incremente, ou post-decremente) avec ou sans deplacement, etc. Le memeraisonnement est valable pour les instructions de transfert depuis ou vers lamemoire.

Dans le cas des instructions de rupture de sequence, il faut indiquer d’unemaniere ou d’une autre a quelle adresse se trouve la prochaine instruction aexecuter, puisque ce n’est pas l’instruction suivante. Il existe deux sortes debranchements : les branchements relatifs a la position courante du compteur

version en ligne - [PDF Document] (281)

1. Le langage machine 273

programme — l’instruction specifie alors un deplacement en avant ou en arrierepar rapport au compteur programme — et les branchements absolus — l’ins-truction specifie une nouvelle valeur du compteur programme, qui doit ecraserl’ancienne. L’instruction doit donc specifier un deplacement ou une adresseabsolue. Dans les deux cas, on peut imaginer que cette donnee est fournie di-rectement comme une constante dans l’instruction, ou indirectement dans unregistre.

Le tableau 12.1 resume les diverses manieres d’indiquer une adressememoire dans une instruction. Pour nommer les modes d’adressages, nousavons utilise les termes les plus couramment employes. Le mode indirect parregistre avec index est un adressage indirect par registre avec deplacement,le deplacement etant stocke dans un registre au lieu d’etre donne par uneconstante codee dans l’instruction.

Noter que pour une meme instruction, plusieurs modes d’adressage peuventetre possibles. Voir aussi le paragraphe 1.3 qui traite du codage des instruc-tions, pour comprendre comment distinguer les differents cas.

1.2.4 Modele de calcul universel,modele de Von Neumann et langage machine type

La premiere contrainte a respecter dans la conception du jeu d’instructionsd’un processeur est d’assurer un modele de calcul universel. La comprehensioncomplete de cette contrainte demande quelques connaissances en calculabilite,mais il est facile de se convaincre a l’aide d’exemples extremes, comme le codagedes boucles, que le probleme se pose effectivement.

Il est en effet assez facile de se convaincre qu’un langage de haut niveauqui ne disposerait pas de structures iteratives, sous quelque forme que ce soit,ne permettrait pas de coder tout algorithme. Or les structures iteratives cor-respondent aux ruptures de sequence dans le langage machine. Un langagemachine qui ne permettrait pas ainsi de modifier l’adresse de la prochaineinstruction a lire, de maniere conditionnelle, serait donc incomplet.

La contrainte de fournir un modele de calcul universel est realisable avec unlangage machine a une seule instruction complexe, du genre : acces memoireen lecture avec adressage indirect, conditionnel. Programmer directement dansun tel langage serait deja tres difficile, et ecrire un compilateur de langage dehaut niveau — c’est-a-dire un algorithme capable de traduire tout texte deprogramme de haut niveau en suite de telles instructions — serait encore plusardu.

Il ne suffit donc pas que le jeu d’operations offertes garantisse un modelede calcul universel. Le modele de machine dit de Von Neumann repose sur lesclasses d’instructions suivantes : transfert de donnees (chargement depuis unregistre, chargement depuis la memoire, stockage dans la memoire) ; branche-ments inconditionnels et conditionnels ; operations arithmetiques et logiques.Le paragraphe 1.4 presente ces grandes classes d’instructions plus des instruc-

version en ligne - [PDF Document] (282)

274 Le langage machine et le langage d’assemblage

nom usuel Information conte-nue dans le codagede l’instruction

valeur a utiliser(pour operandessources de calculet sources detransferts)

adresseeffective(pourresultats etcibles detransferts)

effeteventuelsur lesoperandes

Pour les instructions de calcul et les transferts memoire

immediat une constante rela-tive k

k - -

absolu une constante na-turelle k

MEM[k] k -

registre di-rect

un numero n contenu de Regn Regn -

indirect parregistre

un numero n MEM[contenu deRegn]

contenu deRegn

-

indirect parregistre avecindex

deux numeros n etd

MEM[contenu deRegn + contenude Regd]

contenu deRegn +contenu deRegd

-

indirect parregistre avecdeplacement

un numero n, uneconstante relatived

MEM[contenu deRegn + d]

contenu deRegn + d

-

indirect parregistre pre-decremente

un numero n MEM[contenu deRegn - t]

contenu deRegn - t

Regn

←− Regn

- t

indirectpar re-gistre post-decremente

un numero n MEM[contenu deRegn]

contenu deRegn

Regn

←− Regn

- t

Pour les instructions de rupture de sequence

relatif aucompteurprogramme

une constante rela-tive d

- PC + d ×N

-

absolu une constante na-turelle k

- k -

Fig. 12.1 – Modes d’adressage usuels. Noter que, pour les adressages indirects par re-gistre avec pre (ou post) incrementation (ou decrementation), l’effet surle registre d’indirection est de la forme : Regn ←− Regn op t, ou op estl’operation + ou l’operation −, et t ne vaut pas necessairement 1. t dependde la taille de l’operation, c’est-a-dire de la taille des operandes. Par exemple,si l’instruction travaille sur des mots de 32 bits, t = 4. Pour les adressagesrelatifs au compteur programme PC, la constante d donnee dans l’instructionpeut eventuellement etre multipliee par une constante N. Voir un exempleparagraphe 1.4.3.

version en ligne - [PDF Document] (283)

1. Le langage machine 275

tions specifiques comme l’on en trouve dans toute machine.On trouve parfois le terme d’architecture de Von Neumann, ou la memoire

contient a la fois les donnees et les instructions, par opposition a l’architec-ture de Harvard, ou deux memoires specifiques contiennent, l’une les donnees,l’autre les instructions. Les deux architectures ont la meme puissance d’expres-sion.

1.3 Codage des instructions

Nous avons donne au paragraphe 1.2.1 des exemples d’instructions, en in-diquant brievement quelles sont les informations a coder. Nous precisons ci-dessous l’ensemble des informations a coder, avant d’etudier les contraintesqui portent sur la structure du code. Le codage complet d’une instructionest obtenu par juxtaposition des codages des differentes informations qui ladefinissent ; on dit que le codage d’une instruction est structure en champs(Cf. Figure 12.2) ; c’est aussi le terme utilise pour les noms des differentesinformations qui composent un type construit n-uplet (Cf. Chapitre 4).

1.3.1 Codage de la nature de l’operation

L’operation effectuee est prise parmi toutes les operations de l’unite de cal-cul, les transferts entre memoire et registres, les branchements, les instructionsspecifiques eventuelles (Cf. Paragraphe 1.4 pour une liste detaillee d’instruc-tions).

Si le jeu d’instructions comporte n instructions, le codage compact de lanature de l’operation demande b = d log2n e bits (l’entier immediatementsuperieur a log2n). Il n’y a aucune raison pour que le nombre d’instructionsd’une machine soit exactement une puissance de 2, et il existe donc toujours aumoins une configuration d’un vecteur de b booleens qui ne correspond a aucuneinstruction. Cela justifie le cas d’erreur dans l’algorithme d’interpretation dulangage machine du paragraphe 1.6.2 ci-dessous, et constitue l’une des causesd’interruption logicielle etudiees dans la partie VI.

On suppose que la nature d’une instruction comporte implicitement l’infor-mation sur le nombre d’operandes. Meme si l’on imagine un langage machineoffrant par exemple une addition binaire et une addition ternaire, on considereque ce sont deux instructions differentes a compter dans les n instructions,et a coder globalement. Cela donne un codage plus compact que de separerle codage de la nature de l’instruction et le codage d’un entier donnant lenombre d’operandes (qui pour une grande majorite des operations est toujoursle meme). De maniere generale, le choix de la structure des informations quiconstituent une instruction, c’est-a-dire le choix des champs, a une influencesur la compacite du codage.

version en ligne - [PDF Document] (284)

276 Le langage machine et le langage d’assemblage

1.3.2 Codage des modes d’adressage des parametres

Si le langage machine est tel qu’une meme operation accepte la designationd’operandes avec differents modes d’adressage, il faut coder le mode d’adres-sage de chacun des operandes. Ce peut etre reduit a 1 bit, comme dans le cas desoperations arithmetiques du sparc : une instruction d’addition, par exemple,a toujours 3 parametres, les emplacements des deux operandes et l’emplace-ment du resultat. Le resultat et l’un des operandes sont forcement dans desregistres. Le deuxieme operande peut etre dans un registre ou etre une va-leur immediate. Pour distinguer ces deux cas, le codage du mode d’adressagede ce deuxieme operande comporte 1 bit. Dans le cas du 68000, en revanche,toutes les operations de calcul acceptent des operandes dans des registres, ouen memoire avec des modes d’adressage varies. Le codage complet du moded’adressage de chaque operande comporte 3 bits.

1.3.3 Codage des informations mises en jeu dansle mode d’adressage

La nature de l’instruction, plus le mode d’adressage des parametres,determine entierement quelle est la taille du reste du code (operandes), et com-ment il faut l’interpreter. En reprenant la deuxieme colonne du tableau 12.1, onobtient les differentes informations a coder : des entiers naturels (qui peuventrepresenter des adresses memoire absolues), des entiers relatifs (qui peuventrepresenter des deplacements de branchements ou des operandes d’operationsarithmetiques), des numeros de registres.

En general le nombre de registres est une puissance de 2, ce qui permet uncodage compact et sans trous d’un numero de registre. Sur le sparc, les 32registres sont codes sur 5 bits. Toute configuration d’un vecteur de 5 booleenscorrespond a un numero de registre existant.

Les entiers sont codes (en binaire pur ou complement a 2) sur une taillepredefinie (c’est toujours la meme, elle est donc implicite et non codee). Lejeu d’instructions 68000 distingue une addition generale et une addition diterapide, selon que l’un des operandes est un entier long (32 bits) ou un entiercourt tenant sur un octet. Dans ce cas, la taille de l’entier parametre est enfait codee dans la nature de l’instruction : il y a deux additions.

1.3.4 Structure du code

La figure 12.2 donne des exemples de structures de code. Le code d’uneinstruction complete comporte le codage de la nature de l’operation, le codagedes modes d’adressage des operandes (si necessaire), le codage des informa-tions effectives des operandes (entiers, adresses, numeros de registres). Cesdifferents codages doivent etre juxtaposes pour former le codage complet del’instruction. Sur certaines familles de machines, les codes des differentes ins-tructions peuvent avoir des tailles differentes. Lorsque la taille est variable, elle

version en ligne - [PDF Document] (285)

1. Le langage machine 277

est entierement determinee par la nature de l’instruction et les modes d’adres-sage des operandes. Ces deux informations doivent etre codees dans les pre-miers mots du code complet de l’instruction, puisqu’ils seront lus en premier.En 68000 par exemple, le premier mot de 16 bits contient ces deux informa-tions, plus les informations relatives a l’un des operandes, si elles tiennent dansla place restante.

Le choix du codage precis est guide par des considerations materielles,qui portent sur la structure du circuit qui constitue l’interface entre la partieoperative et la partie controle du processeur (Cf. Chapitre 14). Par exempleles portions de code qui correspondent a des numeros de registres sont situeesau meme endroit quelle que soit l’instruction, de maniere a simplifier la par-tie operative du processeur : les fils de selection de l’ensemble des basculesqui realise les registres sont toujours branches sur les memes bits du registreinstruction.

Cette contrainte, plus le fait que les valeurs immediates sont necessairementcontigues (c’est plus pratique pour la generation de langage machine depuisle langage d’assemblage, et cela evite des chevauchements de nappes de filsdans le circuit interprete), peut amener a couper le codage de la nature del’instruction. Par exemple, sur le sparc, la nature de l’instruction est codeesur les bits 31, 30, et 19 a 24. Entre ces deux champs on trouve 5 bits pour lenumero de registre destination.

1.4 Classes d’instructions usuelles

1.4.1 Instructions de calcul

En langage machine il n’y a pas de typage des donnees, mais les types sontimplicites dans les operations offertes. Certaines instructions ne sont utiliseesque si le programmeur interprete la correspondance entre vecteurs de booleenset entiers selon un certain code (binaire pur, complement a 2, virgule flottante,decimal code binaire, pixels...). Il existe des operations qui ont un sens si oninterprete les vecteurs de bits comme le codage d’entiers (ADD, branchementssur codes de conditions entieres, voir ci-dessous), et il existe des operationsqui les interpretent comme des vecteurs de booleens (AND). En revanche il n’enexiste pas qui les interpretent comme le code ASCII d’un caractere ; ce seraitle cas s’il existait une instruction specifique du langage machine capable detransformer un vecteur de bits representant le caractere ’a’ en vecteur de bitsrepresentant le caractere ’A’ ; cette operation est evidemment realisable surtout processeur, mais en passant par le codage des caracteres par des entiersou des vecteurs de booleens. Les seuls types sont donc les entiers et les vecteursde booleens ; l’extension MMX [Int97] et VIS offrent de plus des operations quiinterpretent les vecteurs de 32 bits comme 4 sous-vecteurs de 8 bits.

version en ligne - [PDF Document] (286)

278 Le langage machine et le langage d’assemblage

0121314181924252930311 0 0 1 0 0 0 0 10 0 0 1 0 0 0 0 0 1 01010100000 00

0 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1

0 1 0 1 0 1 1 1 1 0 1 1 0 0 1 01110000101000000

Valeur immediate operande :

(b)42424242 code sur 32 bits(poids forts d’abord).

Numero de registre : 7

Taille de l’operation :

Nature de l’operation : AddI

long mot (32 bits)

Mode d’adressage pour le resultat :registre donnee

operande immediat : 42numerodu reg.dest. : 2

numerodu reg.source : 1

Nature de l’operation : Addcc Mode d’adressage du deuxiemeoperande : immediat.

(a)

Fig. 12.2 – Structure du codage d’une instruction :(a) codage de l’instruction addcc %r1, 42, %r2 du sparc ;(b) codage de l’instruction addi ]42424242, D7 du 68000 (noter que4242424210 = 028757B216).

Operations sur les entiers Tous les processeurs offrent les operations d’ad-dition et de soustraction d’entiers. La meme instruction est utilisable pour lesoperations sur les naturels codes en binaire bur et sur les entiers codes encomplement a deux, grace aux bonnes proprietes du codage en complement adeux (Cf. Chapitre 3). La difference d’interpretation du codage des entiers ap-paraıt dans les instructions de branchement conditionnels (paragraphe 1.4.3).

Certains processeurs offrent egalement la multiplication et la divisionentiere ; mais ce sont des instructions couteuses en temps ou en surface du cir-cuit interprete. Le sparc offre une instruction mulscc effectivement executableen temps egal a celui d’une addition, mais cette instruction ne constitue qu’unpas de la multiplication 32 bits (la version 9 offre une vraie multiplication).Pour realiser la multiplication de deux entiers 32 bits, il faut ecrire 32 instruc-tions mulscc en sequence. Le 68000 offre deux instructions muls et mulu demultiplication de deux entiers signes ou non de 16 bits, dont le resultat est sur32 bits ; il offre de meme deux instructions divs et divu.

Lorsque la multiplication et la division generale n’existent pas, on trouvetoutefois les instructions de decalage arithmetique, qui permettent la divisionet la multiplication par des puissances de 2. (Cf. Chapitre 3, paragraphe 2.2.3).

version en ligne - [PDF Document] (287)

1. Le langage machine 279

Operations sur les vecteurs de booleens Les operations sur les vecteursde booleens sont les extensions bit a bit des operateurs booleens usuels et, ou,non, nand, etc. Elles n’existent pas necessairement toutes. Par exemple le sparcoffre AND et ANDN, OR et ORN, XOR et XORN, mais pas de NOT. ANDN (resp. ORN)calcule la conjonction (resp. la disjonction), bit a bit, du premier operandeet de la negation bit a bit du second. Les proprietes de l’algebre de Boolepermettent de fabriquer les operateurs manquants en termes des operateursdisponibles.

Pour utiliser les operations sur les vecteurs de booleens dans la compila-tion des operations booleennes des langages de haut niveau, il faut inventerun bon codage des booleens du langage de haut niveau (Cf. Chapitre 4, para-graphe 2.2.1 et chapitre 13, paragraphe 1.2).

Operations structurelles Les operations structurelles manipulent les vec-teurs de bits sans interpretation particuliere de leur signification. Ce sont lesdecalages logiques, a droite ou a gauche. Un decalage a droite, combine avecla conjonction booleenne bit a bit utilisee comme masquage, permet d’exa-miner individuellement tous les bits d’un vecteur de bits, ou d’extraire dessous-champs de longueur quelconque.

Par exemple, l’algorithme suivant permet de calculer le nombre de 1 dansun vecteur de bits. Il utilise une operation ET bit a bit avec l’operande 1 (c’est-a-dire le vecteur de bits qui n’a qu’un 1 en poids faible) pour tester le bit depoids faible de V. A chaque etape, le vecteur V est decale d’un bit vers ladroite.

lexique :V : un vecteur de bits ; Nb : un entier ≥ 0

algorithmeNb ←− 0tantque V 6= 0

si (V ET bit a bit 1 = 1) alors Nb ←− Nb+1decaler V d’un bit vers la droite

Nombre d’operandes Toutes les operations examinees ci-dessus sont bi-naires : elles ont deux operandes et un resultat. On pourrait donc penser queles instructions du langage machine doivent necessairement designer 3 emplace-ments memoire ou registres. C’est le cas pour les machines dites a 3 referencescomme le sparc, ou l’on ecrit par exemple ADD g1, g2, g3 pour realiser l’af-fectation g3 ←− g1+g2. Une reference est la designation d’un operande oudu resultat, que ce soit un numero de registre ou une adresse en memoire.Mais il est possible de reduire le nombre de references, et l’on obtient ainsi desmachines dites a 0, 1 ou 2 references (voir exercice E12.1).

Le 68000 est une machine a deux references. Les operations sont de la formedest ←− source op dest, et l’instruction contient donc la designation de 2emplacements seulement. L’un est utilise a la fois en lecture et en ecriture.

version en ligne - [PDF Document] (288)

280 Le langage machine et le langage d’assemblage

Si l’on veut maintenant ne designer qu’un emplacement, il faut que ledeuxieme soit implicite. C’est le cas si l’on introduit un registre dit accu-mulateur note Acc. Les instructions sont alors de la forme : Acc ←− Acc +

source. Le registre accumulateur doit etre charge auparavant par un transfertmemoire-registre ou registre-registre.

Finalement, on peut imaginer une machine a 0 reference, ou les positionsdes deux operandes et du resultat sont implicites. On obtient, par exemple,une machine a pile. Toute operation depile les deux valeurs de sommet de pilecomme operandes, et empile le resultat de l’operation. Une instruction est doncde la forme : PILE[Sp+1] ←− PILE[Sp] + Pile[Sp+1] ; Sp ←− Sp+1, siSp pointe sur le dernier emplacement occupe et si la pile progresse en diminuantSp.

1.4.2 Instructions de transfert entre memoire et registres

Pour realiser un transfert de ou vers la memoire, il faut pouvoir designer unemplacement en memoire, c’est-a-dire fournir l’adresse de son premier octet,et sa taille en nombre d’octets.

Taille de transferts La taille n’est pas a proprement parler un operandede l’instruction. Les tailles des transferts disponibles sont le plus souvent desconstantes, en petit nombre. En general les tailles prevues vont de 1 octet (laplus petite unite adressable sur une machine) jusqu’a la taille du plus longmot manipulable par le jeu d’instructions, qui est aussi la taille des registresde donnees (Cf. Chapitres 9 et 15). Sur sparc on trouve ainsi des transferts de1, 2, ou 4 octets ; on trouve aussi un transfert double de 8 octets, qui concernedeux registres de numeros consecutifs.

Noter toutefois qu’il existe sur le vax une instruction de copie de blocsmemoire, dont la taille est un vrai parametre, donne par exemple par le contenud’un registre, a l’execution. Un telle instruction a un effet equivalent a celuid’une boucle de transferts de taille fixe. Elle peut avoir un interet si le proces-seur garantit une execution plus rapide de la forme a instruction unique, parrapport a la forme avec boucle (transferts de taille fixe, comptage et branche-ments explicites).

Specification complete des transferts Pour realiser un transfert de ouvers un (ou plusieurs) registres, il faut designer un registre (par son numero)et eventuellement un sous-champ de ce registre.

Prenons l’exemple du jeu d’instructions sparc. Il y a 32 registres de 32bits. Les transferts memoire sont de taille 1, 2, 4 ou 8 octets. Une instructionde transfert memoire vers registre est de la forme : LOAD t a r ou t est uneconstante parmi 1, 2, 4, 8 ; a est une adresse d’octet (voir tableau 12.1 pourl’obtention de cette adresse) ; r est un numero de registre, dans l’intervalle[0, 31]. Pour un transfert de taille 4, l’operation est parfaitement specifiee, la

version en ligne - [PDF Document] (289)

1. Le langage machine 281

source et la destination ayant la meme taille. Pour des transferts de taille 1 ou2, deux questions se posent : puisque la destination (un registre, de 4 octets)est plus grande que le transfert demande, dans quelle portion du registre doit-on ecrire ? Doit-on inscrire une valeur et, si oui, laquelle, dans la portion deregistre inutilisee ?

Sur le sparc, les transferts ont toujours pour destination la portion depoids faible des registres. La portion de poids fort est completee, soit par deszeros (on parle alors de transfert non signe), soit par une recopie du bit depoids fort de la portion transferee (on parle alors de transfert signe). Cetteoperation rappelle bien evidemment l’operation d’extension de format, tenantcompte du codage en binaire pur ou complement a deux, que nous avons etudieeau chapitre 3, paragraphe 3.2.1.

Sur le 68000, la portion d’un registre qui n’est pas destination du transfertest laissee intacte.

Sur le sparc, les instructions de transfert memoire vers registres, de tailleinferieure a 4, existent donc en deux versions : la version dite signee, et laversion non signee. Ces differentes conventions sont illustrees et detaillees dansla figure 12.3 (cas du LOAD de sparc). Les noms des instructions sont obtenusen combinant LD (pour LOAD) ou ST (pour STORE), le caractere signe ou nondu transfert (U pour unsigned, rien pour signed), et un caractere specifiantla taille : B pour byte, c’est-a-dire octet, H pour half, rien pour la taille d’unmot, D pour double. Dans le cas des transferts doubles, 2 registres R et R’interviennent. L’instruction n’en designe qu’un ; le deuxieme est implicite, c’estle registre de numero suivant. De plus, le registre indique doit avoir un numeropair. On retrouve la, pour l’ensemble des registres, l’equivalent des contraintesd’alignement en memoire.

Lors d’un transfert registre vers memoire (cas des STORE du sparc, fi-gure 12.3), des questions symetriques se posent. Si la taille du transfertest inferieure a celle du registre source, quelle portion du registre doit-ontransferer ? D’autre part, si la taille du transfert est superieure a l’octet,l’adresse en memoire doit satisfaire les contraintes de cadrage en memoirementionnees au chapitre 4, paragraphe 2.3. Si l’adresse en memoire est uneconstante, cette contrainte d’alignement est verifiable statiquement, c’est-a-dire avant l’execution, et le programme peut-etre rejete. En general, toutefois,l’adresse en memoire n’est pas une constante ; c’est par exemple le contenu d’unregistre, dans le cas de l’adressage indirect par registre. La contrainte d’aligne-ment est alors verifiee dynamiquement, c’est-a-dire au moment de l’executiondu programme par le processeur.

Nous verrons au chapitre 24 que ces erreurs d’alignement en memoire lors destransferts font partie des exceptions ou interruptions logicielles prevues dansun processeur.

version en ligne - [PDF Document] (290)

282 Le langage machine et le langage d’assemblage

aa + 1a + 2a + 3

31 07815162324zyxw

R

Operations STORE1 octet

registre 32 bits

Memoire

Operations LOAD

transfert taille signe inst. effet

MEM → R 4 – LD R[7..0] ←− 1 MEM[a+3] ;R[15..8] ←− 1 MEM[a+2] ;R[23..16] ←− 1 MEM[a+1] ;R[31..24] ←− 1 MEM[a]

MEM → R 2 non LDUH R[7..0] ←− 1 MEM[a+1]R[15..8] ←− 1 MEM[a] ;R[31..16] ←− 2 ext16(0)

MEM → R 2 oui LDH R[7..0] ←− 1 MEM[a+1]R[15..8] ←− 1 MEM[a] ;R[31..16] ←− 2 ext16(R[15])

MEM → R 1 non LDUB R[7..0] ←− 1 MEM[a] ;R[31..8] ←− 3 ext24(0)

MEM → R 1 oui LDB R[7..0] ←− 1 MEM[a] ;R[31..8] ←− 3 ext24(R[7])

MEM → R, R’ 8 – LDD idem LD plus :R’[7..0] ←− 1 MEM[a+7] ;R’[15..8] ←− 1 MEM[a+6] ;R’[23..16] ←− 1 MEM[a+5] ;R’[31..24] ←− 1 MEM[a+4]

R → MEM 4 – ST MEM[a] ←− 1 R[31..24] ;MEM[a+1] ←− 1 R[23..16] ;MEM[a+2] ←− 1 R[15..8] ;MEM[a+3] ←− 1 R[7..0]

R → MEM 2 – STH MEM[a] ←− 1 R[15..8] ;MEM[a+1] ←− 1 R[7..0]

R → MEM 1 – STB MEM[a] ←− 1 R[7..0]

R, R’ → MEM 8 – STD idem ST plus :MEM[a+4] ←− 1 R’[31..24] ;MEM[a+5] ←− 1 R’[23..16] ;MEM[a+6] ←− 1 R’[15..8] ;MEM[a+7] ←− 1 R’[7..0]

Fig. 12.3 – Transferts registres vers memoire et memoire vers registres du sparc. Onnote ext16(b) (resp. ext24(b)) le mot de 16 (resp. 24) bits obtenu en copiant16 fois (resp. 24 fois) le booleen b.

version en ligne - [PDF Document] (291)

1. Le langage machine 283

1.4.3 Instructions de rupture de sequence

Pour definir completement les instructions de rupture de sequence, il fautspecifier, d’une part l’instruction de destination, d’autre part la condition debranchement. Les branchements sont dits relatifs ou absolus selon la maniered’indiquer l’instruction de destination. Ils sont dits inconditionnels lorsque lacondition est la constante booleenne vrai. Si la condition de branchement a lavaleur faux il y a passage en sequence.

Branchements relatifs ou absolus Le branchement peut etre relatif ala position courante du compteur programme — l’instruction specifie alors undeplacement d en avant ou en arriere par rapport au compteur programme— ouabsolu — l’instruction specifie une nouvelle valeur v du compteur programme,qui doit ecraser l’ancienne. L’effet d’une instruction de branchement relatif surle compteur programme note PC est de la forme : PC ←− PC + d. L’effet d’uneinstruction de branchement absolu, au contraire, est de la forme PC ←− v.

Que l’on indique un deplacement ou une adresse de destination absolue, ilfaut choisir un mode d’adressage : par une constante immediate, indirectementpar un registre, avec ou sans deplacement, etc.

Noter que la notion de branchement relatif ou absolu est parfaitementindependante du mode d’adressage direct ou indirect. On peut envisager toutesles combinaisons. Il existe ainsi sur le sparc une instruction jmpl de branche-ment inconditionnel, absolu, indirect par registre avec deplacement : le codagede l’instruction contient deux numeros de registres n1 et n2 (ou bien un numerode registre n et une constante relative d). L’effet sur le compteur programmeest de la forme PC ←− Regn1 + Regn2 (ou bien PC ←− Regn + d). Il existeaussi une instruction ba de branchement inconditionnel, relatif, immediat.

Donnee du deplacement En cas de branchement relatif, le deplacement estun nombre d’octets, specifiant l’ecart entre la valeur courante de PC et l’adressede l’instruction de destination. Noter que dans la plupart des machines lavaleur courante de PC est deja sur l’instruction suivante (Cf. Chapitre 14). Ledeplacement n’est pas un entier tout a fait quelconque : il est pair si le codagedes instructions se fait sur un nombre pair d’octets. Sur le processeur sparc,ce deplacement est meme toujours multiple de 4, car toutes les instructionssont codees sur un format fixe de 4 octets (voir paragraphe 1.3). On peutalors profiter de cette information pour gagner de la place dans le codage desinstructions de branchement : au lieu de coder le deplacement exact d, on coded′ = d/4, ce qui economise 2 bits. L’effet de l’instruction est alors de la forme :PC ←− PC + d′× 4 (voir tableau recapitulatif des modes d’adressages 12.1).

Expression d’une condition de branchement Dans un langage de pro-grammation de haut niveau, les conditions des structures conditionnelles ouiteratives sont des expressions booleennes quelconques qui font intervenir des

version en ligne - [PDF Document] (292)

284 Le langage machine et le langage d’assemblage

constantes, des noms de variables du lexique, des appels de fonctions, etc.(Cf. Chapitre 4, paragraphe 1.5).

Dans une instruction du langage machine, il paraıt difficile de coderune condition quelconque faisant intervenir le contenu des registres ou de lamemoire et d’eventuels appels de fonctions.

Une solution consiste a utiliser les instructions de calcul du langage ma-chine pour calculer la valeur booleenne de l’expression qui conditionne unbranchement. On obtient ainsi, apres un certain nombre d’etapes, une valeurbooleenne, rangee par exemple dans un registre ou une partie de registre. Lebranchement conditionnel peut ensuite etre effectue d’apres la valeur de ceregistre.

On peut donc fabriquer un langage machine suffisant en ajoutant aux ins-tructions de calcul, une unique instruction de branchement conditionnel de laforme BV n a. Cette instruction est un branchement si condition vraie, parexemple absolu, avec adressage absolu. L’effet sur le compteur programme PCest : si Regn = vrai alors PC ←− a sinon PC ←− PC+1.

Considerons le programme :si (A+2*B < 4 et C ≥ 0) alors ... sinon ...

On peut toujours le transformer en :X : un booleen { une nouvelle variable, non utilisee ailleurs }X ←− A+2*B < 4 et C ≥ 0si X alors ... sinon ...

Cette transformation est aisem*nt generalisable a toutes les structuresconditionnelles ou iteratives du langage d’actions. Elle permet de comprendrecomment produire une sequence d’instructions du langage machine correspon-dante. Il suffit d’ecrire tout d’abord une sequence d’instructions de calcul et/oude transferts memoire destinees a placer dans un registre, par exemple Reg1, lavaleur booleenne de la condition (A+2*B < 4 et C ≥ 0). Suit immediatementune instruction BV 1 a, qui realise un branchement d’apres la valeur de Reg1.(Pour une explication detaillee du codage des structures conditionnelles etiteratives en langage machine, voir chapitre 13, paragraphes 1.3 et 1.4).

En realite la plupart des processeurs offrent une methode intermediaireentre l’unique instruction de branchement conditionnel presentee ici etl’hypothetique instruction universelle contenant le codage d’une conditionbooleenne quelconque. Ces methodes sont basees sur l’utilisation des indi-cateurs arithmetiques (ou flags en anglais) fournis par le processeur. Danscertains cas elles s’accompagnent de l’utilisation du mot d’etat du processeur,qui permet de stocker temporairement la valeur de ces indicateurs.

Indicateurs arithmetiques et mot d’etat L’idee est simple : lors de touteoperation de calcul, l’unite arithmetique et logique du processeur produit descomptes-rendus sous la forme de 4 booleens dits indicateurs arithmetiques, quipeuvent etre stockes dans une portion de registre interne specialise, appele motd’etat du processeur. Noter que sur le sparc, les instructions arithmetiques

version en ligne - [PDF Document] (293)

1. Le langage machine 285

existent en deux exemplaires : une version qui ne touche pas aux indicateurs,et une version qui les met a jour.

Ces 4 indicateurs sont : Z, qui est vrai si le resultat de l’operation est 0 ; C,qui est vrai si l’operation arithmetique a produit une retenue (C pour Carry)et qui, si l’on interprete les operandes et le resultat comme des entiers naturelscodes en binaire pur, signifie que le resultat n’est pas codable sur le memenombre de bits que les operandes ; N, qui est le bit de poids fort du resultat(si ce resultat est interprete comme le codage en complement a 2 d’un entierrelatif, si N vaut 1 alors le resultat est negatif) ; V, qui n’a de sens que sil’on interprete les operandes et le resultat comme des entiers relatifs codes encomplement a 2, et qui est vrai si le resultat n’est pas representable sur le memenombre de bits que les operandes (V pour oVerflow). Reprendre le chapitre 3pour un expose detaille de la signification des divers indicateurs arithmetiques.

Si l’on considere un processeur qui travaille sur des nombres reelsrepresentes en virgule flottante, il faut tenir compte d’autres indicateurs ; ilexiste pour la representation en virgule flottante une notion de debordementpour des valeurs trop petites ou trop grandes, non representables avec laprecision disponible.

Expression des conditions de branchement a base d’indicateursarithmetiques et de mot d’etat Considerons le cas ou les indicateursarithmetiques sont stockes dans un registre apres l’execution de chaqueoperation arithmetique. On introduit alors des operations de branchementd’apres les valeurs de ces indicateurs (meme idee que pour le branchementunique BV presente plus haut, mais la condition peut utiliser 4 booleens au lieud’un seul).

Sur des processeurs 8 bits comme le 6502, il y a 8 branchements, d’apresla valeur vrai ou faux des 4 booleens.

Sur la plupart des processeurs actuels, il y a 16 branchements, selon desfonctions booleennes predefinies des indicateurs Z, N, C et V, correspondantaux tests de comparaison usuels entre deux entiers naturels ou relatifs. Ontrouve ainsi un branchement BLE (Branch on Less or Equal) dont la condi-tion est Z ou (V et non N ou non V et N). Lorsqu’on a effectue une soustrac-tion entre deux entiers A et B, les bits du registre d’etat sont tels que cettecondition est vraie si et seulement si A ≤ B, en interpretant A et B comme desentiers relatifs codes en complement a 2, pour faire la comparaison. En effet,Z est vrai quand A = B, et la partie V et non N ou non V et N signifie queA < B, en tenant compte des cas ou la soustraction deborde. Nous donnonsles 16 fonctions booleennes usuelles au paragraphe 1.5. L’exercice E12.7 etudiela formule booleenne associee au branchement BLE.

version en ligne - [PDF Document] (294)

286 Le langage machine et le langage d’assemblage

Expression des conditions de branchement a base d’indicateursarithmetiques sans mot d’etat Sur certains processeurs, on peut trou-ver des instructions qui combinent un test et un branchement. Par exemple,le processeur mips r10000 fournit une instruction qui combine un test et unbranchement conditionnel sur les entiers. La condition est soit l’egalite de deuxregistres, soit la comparaison d’un registre par rapport a zero (= 0, < 0, > 0,≤ 0). Considerons le fragment de programme :

A, B : des entierssi A = B alors ... sinon ...

Le code produit est simple : il n’est pas necessaire de calculer la valeur dela condition booleenne A = B avant d’effectuer un branchement, si les deuxentiers sont dans des registres. On ecrit une seule instruction de la formeBrEgal n1 n2 a dont l’effet est :si Regn1 = Regn2 alors PC ←− a sinon PC ←− PC+1.

Toutefois, pour coder si A < B, il faut tout d’abord effectuer une soustrac-tion, et en placer le resultat dans un registre explicitement manipule par leprogrammeur.

Sauts a des sous-programmes Enfin tous les processeurs fournissent unmoyen de transferer le controle a un sous-programme, avec sauvegarde del’adresse de depart, pour reprendre le flot normal des instructions quand lesous-programme se termine.

Considerons le programme suivant, dans lequel JSR est une intruction desaut a un sous-programme, RTS est l’instruction de retour de sous-programmeet Inst-i denote une instruction de calcul quelconque (ne provoquant pasde rupture de sequence). JSR a comme operande une etiquette qui designele sous-programme ; l’execution de JSR provoque un branchement (doncune rupture de sequence) au sous-programme designe avec sauvegarde del’adresse qui suit l’instruction JSR. L’instruction RTS provoque un retourde sous-programme c’est-a-dire un branchement a l’adresse qui avait eteprecedemment sauvegardee. En cas de branchements successifs a des sous-programmes, les adresses de retour doivent etre gerees en pile.

1 Inst-1 SP1 Inst-5 SP2 Inst-7

2 JSR SP1 Inst-6 Inst-8

3 Inst-2 RTS JSR SP1

4 Inst-3 Inst-9

5 JSR SP2 RTS

6 Inst-4

L’execution de ce programme en terme des instructions Inst-i peut etredecrite par la sequence : Inst-1 (Inst-5 Inst-6) Inst-2 Inst-3 (Inst-7Inst-8 (Inst-5 Inst-6) Inst-9) Inst-4 dans laquelle nous avons utilise uneparenthese ouvrante chaque fois qu’un appel a un sous-programme (instruc-tion JSR) est execute et une parenthese fermante lors du retour correspondant

version en ligne - [PDF Document] (295)

1. Le langage machine 287

(instruction RTS). Lors du premier appel (execution de JSR SP1) l’adresse sau-vegardee est 3 ; l’execution de l’instruction RTS effectue le retour a cette adresse.

L’instruction de branchement avec sauvegarde de l’adresse de depart estgeneralement specifique : il s’agit d’une instruction de branchement qui n’estpas ordinaire puisqu’il lui faut integrer une sauvegarde. Or apres le saut il esttrop tard pour sauvegarder l’adresse d’ou l’on vient ; avant le saut il n’est pastoujours tres simple de la calculer. Selon les machines l’adresse sauvegardeeest l’adresse qui suit le branchement, ou l’adresse du branchement elle-meme ;le retour de sous-programme doit etre coherent avec ce choix.

Les instructions de branchement a des sous-programmes peuvent etre ab-solues ou relatives, et l’adressage peut-etre direct ou indirect par registre, avecou sans deplacement. Sur le sparc on dispose de deux instructions de bran-chement avec sauvegarde, qui peuvent donc etre utilisees pour coder des sautsa des sous-programmes : call et jmpl. call est un branchement relatif aadressage direct, qui sauvegarde sa propre adresse dans un registre, toujours lememe. jmpl est un branchement absolu a adressage indirect par registre avecdeplacement, qui sauvegarde sa propre adresse dans un registre specifie parl’instruction.

Nous detaillons au chapitre 13 l’utilisation des instructions de saut a dessous-programmes, et la structure de pile sous-jacente, pour le codage des ac-tions et fonctions parametrees des langages imperatifs usuels, comme celuipresente au chapitre 4.

1.4.4 Combinaison test/instruction sans branchement

On trouve sur certains processeurs, par exemple mips r10000, ultras-parc, PentiumPro, des instructions de transfert de registres conditionnels.Une telle instruction est conditionnee par le resultat de l’operation precedenteet permet d’eviter des branchements explicites. Nous empruntons a [SL96]l’exemple suivant :

A, B : des entiersA ←− min (A, B)

Le code produit est de la forme :{ supposons A dans le registre r1 et B dans le registre r2 }SUB r1, r2, r3 { c’est-a-dire r3 ←− r1 − r2 }MOV COND GT r3, r2, r1 { c’est-a-dire : si r3 > 0 alors r1 ←− r2 }La question interessante avec ce type de langage machine est : comment

ecrire un algorithme de traduction des langages de haut niveau en langagemachine qui profite au mieux de ces instructions sophistiquees ? Les compi-lateurs pour machines de ce type font appel a des techniques assez elaboreesd’optimisation de code.

version en ligne - [PDF Document] (296)

288 Le langage machine et le langage d’assemblage

1.4.5 Instructions speciales

La plupart des langages machines comportent, outre les instructionsusuelles presentees jusque la, des instructions specifiques imposees par descontraintes d’ordres assez divers.• Par exemple, on trouve sur certaines machines de la famille x86

des instructions specifiques in et out pour le controle des peripheriquesd’entree/sortie. Nous verrons au chapitre 16 un exemple detaille dans lequella commande du coupleur d’entree/sortie est completement assimilable a uneecriture en memoire, et peut donc se faire par des instructions de transfertvers la memoire deja definies. Du point de vue du concepteur du langage ma-chine, cela implique que les adresses d’acces a la memoire, telles qu’elles sontproduites par le processeur (qui les lit dans le codage des instructions) a des-tination des boıtiers memoire (Cf. Chapitre 15) sont ensuite aiguillees vers dela memoire veritable ou vers un circuit d’entrees/sorties, d’apres leur valeur ;typiquement, un intervalle d’adresses est reserve aux circuits d’entrees/sorties.Si les connexions du processeur a la memoire et aux peripheriques ne verifientpas cette contrainte, le processeur doit emettre lui-meme une indication d’ai-guillage, et cela ne peut se faire que si l’instruction elle-meme comporte l’in-formation necessaire. D’ou l’existence d’instructions specifiques in et out.• Le processeur sparc comporte une instruction tres specifique sethi (pour

SET High bits) necessaire a l’installation d’une valeur immediate de 32 bitsdans un registre. En effet, toutes les instructions sparc sont codees sur 32bits exactement, sans mot d’extension. Une valeur immediate v de 32 bits nepeut donc pas tenir dans ce codage ; il n’y a pas d’instruction de la forme set

v, r, ou v est une valeur immediate de 32 bits et r un numero de registre.Comment realiser une telle operation ? Le jeu d’instructions sparc proposede realiser l’affectation d’une constante 32 bits a un registre en deux ins-tructions du langage machine : la premiere affecte les 22 bits de poids fortdu registre ; la deuxieme met a jour les 10 bits de poids faible sans modifierles 22 bits de poids fort (une instruction comme add ou or avec une valeurimmediate sur 13 bits convient). Pour faciliter l’ecriture de tels couples d’ins-tructions, le langage d’assemblage offre des macro-notations %hi et %lo quipermettent d’extraire respectivement les 22 bits de poids fort et les 10 bits depoids faible d’une constante. On ecrit ainsi : sethi %hi(0x0A08CF04), %r1 ;or %r1, %lo(0x0A08CF04), %r1. En langage machine, la valeur immediatecontenue dans l’instruction or est 0x304 et celle contenue dans l’instructionsethi est 0x028433.• On trouve egalement des instructions d’addition ADDX et de soustrac-

tion SUBX qui prennent en compte comme troisieme operande la retenue del’operation precedente (presente dans le bit C du mot d’etat). En enchaınantde telles instructions, on realise l’addition d’entiers codes en complement a2 ou en binaire pur sur plusieurs mots de 32 bits. L’exercice E12.6 detaillel’utilisation de cette instruction.

version en ligne - [PDF Document] (297)

1. Le langage machine 289

• Finalement, la plupart des langages machines comportent des instructionsspecialement concues pour faciliter la traduction des langages de haut niveau.Nous detaillons au chapitre 13 l’exemple des instructions link et unlink du68000, ou save et restore du sparc.

1.5 Description du langage machine par le lexique d’unemachine sequentielle a actions

Pour un algorithme donne, pour comprendre le langage machine, on peutdefinir une machine sequentielle a actions (Cf. Chapitre 5) dont : 1) les actionssont les instructions de calcul disponibles du langage machine ; 2) les predicatssont les conditions de branchement offertes par le langage machine ; 3) lestransitions sont les branchements conditionnels ou inconditionnels et le passageen sequence du langage machine.

Ces machines sequentielles ont un lexique restreint caracterise par : desbranchements uniquement binaires, des operations sur des vecteurs de bits delongueur fixe, pris dans des registres ou dans le tableau MEM representant lamemoire ; des predicats de branchement pris dans un ensemble predefini deformules booleennes a base d’indicateurs N, Z, C et V.

La figure 12.4 donne le lexique d’une telle machine sequentielle a ac-tions. La figure 12.5 donne un exemple d’algorithme exprime comme machinesequentielle a actions. Nous verrons au chapitre 13 comment obtenir facilementa partir de cette machine un programme en langage machine ou un texte dulangage d’assemblage.

1.6 Algorithme d’interpretation du langage machine

Une autre maniere de comprendre le langage machine est d’en donner unalgorithme d’interpretation.

Lorsque l’on travaille sur un ordinateur dont le processeur a pour lan-gage machine precisem*nt le langage machine considere, le programme en lan-gage machine est directement interprete par le processeur, qui constitue unerealisation cablee de l’algorithme d’interpretation. Nous precisons cette notionau chapitre 14.

Lorsque le langage machine est emule (Cf. Paragraphe 1.7.2) sur un ordina-teur quelconque, l’algorithme d’interpretation est exprime dans un langage deprogrammation comme C, compile (c’est-a-dire traduit en langage machine del’ordinateur hote) puis execute sur cet ordinateur (voir chapitre 18 pour plusde details sur la difference entre interpretation et compilation).

1.6.1 Un petit langage machine

Nous considerons un langage machine a 5 instructions. La nature de l’ins-truction est codee sur un octet. Il y a toujours un octet d’extension contenant

version en ligne - [PDF Document] (298)

290 Le langage machine et le langage d’assemblage

{ Types mots de 8, 32 bits : }Vecteur8 : un tableau sur [0..7] de booleensVecteur32 : un tableau sur [0..31] de booleens{ Les 8 registres : }R : un tableau sur [0..7] de Vecteurs32NumReg : le type entier sur 0..7{ La memoire : }MEM : un tableau sur [0..tmem−1] de Vecteurs8{ Les indicateurs d’operations arithmetiques }N, Z, C, V : des booleens{ Les predicats : }

fonctionA −→ un booleen { fonctionA = vrai }fonctionNev −→ un booleen { fonctionNev = faux }fonctionN −→ un booleen { fonctionN = N }fonctionZ −→ un booleen { fonctionZ = Z }fonctionC −→ un booleen { fonctionC = C }fonctionV −→ un booleen { fonctionV = V }fonctionNbar −→ un booleen { fonctionN = non N }fonctionVbar −→ un booleen { fonctionVbar = non V }fonctionCbar −→ un booleen { fonctionCbar = non C }fonctionZbar −→ un booleen { fonctionZbar = non Z }fonctionBGU −→ un booleen { fonctionBGU = non (C ou Z) }fonctionBGE −→ un booleen { fonctionBGE = non (N ouexcl V) }fonctionBG −→ un booleen { fonctionBG = non (Z ou (N ouexcl V)) }fonctionBLEU −→ un booleen { fonctionBLEU = C ou Z }fonctionBL −→ un booleen { fonctionBL = (N ouexcl V) }fonctionBLE −→ un booleen { fonctionBLE = Z ou (N ouexcl V) }

{ Quelques actions : }SoustReg : une action (les donnees un, deux, trois : 3 NumReg)lexique

X : un entier dans [−233−1, 233−1 − 1]algorithme

X ←− R[un] - R[deux] { Cf. Chapitre 3, Paragraphes 2.2.5 et 3.2.3 }si (R[un]31 et non R[deux]31 et non X31) ou (non R[un]31 et R[deux]31 et X31)

alors V ←− 1 sinon V ←− 0si (non R[un]31 et R[deux]31) ou (X31 et (non R[un]31 ou R[deux]31))

alors C ←− 1 sinon C ←− 0Z ←− si X31..0 = 0 alors 1 sinon 0N ←− X31

R[trois] ←− X31..0

Fig. 12.4 – Le langage machine decrit par le lexique d’une machine sequentielle avecactions. On ne decrit ici que l’instruction soustraction avec mise a jour desindicateurs arithmetiques

version en ligne - [PDF Document] (299)

1. Le langage machine 291

{ Calcul du pgcd de deux entiersA0 et B0 strictement positifs parsoustractions successives }{ Posons A = A0 et B = B0 }tantque A 6= B

si A > B alorsA ←− A − B

sinonB ←− B − A

{ propriete : A = B = pgcd(A0, B0) }

SoustReg(2,1,2)

SoustReg (1,2,3)

fonctionZbarfonctionZ

SoustReg (1, 2, 3)

fonctionBLEU

fonctionBGU

fonctionA

fonctionA fonctionA

SoustReg(1,2,1)

Fig. 12.5 – Traduction d’un algorithme en machine sequentielle a actions et lexique res-treint : la machine peut bien sur etre simplifiee. Initialement, A0 et B0 sontrespectivement dans les registres 1 et 2.

version en ligne - [PDF Document] (300)

292 Le langage machine et le langage d’assemblage

un numero de registre. Les instructions sont : ADD (addition d’un registreet d’une valeur immediate, donnee dans un octet d’extension), BT (branche-ment inconditionnel absolu, adressage direct par registre, dont le numero estdonne dans un octet d’extension), BZ (branchement si le resultat de la derniereoperation de calcul etait nul, relatif, direct par registre, numero dans un octetd’extension), INCRR (incrementation d’un registre, numero dans un octet d’ex-tension) et INCRM (incrementation d’un mot memoire, adressage indirect parregistre, numero dans un octet d’extension). Une machine proche de celle-ciest utilisee au chapitre 14 ; une autre plus complete au chapitre 22.

1.6.2 Interpretation

Pour decrire l’interpretation d’un programme ecrit dans notre petit langagemachine, nous supposons ici que le programme est installe en memoire, a partirde l’adresse debut. Le probleme general de l’installation du codage binaire d’unprogramme en memoire, ou chargement, est etudie au chapitre 18.

Chaque instruction est codee sur 1 octet, plus un ou deux octets d’exten-sion. L’algorithme d’interpretation est donne figure 12.6.

Noter la complexite de certaines actions, par exemple celle necessaire al’interpretation d’une instruction d’incrementation en memoire, avec adres-sage indirect par registre : MEM[Reg[NumReg]] ←− MEM[Reg[NumReg]] + 1.Nous verrons au chapitre 14 les contraintes qu’impose une telle action sur cequ’on appelle la partie operative du processeur, c’est-a-dire l’unite de calcul,les registres et les bus. Au niveau algorithmique, il est facile de remplacer cetteaction complexe par une action equivalente :

temp ←− MEM[Reg[NumReg]]temp ←− temp + 1MEM[Reg[NumReg]] ←− temp

qui fait apparaıtre un nouveau registre temp. Cette nouvelle forme permet deseparer l’acces en ecriture de l’acces en lecture a la memoire.

Noter egalement le cas d’erreur lorsque le code d’instruction lu ne corres-pond a aucune instruction valide (il est en effet possible que le codage del’ensemble des instructions en vecteurs de n bits ne constitue pas une fonc-tion surjective, comme nous l’avons signale au paragraphe 1.3.1). Dans unprogramme d’interpretation du langage machine, on peut emettre un messaged’erreur. Lorsque le langage machine est directement interprete par le proces-seur, cette erreur doit egalement etre detectee, et signalee au programmeur.Nous y revenons au chapitre 24, paragraphe 1.2.

En toute rigueur, il faudrait prevoir une detection d’erreur lors de la lectured’un numero de registre dans un octet : NumReg ←− MEM[PC], a moins desupposer que toute configuration d’un vecteur de 8 booleens correspond effecti-vement a un numero de registre existant, c’est-a-dire que la machine comporte256 registres.

version en ligne - [PDF Document] (301)

1. Le langage machine 293

lexiqueVecteur8 : un tableau sur [0..7] de booleensVecteur32 : un tableau sur [0..31] de booleensReg : le tableau sur 0..31 de Vecteurs32 { Les 32 registres }NumReg : le type entier sur 0..7 ; adresse : le type entier sur 0..tmem−1MEM : un tableau sur [adresse] de Vecteurs8 { La memoire }Z : un booleen { Indicateur d’operation arithmetique }ADD, BT, BZ, INCRR, INCRM : les constantes de type Vecteur8 : 0, 1, 2, 3, 4Inst : un Vecteur8 ; PC : une adressedebut : une adresse ; taille : un entier > 0{ MEM[debut ... debut+taille] contient les instructions }

algorithmePC ←− debuttantque PC < debut + taille

Inst ←− MEM[PC] { premier octet } ; PC ←− PC + 1{ Lire no registre, necessaire pour toutes les instructions (1 octet) }NumReg ←− MEM[PC] ; PC ←− PC + 1{ lecture autres octets selon l’instruction }selon Inst :

Inst = ADD :{ ajout de la valeur immediate, troisieme octet : }Reg[NumReg] ←− Reg[NumReg] + MEM[PC] ; PC ←− PC + 1si Reg[NumReg] = 0 alors Z ←− 1 sinon Z ←− 0

Inst = BT : { NumReg est le numero du registre d’indirection }PC ←− Reg[NumReg]

Inst = BZ : { NumReg est le numero du registre d’indirection }si Z alors { branchement effectif }

PC ←− PC + Reg[NumReg]sinon { PC ←− PC + 1 deja effectue : passage en sequence }

Inst = INCRR : { NumReg est le numero du registre a incrementer }Reg[NumReg] ←− Reg[NumReg] + 1si Reg[NumReg] = 0 alors Z ←− 1 sinon Z ←− 0

Inst = INCRM : { NumReg est le numero du registre d’indirection,qui donne l’adresse de l’emplacement memoire aincrementer }

MEM[Reg[NumReg]] ←− MEM[Reg[NumReg]] + 1si MEM[Reg[NumReg]] = 0 alors Z ←− 1 sinon Z ←− 0

sinon :{ code d’instruction invalide. Cf. Chapitre 24 }

Fig. 12.6 – Algorithme d’interpretation du petit langage machine

version en ligne - [PDF Document] (302)

294 Le langage machine et le langage d’assemblage

1.7 Criteres de choix d’un ensemble d’instructions

Nous resumons ci-dessous quelques-unes des contraintes a prendre encompte globalement pour le choix d’un jeu d’instructions. C’est un problemequi ne se pose qu’aux concepteurs de processeurs, mais l’utilisateur d’un pro-cesseur doit en etre conscient.

1.7.1 Contraintes issues du cout du circuit interprete

Selon que l’on privilegie la variete des instructions offertes par le langagemachine, ou bien le cout du circuit interprete (le processeur), on construit desjeux d’instructions assez differents.

L’exemple typique consiste a comparer un sparc et un 68000. Le sparc estune machine dite RISC (pour Reduced Instruction Set Computer). En realitel’ensemble des operations effectivement disponibles n’est pas si reduit que cela,mais les modes d’adressage sont rudimentaires : toute operation arithmetiquese fait sur des registres, et il n’existe que deux instructions specifiques Loadet Store pour realiser des acces memoire. Les instructions sont codables surun format fixe, et leur interpretation est algorithmiquement simple. Le circuitinterprete est donc simple, lui aussi. La simplicite, en termes de materiel, setraduit par la taille du circuit (en nombre de portes par exemple). Il reste doncde la place pour equiper le processeur d’un grand nombre de registres (peutetre de l’ordre de 500, nous verrons au chapitre 13 comment utiliser ce banc deregistres du sparc pour rendre efficace le codage des procedures d’un langaged’actions). D’autre part le format fixe des instructions permet de les executertoutes dans le meme temps.

Le 68000, en revanche, autorise generalement 8 modes d’adressage pour lesoperations. Les instructions ont un format variable selon qu’elles font referenceou non a un operande en memoire, qui doit etre designe par son adresse.L’algorithme d’interpretation est plus complexe. Le processeur est micropro-gramme (Cf. Chapitre 10) et les interpretations des instructions ont des dureesdifferentes.

1.7.2 Problemes de compatibilite

La definition d’un langage machine pour une nouvelle machine n’est ja-mais totalement libre. Une nouvelle machine est en general une etape dansune gamme de machines similaires plus anciennes, pour lesquelles il existe denombreux programmes.

Lorsqu’un constructeur propose la machine de generation n + 1, il doit as-surer que les programmes qui fonctionnent sur les machines de generation npeuvent etre reutilises. Cette notion cache de nombreux niveaux. Elle peutsignifier, simplement, que le constructeur fournit avec sa nouvelle machine unsysteme et un compilateur pour chaque langage qui etait disponible aupara-vant. Un utilisateur ayant programme en C doit transmettre d’une machine

version en ligne - [PDF Document] (303)

1. Le langage machine 295

a l’autre les fichiers source de ses programmes, les compiler avec le nouveaucompilateur, et les executer.

Malheureusem*nt les utilisateurs tres anciens ont parfois perdu les fichierssource de leurs programmes, ou bien, ce qui est le cas pour presque tous leslogiciels commerciaux, ils n’avaient achete le programme que sous sa formeexecutable. Ils ne disposent donc plus que du fichier objet, c’est-a-dire un pro-gramme en langage machine de generation n. Le constructeur doit alors garan-tir la compatibilite ascendante de ses machines, c’est-a-dire faire en sorte quele fichier objet de generation n soit interpretable sur la machine de generationn + 1.

Il y a essentiellement deux solutions. Si les deux machines sont conceptuel-lement proches l’une de l’autre, le jeu d’instructions de la nouvelle machineest defini comme un sur-ensemble du jeu d’instructions de l’ancienne. Les an-ciens programmes sont executables directement sur la nouvelle machine ; ilsn’utilisent qu’une partie du nouveau jeu d’instructions, et sont donc peut-etremoins efficaces que ce qu’ils auraient pu etre en profitant au mieux du nouveaujeu d’instructions. C’est le cas entre sparc et ultrasparc.

Si les deux machines sont tres differentes, le constructeur fournit unemulateur du langage machine n sur la machine n + 1. Un emulateur est unprogramme, ecrit dans un langage quelconque, par exemple C, et compile surla nouvelle machine, avec le nouveau compilateur C. Ce programme est uninterprete du langage machine n. Le code objet des anciens programmes n’estdonc plus directement interprete par un processeur, mais par un programme,lui-meme compile et execute sur un autre processeur.

C’est le cas des macintosh : les processeurs 68000 et PowerPC sont tresdifferents et il n’y a pas de compatibilite ascendante de leurs jeux d’instruc-tions. Apple fournit donc un emulateur de 68000 parmi les programmes dulogiciel de base fourni avec les machines a PowerPC.

1.7.3 Langage machine et traduction des langages de haut niveau,machines-langages

Le jeu d’instructions d’une machine peut comporter, outre les classes d’ins-tructions usuelles du modele Von Neumann, des instructions tres specifiquesdestinees a la traduction des programmes en langage de haut niveau.

On peut dire ainsi que le 68000 est une machine pour la compilation deslangages a structures de blocs (Pascal, C, Ada, etc.). Le jeu d’instructionscomporte les instructions link et unlink qui ne servent qu’a gerer l’allocationdynamique de memoire pour les variables d’un tel type de langage (Cf. Cha-pitre 13).

De la meme maniere, le processeur sparc offre les instructions save etrestore qui permettent de decaler une fenetre sur le banc de registres.Ce mecanisme permet l’allocation de memoire pour le contexte local d’uneprocedure, et le passage de parametres directement dans les registres, sans

version en ligne - [PDF Document] (304)

296 Le langage machine et le langage d’assemblage

acces memoire.De maniere generale, la conception des processeurs est de plus en plus

indissociable de la compilation des langages de haut niveau.Si l’on pousse le raisonnement a l’extreme, le jeu d’instructions d’une ma-

chine peut etre entierement concu pour l’execution de programmes ecrits dansun langage donne. On a ainsi construit des machines LISP, des machinesPROLOG, etc. On entend parler egalement de machines JAVA. Dans ce der-nier cas, de quoi s’agit-il exactement ? Les concepteurs du langage JAVA enont fait la publicite avec des arguments de portabilite et de securite : JAVAest d’abord compile en une forme intermediaire (appelee byte code) qui estensuite executable, par interpretation, sur tout ordinateur qui possede l’in-terprete adequat. L’execution sous forme d’interpretation est censem*nt plussure que l’execution par le processeur d’un programme en langage machine ;en effet, l’outil d’interpretation peut effectuer quelques verifications sur lesoperations qu’il effectue. Si maintenant on propose un processeur dont le lan-gage machine est exactement le format intermediaire produit par la premierephase de compilation de Java, on obtient une machine Java.

En general, la question se pose de savoir s’il vaut mieux concevoir unemachine dediee a un langage particulier, et capable d’assurer une executionefficace des programmes ecrits dans ce langage, ou bien concevoir un bon com-pilateur de ce langage pour machine universelle.

2. Le langage d’assemblage

Le langage machine offre deja tout ce qui est theoriquement necessaire pourprogrammer n’importe quel algorithme. Il lui manque une notation lisible etmanipulable par un etre humain. Le langage d’assemblage est introduit a ceteffet et offre donc :

– tout d’abord une notation textuelle aisem*nt lisible du langage ma-chine, c’est-a-dire : 1) une notation des operations de la machine (lesmnemoniques) et de leurs operandes, 2) un ensemble de directives dereservation et d’initialisation de la memoire

– la possibilite d’introduire des commentaires

– une notion de zones distinctes dans un programme : la zone des instructions(TEXT) et la zone de donnees (DATA, BSS), ainsi qu’une notation quipermet de reperer facilement les portions de programme appartenant a l’uneou l’autre de ces deux zones.

– un mecanisme de nommage des positions dans la zone des instructions oudans la zone de donnees, qui permet de s’abstraire des valeurs explicitesd’adresses memoire.

Notons qu’il peut exister plusieurs langages d’assemblage pour le meme lan-gage machine. Les differences resident en general dans la notation des modes

version en ligne - [PDF Document] (305)

2. Le langage d’assemblage 297

d’adressage des operandes d’instructions, ou dans les mots-cles utilises pourles directives de reservation memoire. Inversem*nt, un constructeur offre sou-vent des langages d’assemblage aussi similaires que possible pour des machinesequipees de processeurs differents. Ainsi la syntaxe des assembleurs SUN est-elle la meme, en ce qui concerne la definition des zones de donnees, que leprocesseur soit un 68000 ou un sparc.

2.1 Aspects de lexicographie et macros

Les langages d’assemblage usuels offrent la possibilite d’introduire des com-mentaires, delimites par exemple comme en C par : /* et */ ou par un ca-ractere, par exemple ’ !’ et la fin de ligne qui suit.

Ils offrent egalement la notation des constantes entieres dans plusieurs bases(typiquement decimal, octal — prefixe 0 —, hexadecimal — prefixe 0x), ainsique la notation des constantes entieres du code ASCII directement sous formede caracteres : ’a’ represente l’entier note 97 en decimal (voir chapitre 3 pourdes details sur le codage des caracteres).

Enfin il est en general possible, soit dans l’assembleur, soit dans un outilsitue en amont et appele macro-assembleur, de definir des constantes textuelles.Ce mecanisme permet d’eviter une redondance d’ecriture, qui mene souvent ades incoherences lors des modifications. On ecrit ainsi en debut de fichier uneligne de la forme tailleMax=400. Lors de l’assemblage, une premiere passe surle texte du programme remplace toute occurrence de la chaıne de caracterestailleMax (sauf dans les commentaires) par la chaıne 400. Ce mecanismeest assez limite, mais deja tres utile. Un outil comme m4, disponible dans lesenvironnements unix, permet de definir des macros parametrees ; il est ainsipossible de nommer une suite d’instructions qui apparaıt souvent.

2.2 Structuration des programmes

Un programme en langage d’assemblage est destine a etre traduit en lan-gage machine, puis place en memoire vive pour execution par le processeur.Un programme comprend generalement des instructions et des donnees (res-pectivement l’algorithme et les descriptions de variables du lexique, dans laterminologie du langage d’actions presente au chapitre 4). Le codage binairedu programme comporte donc le codage d’instructions, et le codage de donnees(des entiers, des caracteres, des donnees structurees, etc.).

Or en langage machine, rien n’est type. Le vecteur de booleens 00101010

peut etre vu aussi bien comme : un entier naturel code en binaire pur, lecode ASCII d’un caractere, 2 champs du codage d’une instruction, la partieexposant du codage d’un reel, etc. Si la zone de memoire sur laquelle on faittravailler le processeur contient des chaınes de bits qui correspondent au codaged’operations valides, on peut executer ces operations. Il n’y a pas de differenceintrinseque entre donnees et programmes.

version en ligne - [PDF Document] (306)

298 Le langage machine et le langage d’assemblage

Pour les besoins de la programmation, le langage d’assemblage fournit unenotion de zone dans les programmes, et une notation correspondante. Les zonessont : TEXT pour les instructions ; DATA pour les donnees statiques, c’est-a-dire dont la valeur est donnee directement dans le texte du programme ; BSSpour les donnees seulement dynamiques. L’influence de la distinction entre leszones DATA et BSS est expliquee au chapitre 18.

Retenons simplement pour l’instant que la zone TEXT contient les instruc-tions, et la zone DATA un ensemble de donnees initialisees que l’on desire placeren memoire vive lors de l’execution du programme. Ces donnees se comportentcomme des variables globales d’un langage de programmation imperatif : ellesont la duree de vie du programme.

2.3 Nommage des adresses ou etiquettes

Pour reperer les instructions dans la zone TEXT, ou les donnees dans lazone DATA, le langage d’assemblage fournit la notion d’etiquette. Ce mecanismepermet de faire abstraction des adresses absolues et des decalages exacts, dansle cas des branchements par exemple.

On ecrit typiquement, dans un langage d’assemblage possible du processeursparc (BNE, SUBcc et BA sont des mnemoniques. voir paragraphe suivant) :boucle: SUBcc r1, r2, r3

BNE fin! n instructions iciBA boucle

fin:

Les branchements conditionnels du sparc sont relatifs, et BNE fin exprimedonc le decalage des adresses entre la position de l’instruction elle-meme et lacible du branchement, situee a l’etiquette fin. En langage machine, le codede l’instruction BNE fin comprend un entier relatif qui donne le deplacementen nombre d’octets, divise par 4, c’est-a-dire le deplacement en nombre d’ins-tructions puisque toutes les instructions du sparc sont codees sur 4 octets.Pour BNE fin on trouve un deplacement de n+2 ; pour BA boucle, on trouve−(n + 2).

La traduction des instructions de la forme BNE fin du langage d’assemblageen instructions du langage machine demande le calcul du decalage effectif. C’estun travail realise par l’assembleur, qui realise une analyse lexicale du texte duprogramme, et associe a chaque etiquette une adresse relative au debut duprogramme. Dans l’exemple ci-dessus, on associe 0 a boucle et (n + 3) × 4 afin. C’est suffisant pour calculer les decalages signales ci-dessus.

Lorsque les branchements sont absolus, l’utilisation d’une etiquette permetde maniere similaire de faire abstraction de l’adresse absolue destination dubranchement. Du point de vue du programmeur en langage d’assemblage, iln’est donc pas necessaire de savoir si les branchements sont relatifs ou absolus.

version en ligne - [PDF Document] (307)

2. Le langage d’assemblage 299

En revanche l’assembleur doit maintenant traduire les etiquettes en adressesabsolues, dans la memoire vive de la machine, au moment de l’execution. Pourcela il faut connaıtre l’adresse de base a laquelle le programme sera installe ;cette information n’est pas toujours disponible au moment de l’assemblagedu programme. Il se pose alors un nouveau probleme : comment produire unprogramme en langage machine independant de sa position d’installation enmemoire ? Un tel objet est appele code translatable. Nous etudions sa produc-tion au chapitre 18, paragraphe 2.3.

Dans des ordinateurs simples ou les programmes sont toujours installes apartir de la meme adresse en memoire, il n’est pas necessaire de produire ducode translatable.

2.4 Zone des instructions, mnemoniques et notation desoperandes

Observons Figure 12.7 un exemple, donne dans un langage d’assemblagepossible pour processeur sparc.

On associe a chaque instruction un mnemonique, c’est-a-dire un nom courtet evocateur. Par exemple LDUH signifie LoaD Unsigned Half, c’est-a-dire char-gement non signe, de taille demi-mot.

Une instruction tient en general sur une ligne, commencant par unmnemonique d’instruction, suivi de notations d’operandes separes par des vir-gules. Il semble que le terme langage d’assemblage vienne de la : il s’agit d’as-sembler ces differentes parties pour constituer une instruction.

Les parametres des instructions peuvent etre : des registres, des constantes,des designations d’adresses en memoire par l’intermediaire de modes d’adres-sage plus ou moins sophistiques.

Les registres sont en general nommes, par des noms dans lesquels apparaıtune numerotation, comme r1, r2, .... Il peut exister plusieurs noms pourun meme registre physique : on parle d’alias. Lorsqu’il y a tres peu de registres,les noms des registres peuvent etre integres aux mnemoniques. On trouve parexemple dans un langage d’assemblage pour processeur 6502 les mnemoniquesLDA, LDY et LDX qui correspondent au chargement des registres A, Y et X.

Les constantes entieres sont notees en utilisant une des bases disponibles,ou meme par l’intermediaire du code ASCII (Cf. Paragraphe 2.1). L’utilisationdes constantes textuelles permet d’ecrire ADD r1, MAX, r4 a la place de ADD

r1, 4, r4.Noter que l’instruction ADD du sparc exige des registres comme premier et

troisieme operande, mais autorise un registre ou une constante (suffisammentpetite) comme deuxieme operande. La difference entre ces deux cas doit biensur etre codee dans l’instruction du langage machine correspondante, puisquel’interpretation d’un des champs de l’instruction en depend (valeur immediateou numero de registre). Or le mnemonique est le meme dans les deux cas. Ladistinction est donc faite par l’assembleur sur des criteres lexicographiques :

version en ligne - [PDF Document] (308)

300 Le langage machine et le langage d’assemblage

MAX=4 ! definition d’une constante textuelle.text ! debut de la zone TEXT

ADDcc r1, r2, r3ADD r1, MAX, r4LDUH [r1+4], r2BNE labasCALL fonctionJMPL r2+r3, r0

Fig. 12.7 – Exemple de zone TEXT

VAL=250ISE=-125

.data ! debut de zone de donneesXX : ! etiquette

.long 0x15 ! 4 octets initialises avec le vecteur de! bits decrit par 0x15 en hexadecimal,! reperables par l’etiquette XX

YY : .half -12 ! 2 octets initialises avec le codage! de -12 (necessairement en complement a 2)

.byte VAL ! un octet initialise avec le codage! de 250 (necessairement en binaire pur)

.byte ISE ! un octet initialise avec le codage! de -125 (necessairement en complement a 2)

.skip 12000 ! une zone contigue de 12000 octets,! non initialises.

.asciz "toto" ! 5 octets, initialises avec les codes! ASCII des caracteres ’t’, ’o’, ’t’, ’o’! et un octet mis a zero pour finir.

.align 4 ! directive d’alignementZZ : .long XX ! 4 octets initialises avec le codage

! binaire de l’adresse absolue! representee par l’etiquette XX.

Fig. 12.8 – Exemple de zone DATA

version en ligne - [PDF Document] (309)

2. Le langage d’assemblage 301

on peut toujours distinguer une chaıne de caracteres qui constitue la notationd’une constante entiere, d’une chaıne de caracteres qui constitue un nom deregistre, grace a la lettre ’r’ qui precede le numero. Lorsqu’il risque d’y avoirconfusion, ou meme simplement pour des raisons de lisibilite, les constantessont prefixees par le caractere ’#’. On ecrit ainsi dans un langage d’assemblagepour 68000 : ADDI #4, D0.

Les notations les plus compliquees viennent des modes d’adressage. Pourdes raisons de lisibilite et de comprehension du programme, le langage d’assem-blage propose en general une notation particuliere pour les modes d’adressagequi supposent une indirection. Ce peuvent etre des crochets ou des parentheses.On ecrit ainsi LDUH [r1+4], r2 dans un langage d’assemblage pour sparc,ou move.l (A1), D1 dans un langage d’assemblage pour 68000 (voir exemplecomplet, figure 12.9). Les deplacements eventuels sont notes par des additions,comme dans LDUH [r1+4], r2.

Enfin un langage d’assemblage peut definir des pseudo-instructions. Parexemple, le jeu d’instruction sparc etant limite, il n’existe pas d’instructionde comparaison de deux entiers (l’equivalent de l’instruction CMP du 68000).On utilise donc une soustraction de la forme SUBcc r1, r2, r0 pour mettrea jour les indicateurs arithmetiques selon le resultat de la comparaison der1 et r2 (r0 est un registre special, dans lequel l’ecriture n’a aucun effet. Voirexercice E12.2). L’assembleur permet d’ecrire simplement CMP r1, r2, qui seratraduit en langage machine exactement comme SUBcc r1, r2, r0. CMP estune pseudo-instruction. Notons que certaines pseudo-instructions remplacentparfois plusieurs instructions.

2.5 Zone de donnees et directives dereservation memoire

La zone de donnees comporte des directives de reservation d’emplacementsmemoire, avec definition d’une valeur initiale a y placer avant de demarrerl’execution du programme. Le codage de ces donnees en langage machine estsimplement le codage binaire des constantes indiquees par le programmeur.

Observons l’exemple de la figure 12.8..long, .half, .byte et .asciz sont des directives de reservation memoire

avec initialisation. Elles sont suivies de la donnee d’une constante, sous desformes diverses : nom de constante textuelle (.byte VAL), notation d’entier enhexadecimal (.long 0x15), en decimal (.half -12), etc. La constante peutaussi etre donnee sous la forme d’une etiquette (.long XX). Une etiquetterepresente une adresse, donc un entier positif. La seule difficulte provient du faitque l’adresse absolue associee a l’etiquette n’est pas connue avant le chargementen memoire pour execution. On retrouve ici pour les donnees la notion de codetranslatable deja mentionnee au paragraphe 2.3.

Dans le cas de .asciz, la taille est determinee par la constante chaıne decaracteres associee. Ainsi .asciz "toto" reserve 5 = 4 + 1 octets, dont les

version en ligne - [PDF Document] (310)

302 Le langage machine et le langage d’assemblage

4 premiers sont initialises avec les codes ASCII des caracteres ’t’, ’o, ’t’,’o’ et le dernier avec un caractere de code 0. On respecte ainsi la conventionde representation des chaınes de caracteres utilisee en C, c’est-a-dire sous laforme d’une adresse de debut, sachant que la chaıne est marquee par 0.

.skip est une directive de reservation memoire sans initialisation. On latrouve plutot en zone BSS que DATA, puisque la zone BSS permet de reserverde la memoire non initialisee (Cf. Chapitre 18).

.align est une directive de cadrage memoire necessaire pour tenir comptedes contraintes d’alignement memoire dont nous avons parle au paragraphe 2.3du chapitre 4. La directive .align 4 (resp. .align 2) tient compte de toutesles reservations memoire effectuees auparavant, et menage un espace perdu dela taille necessaire pour atteindre la prochaine adresse multiple de 4 (resp. 2).

3. Traduction du langage d’assemblage

en langage machine

La traduction du langage d’assemblage en langage machine est effectueepar l’outil appele assembleur des environnements de programmation. Cet outila essentiellement 3 fonctions :

– il realise l’analyse lexicale et syntaxique du texte ecrit en langage d’assem-blage, diverses verifications comme par exemple l’utilisation correcte desmodes d’adressage et peut rejeter des programmes pour erreurs lexicales ousyntaxiques ; cette phase d’analyse peut s’accompagner de l’expansion desmacro-notations et des definitions de constantes ;

– il realise le codage en binaire des instructions et des donnees : transfor-mation des mnemoniques d’operations et des notations de modes d’adres-sage en codage des instructions, transformation des directives de reservationmemoire en codage binaire des donnees initialisees ;

– il realise la traduction des etiquettes (ou symboles) en adresses absoluesou deplacements. En maintenant au cours du traitement un compteur as-sociant a chaque instruction une adresse calculee par rapport au debut duprogramme, il est facile de calculer les deplacements relatifs. Par contre lesvaleurs absolues ne peuvent etre calculees tant que l’on ignore l’adresse alaquelle le programme sera implante. Nous revenons sur ce point au cha-pitre 18 a propos de code translatable.

Nous montrons dans la section suivante a travers quelques exemples latraduction en langage machine sparc et 68000.

4. Un exemple de programme

Considerons l’algorithme qui permet de determiner le nombre de bits a 1dans la representation en binaire pur d’un entier :

version en ligne - [PDF Document] (311)

4. Un exemple de programme 303

Lexique :x : un entier ≥ 0 { la donnee }NombreDeUns : un entier ≥ 0 { le resultat a calculer }

Algorithme :NombreDeUns ←− 0tantque x 6= 0

si x mod 2 6= 0 alors NombreDeUns ←− NombreDeUns + 1x ←− x div 2

Nous donnons ci-dessous des programmes correspondants dans des lan-gages d’assemblage possibles pour les processeurs sparc et 68000, et les pro-grammes en langage machine correspondants. Noter qu’en langage d’assem-blage les operations arithmetiques notees x mod 2 et x div 2 sont remplaceespar des manipulations explicites de vecteurs de booleens (decalage logique etmasquage).

4.1 Programme pour 68000

La figure 12.9 donne un programme en langage d’assemblage pour proces-seur 68000.

Nous donnons ci-dessous le codage des instructions, accompagne del’adresse de rangement, et du texte en langage d’assemblage obtenu pardecodage dans un desassembleur.

0x0 43f9 00000028 lea 40,A10x6 2211 move.l (A1),D10x8 7000 moveq #0,D00xA 4a81 tst.l D10xC 6710 beq +160xE 2401 move.l D1,D20x10 0282 00000001 andi.l #1,D20x16 6702 beq +20x18 5280 addq.l #1,D00x1A e281 asr.l #1,D10x1C 60ec bra -200x1E 23c0 0000002c move.l D0,440x24 4e75 rts

Noter que l’on produit du code comme si le programme demarrait al’adresse 0. Les donnees sont placees apres la zone texte ; la zone data com-mence donc ici a l’adresse 0x28. Le codage de la zone data est : 0000002a,c’est-a-dire la valeur 42 en decimal codee sur 16 bits.

Lorsque le programme est charge em memoire centrale, les adresses sonttranslatees en fonction de l’adresse a laquelle le programme est range enmemoire (Cf. Chapitres 18 et 20).

Detaillons le codage de quelques instructions :

Exemple 1 : 43f9 00000028 lea Donnee, A1

version en ligne - [PDF Document] (312)

304 Le langage machine et le langage d’assemblage

! Correspondance des variables et des registres :! x : D1! NombreDeUns : D0

.data ! ZONE DE DONNEES INITIALISEESDonnee : .long 42 ! un mot de 4 octets contenant

! le codage binaire de l’entier! note 42 en decimal.

.bss ! ZONE DE DONNEES non INIT.Resultat : .skip 4 ! un mot de 4 octets

.text ! ZONE DE PROGRAMME

.global main ! necessaire (Cf. Chap. 18, §2.)main : ! le pt d’entree s’appelle

! necessairement main.lea Donnee,A1!transfert de la memoire vers un registre!en adressage indirect par registre adresse.move.l (A1), D1

deb calcul : moveq ]0,D0 ! NombreDeUns <-- 0condition tq :tst.l D1 ! tantque (x !=0)

beq fin tq ! branchement lorsque cond. faussecorps tq :si :

move.l D1,D2andi.l ]1,D2 ! si (x mod 2 != 0) alorsbeq fin si

alors : addq.l ]1,D0 ! NombreDeUns<--NombreDeUns+1fin si :

asr.l D1 ! x <-- x div 2bra condition tq

fin tq :move.l D0, Resultat! transfert d’un registre vers la memoire! en adressage direct

fin prog : rts ! fin de programme.

Fig. 12.9 – Nombre de 1 : programme en langage d’assemblage pour 68000

version en ligne - [PDF Document] (313)

4. Un exemple de programme 305

Il s’agit d’une instruction load effective address dans un registre.

43f9 est le codage de la nature de l’instruction, du numero de registre(A1) et du mode d’adressage utilise pour l’autre operande (c’est cela quidetermine s’il y a des mots d’extension a lire, et combien).

00000028 : 2 mots d’extension de 16 bits chacun, donnant la valeur d’uneadresse. Ici 0x28 en hexadecimal, c’est-a-dire 40 en decimal : c’est la tailleen octets de la zone TEXT. Les donnees sont placees en memoire apresles instructions, et Donnee est le premier objet de la zone DATA.

Exemple 2 : 2211 move.l (A1), D1

Tout est code en 16 bits : la nature de l’operation, la taille des operandessur laquelles elle s’applique, la description des modes d’adressage desdeux operandes (direct ou indirect par registre, numero de registre).

Exemple 3 : 6710 beq +16

Tout est code en 16 bits : la nature de l’operation (un branchement siZ), le deplacement de 16 octets, par rapport a l’instruction qui suit celledu branchement. L’instruction de branchement est a l’adresse 0xC : lasuivante a l’adresse 0xE ; la destination a l’adresse 0x1E.

4.2 Programme pour sparc

La figure 12.10 donne un programme en langage d’assemblage pour proces-seur sparc.

Le codage des donnees (zone data) est : 0000 002a 0000 0000. Le codagedes instructions (zone text) donne une suite de mots de 32 bits, chacun codantune instruction.9de3bfc0 21000000 a0142000 d204000090000000 80a24000 02800009 01000000808a6001 02800003 01000000 9002200193326001 10bffff8 01000000 21000000a0142000 d0240000 81c7e008 81e80000

Exemple 1 : 21000000 a0142000 set Donnee, %l0

Il s’agit d’une pseudo-instruction permettant l’affectation d’une valeurde 32 bits, l’adresse Donnee en zone data. Elle est remplacee par deuxinstructions sethi %hi(Donnee), %l0 et or %l0, %lo(Donnee), %l0

dont les codages respectifs sont : 21000000 et a0142000. La valeur as-socie a Donnee n’etant pas connue lors de la traduction, les champs cor-respondants sont pour l’instant mis a 0. Ils seront mis a jour lors duchargement du programme en memoire centrale. L’information concer-nant Donnee est presente dans les informations de translation et la tabledes symboles (Cf. Chapitre 18).

Exemple 2 : 01000000 nop

version en ligne - [PDF Document] (314)

306 Le langage machine et le langage d’assemblage

! Correspondance des variables et des registres :! x : o1! NombreDeUns : o0

.data ! ZONE DE DONNEES INITIALISEESDonnee : .long 42 ! un mot de 4 octets contenant

! le codage binaire de l’entier! note 42 en decimal.

.bss ! ZONE DE DONNEES non INIT.Resultat : .skip 4 ! un mot de 4 octets

! non initialise..text ! ZONE DE PROGRAMME.global main ! necessaire (Cf. Chap. 18, §2.)

main : ! le pt d’entree s’appelle! necessairement main.save %o6, -64, %o6 ! voir codage des actions.set Donnee, %l0! transfert de la memoire vers un registre :ld [%l0], %o1

deb calcul : add %g0,%g0,%o0 ! NombreDeUns <-- 0condition tq :

subcc %o1,%g0,%g0 ! tantque (x !=0)be fin tq ! branchement lorsque! condition faussenop

corps tq :si :

andcc %o1,1,%g0 ! si (x mod 2 != 0) alorsbe fin sinop

alors :add %o0,1,%o0 ! NombreDeUns<--NombreDeUns+1

fin si :srl %o1,1,%o1 ! x <-- x div 2ba condition tqnop

fin tq :set Resultat, %l0! transfert d’un registre vers la memoirest %o0, [%l0]

fin prog :ret ! fin du programmerestore

Fig. 12.10 – Nombre de 1 : programme en langage d’assemblage pour sparc

version en ligne - [PDF Document] (315)

4. Un exemple de programme 307

L’instruction nop n’existe pas en sparc. Elle est codee par une instruc-tion ayant un effet nul : une addition ou une disjonction portant sur leregistre special %g0.

Exemple 3 : d2040000 ld [%l0], %o1

Cette instruction peut etre codee completement. Le mot de 32 bits sedecompose en :code op reg d code op reg s 1 i1 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0

inutilise reg s 20 0 0 0 0 0 0 0 0 0 0 0 0

version en ligne - [PDF Document] (316)

308 Le langage machine et le langage d’assemblage

Exemple 4 : 02800009 be fin_tq

L’operation est codee sur les bits 31 et 30 (resp. 0 et 0) et 24 a 22 (010).La condition equal est codee sur les bits 28 a 25 (0001). Le deplacementest code sur les bits 21 a 0 ; la valeur est ici 9, ce qui correspond aunombre d’instruction de l’instruction de branchement jusqu’a l’etiquettefin tq.

5. Exercices

E12.1 : Machines a 0, 1, 2 ou 3 referencesNous allons etudier l’ecriture d’un algorithme simple dans un programme enlangage d’assemblage de jeux d’instruction de differents types. Dans la suite decet exercice nous notons val une valeur immediate et adr une adresse. Nousutilisons les conventions d’ecriture du langage d’assemblage similaire au sparcdecrite dans ce chapitre. ope represente le mnemonique d’une instructionparmi add, mult, sub et div, OP est l’operation arithmetique associee.

Traduire pour chacune des machines et langages d’assemblage associesdecrits ci-apres l’algorithme suivant, en convenant que A est a l’adresse a,. . .et Y a l’adresse y :

Lexique :A, B, C, D, E, F : des entiers { des donnees }Y : un entier { le resultat a calculer }

Algorithme :Y ←− (A + B + C) / (D * E * F - 3)

Meme exercice avec le sparc. Pour chaque type de machine, observer lataille du code obtenu en nombre d’instructions, estimer le nombre d’octetsnecessaires au codage du programme.

1) Jeu d’instructions a 1 reference et 1 seul registre : la machine correspon-dant a ce type d’instruction possede un registre de calcul appele accumulateur(note acc) qui est toujours utilise dans les instructions de calcul. L’accumula-teur est un des deux operandes et le resultat est forcement stocke dans celui-ci.L’ensemble des instructions ne possede qu’une reference :

instruction significationope val acc ←− acc OP val

ope [adr] acc ←− acc OP MEM[adr]

store adr MEM[adr] ←− acc

load val acc ←− val

load [adr] acc ←− MEM[adr]

2) Jeu d’instructions a 2 references et mode d’adressage restreint : on ra-joute a la machine precedente d’autres registres (notes Ri). Chacun d’euxpossede les memes fonctionnalites que acc. La destination du calcul est tou-jours un registre. Une des deux references (servant de source et destination)est en mode d’adressage registre direct.

version en ligne - [PDF Document] (317)

5. Exercices 309

instruction significationope Ri val Ri ←− Ri OP val

ope Ri [adr] Ri ←− Ri OP MEM[adr]

ope Ri Rj Ri ←− Ri OP Rj

store Ri adr MEM[adr] ←− Ri

load Ri val Ri ←− val

load Ri [adr] Ri ←− MEM[adr]

Les processeurs fabriques autour de l’annee 1975 (famille 8080 d’intel et 6800de motorola) utilisaient ces deux types d’instructions (1 et 2 references).Dans le cas de l’utilisation de l’accumulateur l’instruction est plus rapide.

3) Machine a 2 references et modes d’adressage varies : on ajoute un moded’adressage indirect par registre. Une des deux references est forcement enmode d’adressage registre direct (mais pas forcement la destination). Les ins-tructions load et store sont remplacees par une instruction unique move.

instruction significationRef. destinations en mode d’adressage registre directope val, Ri Ri ←− val OP Ri

ope [adr], Ri Ri ←− Ri OP MEM[adr]

ope [Rj], Ri Ri ←− Ri OP MEM[Rj]

Ref. destination en mode d’adressage absoluope Ri,[adr] MEM[adr] ←− MEM[adr] ope Ri

Ref. destination en mode d’adressage reg. indirectope Ri,[Rj] MEM[Rj] ←− MEM[Rj] OP Ri

Instruction move

move Rj, Ri Ri ←− Rj

move val, Ri Ri ←− val

move [adr], Ri Ri ←− MEM[adr]

move Ri, [adr] MEM[adr] ←− Ri

Les processeurs de la famille 68000 de motorola (a patir de l’annee 1980) aun jeu d’instructions de structure similaire avec un jeu de mode d’adressageencore plus large.

4) Machine a 0 reference : c’est une machine qui necessite une pile. Lesinstructions d’operation se font toujours avec les deux operandes qui sont ausommet de la pile (et qui sont alors enlevees de la pile), le resultat est stockesur la pile. Ces instructions n’ont donc pas besoin de references. Il faut pouvoirstocker des valeurs sur la pile avant les calculs, on ajoute donc deux instructionsparticulieres push et pop. Celles-ci ont une reference. On suppose ici que lepointeur de pile SP pointe sur le dernier emplacement occupe et que la pileprogresse en diminuant SP.

version en ligne - [PDF Document] (318)

310 Le langage machine et le langage d’assemblage

instruction significationope MEM[SP+1] ←− MEM[SP] OP MEM[SP+1] ; SP ←− SP+1

push val SP ←− SP - 1 ; MEM[SP] ←− val

push [adr] SP ←− SP - 1 ; MEM[SP] ←− MEM[adr]

pop [adr] MEM[adr] ←− MEM[SP] ; SP ←− SP + 1

E12.2 : Utilisation du registre %g0 du sparcL’architecture du processeur sparc introduit un objet manipulable comme unregistre, mais qui possede des proprietes particulieres : l’ecriture dans ce re-gistre, en general note %g0, n’a pas d’effet, et la lecture de ce registre donnetoujours 0. D’autre part le sparc est une machine a trois references. Une ins-truction de calcul op a trois arguments s1, s2 et d, et realise l’affectation d

←− op(s1, s2). Le dernier argument est toujours un registre, donc touteoperation ecrase un registre. Utiliser le registre %g0 pour realiser une compa-raison et un test a 0 en termes de soustraction.

E12.3 : Transferts memoire/registres en sparcDans le jeu d’instructions du processeur sparc on trouve des instructions dechargement d’une portion de registre (octet, B ou demi-mot, H) en memoiresignees (LDB, LDH) ou non signees (LDUB, LDUH). Pour l’instruction de rangementen memoire (STB, STH), ce n’est pas le cas. Pourquoi ? Dans le processeur 68000on n’a pas le probleme. Pourquoi ?

E12.4 : Calcul d’un moduloX etant un entier naturel, ecrire une ou plusieurs instructions sparc (oude toute autre machine) permettant de calculer X mod 256 et generalementX mod 2n.

E12.5 : Decoupage d’un entier en octectX etant un entier code sur 32 bits (4 octets), O1, O2, O3 et O4 designant4 emplacements memoire de 1 octet pas necessairement contigus, ecrire unesequence d’instructions en langage d’assemblage de n’importe quelle machinepermettant de ranger les octets X31..24, X23..16, X15..8 et X7..0 respectivement auxadresses O1, O2, O3 et O4.

E12.6 : Addition double longueurSe convaincre que N, C, V ont un sens apres la suite d’instructions ADDcc,

r1, r2, r3 ; ADDXcc r4, r5, r6, par rapport aux entiers 64 bits codes res-pectivement dans les couples de registres (r3, r6), (r2, r5) et (r1, r4). Enparticulier comprendre que tout marche bien pour le complement a 2, bienqu’on ne transmette que C dans ADDXcc. Z n’a plus de sens, en revanche. Pourcomprendre pourquoi, etudier le probleme suivant : comment tester que lasomme, realisee en deux instructions, de deux entiers 64 bits occupant chacun2 registres, est nulle ?

version en ligne - [PDF Document] (319)

5. Exercices 311

E12.7 : Expressions booleennes associees aux branchements usuelsA et B sont deux entiers representes dans les 2 registres %l0 et %l1 du sparc.Apres l’execution de l’instruction subcc %l0, %l1, %g0 quelles doivent etreles valeurs de Z, N, C, V pour que A ≤ B si A, B ∈ Z ? Meme question pourque A ≤ B si A, B ∈ N ?

Noter que A ≤ B ⇐⇒ A < B ou A = B ; pour A < B, envisager les 2 cas :A − B est calculable ou l’operation provoque un debordement. Retrouver laformule : Z or (N xor V ).

Etudier de meme les formules associees a toutes les conditions de branche-ments.

E12.8 : Plus Grand Commun DiviseurDonner en langage d’assemblage sparc ou 68000 une sequence d’instruc-tions permettant de calculer le pgcd de deux entiers. S’inspirer de la machinesequentielle a actions decrite dans le paragraphe 1.5 (Cf. Figure 12.5). Suppo-ser que les valeurs initiales A0 et B0 sont dans deux registres. Pour traduirela boucle d’iteration, s’inspirer de l’exemple traite dans le paragraphe 4. dupresent chapitre.

E12.9 : Observation de code produitOn donne ci-dessous un programme en C et le programme en assembleur sparcproduit par le compilateur gcc. Analyser le code produit pour y retrouver lesstructures de controle de l’algorithme decrit en C.main () {

int i ; int T[10] ;i = 0 ;while (i < 10)

{ T[i] = 2*i + 1 ; i = i + 1 ; }}

La structure de procedure du programme C donne les lignes 3, 25 et 26(Cf. Chapitre 13, paragraphe 3.5).

1 .text 16 mov %o0,%o32 main: 17 sll %o3,1,%o43 save %sp,-104,%sp 18 add %o4,1,%o34 mov 0,%o0 19 st %o3,[%o1+%o2]5 .LL2: 20 add %o0,1,%o06 cmp %o0,9 21 b .LL27 ble .LL4 22 nop8 nop 23 .LL3:9 b .LL3 24 .LL1:10 nop 25 ret11 .LL4: 26 restore12 mov %o0,%o2 2713 sll %o2,2,%o1 28 .data14 sethi %hi(T),%o3 29 T: .skip 4015 or %o3,%lo(T),%o2 30

version en ligne - [PDF Document] (320)

312 Le langage machine et le langage d’assemblage

version en ligne - [PDF Document] (321)

Chapitre 13

Traduction des langages astructure de blocs en langaged’assemblage

Nous nous interessons ici au probleme de la traduction d’un langage astructure de blocs en langage machine ou, de maniere equivalente, en langaged’assemblage. Le petit langage d’actions presente au chapitre 4 est un bonrepresentant de langage imperatif a structure de blocs, qui sont ici les actionset les fonctions parametrees, munies de lexiques locaux.

En etudiant la traduction de ce petit langage nous rencontrons lesproblemes communs poses par la traduction d’un langage imperatif commePascal, Ada, C, C++, Java ... La traduction des constructions de haut niveaude ces langages (objets de C++ ou Java, genericite d’Ada, etc.) ou la traduc-tion des langages non imperatifs, pose de nouveaux problemes, qui depassentle cadre de cet ouvrage. La plupart du temps, les langages dont la structureest tres eloignee d’un style imperatif comme celui presente ici, sont traduits enlangage d’assemblage en passant par une etape intermediaire (un programmeC par exemple).

Parmi toutes les methodes a mettre en oeuvre pour traduire un programmedu langage d’actions en langage machine, nous avons deja etudie certainspoints :

– Au chapitre 4 nous avons montre comment representer les types complexesen memoire, et comment transformer les affectations a des objets complexesen suite de transferts memoire de taille fixee.

– Independamment, nous avons montre au chapitre 5 comment traduire lesstructures de controle en etats et transitions d’une machine sequentielle aactions, et comment definir le lexique de cette machine.

– Au chapitre 12 nous avons defini un lexique restreint pour machinesequentielle a actions, qui correspond a la structure d’un langage machinetype : les tests doivent etre uniquement binaires, et les predicats restreintsa un ensemble de fonctions predefinies sur des variables Z, N, C et V qui

version en ligne - [PDF Document] (322)

314 Traduction des langages a structure de blocs en langage d’assemblage

modelisent les indicateurs arithmetiques. Les variables du lexique restreintrepresentent la memoire (le tableau MEM) et les registres.

Comment utiliser ces transformations pour obtenir le programme en lan-gage d’assemblage correspondant a un programme du langage d’actions, et quereste-t-il a faire ? Deux types de problemes se posent.

Tout d’abord, il faut decrire la transformation de chaque bloc (action oufonction) d’un programme du langage d’actions en machine sequentielle alexique restreint, pour se rapprocher d’un langage machine. En particulier,puisque le lexique restreint ne propose que le tableau MEM et quelques va-riables representant les registres, il faut decider, pour chacune des variablesdefinies dans le bloc, d’un emplacement memoire qui lui correspond. La diffi-culte de l’installation en memoire du lexique vient de l’existence des lexiqueslocaux de fonctions et des actions eventuellement recursives. Il faut d’autrepart traduire toutes les structures conditionnelles et iteratives en n’utilisantque des branchements binaires, portant des predicats predefinis sur Z, N, C etV.

Supposons maintenant qu’on a su obtenir, pour chaque bloc (action oufonction) du langage d’actions, une machine sequentielle a lexique restreint. Ilne reste plus qu’a traduire ces machines sequentielles en textes de programmesen langage d’assemblage. Cela demande de disposer de maniere sequentielle lescodages des differents etats, avec les branchements adequats ; il faut finalementcoder les appels de procedures ou fonctions en utilisant les instructions d’appelde sous-programmes offertes par le langage machine considere.

Nous etudions tout d’abord dans le paragraphe 1. le cas des programmesa un seul bloc : installation du lexique en memoire et obtention d’unemachine sequentielle a lexique restreint, production du texte en langaged’assemblage. Le paragraphe 2. presente les problemes specifiques au co-dage des programmes a plusieurs blocs : probleme du lexique local, desprocedures ou fonctions recursives, passage de parametres et contenu dela memoire lors de l’execution. En se basant sur les principes etudiesdans ces deux premiers paragraphes, il est possible de developper au pa-ragraphe 3. des solutions globales pour deux types de langages machine :un langage machine a structure de pile explicite, type 68000 ; un langagemachine a fenetres de registres, type sparc.

1. Cas des programmes a un seul bloc

Nous avons etudie au chapitre 5 la traduction des programmes du lan-gage d’actions en machines sequentielles avec actions generales. Il ne resteplus qu’une etape pour atteindre des machines sequentielles a lexique res-treint : il faut installer toutes les variables dans la memoire ou les registres(paragraphe 1.1), puis transformer les branchements generaux en branche-

version en ligne - [PDF Document] (323)

1. Cas des programmes a un seul bloc 315

ments binaires faisant intervenir des conditions predefinies sur les indicateursarithmetiques (paragraphe 1.3).

A partir des machines sequentielles a lexique restreint, on obtient facilementdes textes de programmes en langage d’assemblage (paragraphe 1.4).

1.1 Installation du lexique en memoire

1.1.1 Le probleme

Le langage d’actions presente offre la notion de lexique : on declare desvariables en les nommant. La declaration donne le type, et permet donc deconnaıtre la taille necessaire a la representation en memoire des valeurs de cettevariable. Dans tout ce qui precede, nous avons etudie comment representer enmemoire une donnee de type quelconque, en supposant qu’il y a de la placelibre, en quantite suffisante, a partir d’une certaine adresse donnee.

Remarque : Notons que nous ne parlons pas ici d’allocation dynamique,d’allocation de variables a la demande du programme par les actions Alloueret Liberer comme defini au paragraphe 4. du chapitre 4.

Nous ne nous sommes pas interroges sur le mecanisme d’allocation de lamemoire, c’est-a-dire sur la maniere de choisir une adresse pour chaque va-riable, en assurant que deux variables distinctes sont installees dans des por-tions disjointes de la memoire globale. Plus precisem*nt, cette contrainte vautpour les variables dont les periodes de vie (on dit aussi duree de vie) ne sontpas disjointes (Cf. Paragraphes 1.1.2, 2.1.1 et 2.6).

Nous montrons ici comment remplacer systematiquement les variables pardes zones du tableau MEM : il faut d’abord choisir la position de chaque va-riable, ce qui donne une adresse a ; on remplace ensuite toute occurrence dunom de variable dans le programme par MEM[a]. On peut alors oublier lelexique. On obtient ainsi de maniere systematique l’algorithme qu’on auraitpu obtenir a la main en installant soi-meme toutes les variables necessairesdans le tableau MEM. Les programmes en deviennent bien sur illisibles ; cettetransformation est d’habitude le travail du compilateur, pas celui du pro-grammeur. La transformation de programmes que nous proposons ici peutetre vue comme la premiere etape de gestion de ce que l’on appelle couram-ment systeme a l’execution dans les ouvrages traitant de compilation (voir parexemple [CGV80, WM94]).

1.1.2 Solution pour le lexique d’un programme a un seul bloc

Pour choisir la position des variables on procede de maniere sequentielle,par exemple dans l’ordre du lexique, en menageant des espaces perdus entreles variables pour satisfaire aux eventuelles contraintes d’alignement. La taillenecessaire pour l’installation de toutes les variables du lexique en memoire estdonc superieure ou egale a la somme des tailles necessaires pour les variables.

version en ligne - [PDF Document] (324)

316 Traduction des langages a structure de blocs en langage d’assemblage

On parlera par la suite de taille du lexique. Attention, cette taille peut dependrede l’ordre de declaration des variables, qui a une influence sur la position etla taille des trous necessaires aux contraintes d’alignement. Noter que, dans lecas d’un programme a un seul bloc, les variables ont toutes la meme duree devie, qui est celle du programme lui-meme.

Dans l’exemple ci-dessous, la memoire est un tableau d’octets, et on disposedes affectations de tailles 1, 2 et 4 :

N : l’entier 42Entier32s : le type entier dans [−232−1, 232−1 − 1]Entier16ns : le type entier dans [0, 216 − 1]Structure : le type < x : un Entier32s, y : un Entier16ns>.c1, c2 : des caracteres ; a : un Entier32s ; b : un Entier16nsT : un tableau sur [0..N-1] de Structures

Les variables a installer en memoire sont c1, c2, a, b et T. Commenconsa une adresse A multiple de 4 pour c1 ; c2 peut etre place juste a cote, al’adresse A + 1 ; a doit etre place un peu plus loin, a l’adresse A + 4 ; b peutetre place a l’adresse A + 8, sans perte de place ; T doit demarrer a l’adressemultiple de 4 qui suit A + 8 + 2, c’est-a-dire A + 12. Noter que 2 octets sontperdus entre b et T. Chaque element de T occupe 8 octets. T[7].y est a l’adresseA + 12 + (7× 8) + 4. On traduit alors l’algorithme

c1 ←− c2 ; T[7].y ←− ben :

delta c1 : l’entier 0 ; delta c2 : l’entier 1 ; delta a : l’entier 4 ; delta b : l’entier 8delta T : l’entier 12 ; delta x : l’entier 0 ; delta y : l’entier 4taille structure : l’entier 8MEM[A+delta c1] ←− 1 MEM[A+delta c2]MEM[A+delta T+7*taille structure + delta y] ←− 2 MEM[A+delta b]

1.2 Traduction des operations de base sur les types dedonnees

Nous avons introduit dans le langage d’actions du chapitre 4 des operationssur les types de donnees de base : entiers, booleens, caracteres. Pour les typesstructures, la seule operation globale que nous ayons envisagee est l’affectation,et nous avons deja montre comment l’exprimer en termes de transferts memoireelementaires (chapitre 4, paragraphe 3.).

Le lexique restreint qui represente un langage machine type ne propose queles operations arithmetiques, logiques ou structurelles (Cf. Chapitre 12) dis-ponibles dans un processeur usuel. Il faut donc exprimer toutes les operationssur les types de base en termes de ces operations elementaires.

version en ligne - [PDF Document] (325)

1. Cas des programmes a un seul bloc 317

1.2.1 Cas des operations sur les caracteres

Toutes les operations sur les caracteres sont traduites en operationsarithmetiques ou logiques par l’intermediaire du code ASCII. Nous signalionsau chapitre 4, paragraphe 1.3.2, que le code ASCII est concu de maniere afaciliter cette traduction.

1.2.2 Cas des operations booleennes

Il y a trois types d’utilisation des booleens : les operations internes del’algebre de Boole etudiee au chapitre 2 (negation, conjonction, disjonction,etc.) ; les operations de comparaison sur des types quelconques, qui produisentdes booleens ; les conditions de structures conditionnelles ou iteratives. Cestrois types d’utilisations interferent librement comme dans :

X, Y : des entiers ; B, B’ : des booleensB ←− X < Y et Y ≥ 0si (non B ou B’) alors ... sinon ...Il faut choisir un codage des booleens compatible avec ces trois types d’uti-

lisation, et susceptible d’etre manipule efficacement en langage machine. Typi-quement, les processeurs offrent des operations booleennes bit a bit (Cf. Cha-pitre 12, paragraphe 1.4.1) qu’on peut utiliser pour coder les operationsbooleennes. En revanche il n’existe pas, en general, d’instruction de compa-raison arithmetique de deux registres, avec resultat booleen dans un troisieme,qui permettrait de coder simplement B ←− X < Y. Le resultat booleen descomparaisons est a recuperer dans les indicateurs arithmetiques. D’autre part,comme le mot d’etat du processeur n’est en general pas accessible en lectureexplicite, on doit coder B ←− X < Y comme on coderait :

si X < Y alors B ←− vrai sinon B ←− faux

On retrouve donc le probleme general de codage des structures condition-nelles.

1.2.3 Cas des entrees/sorties

Nous avons introduit dans le langage d’actions des actions Lire et Ecriregeneriques (c’est-a-dire valables pour tous types). La manipulation detailleedes peripheriques d’entree/sortie ne fait pas partie, en general, du codage desprogrammes ecrits en langage de haut niveau. Nous verrons en detail au cha-pitre 16 comment sont realisees les communications entre le processeur et desperipheriques comme le clavier et l’ecran. Les programmes necessaires, souventecrits directement en assembleur, font partie du logiciel de base fourni avec unordinateur ; nous definissons au chapitre 17 l’interface entre ces programmesde bas niveau ranges dans une bibliotheque et les programmes en langage d’as-semblage produits par les compilateurs de langages de haut niveau. On trouveentre autres dans le logiciel de base usuel les primitives de manipulation desfichiers, telles que nous les definissons au chapitre 19.

Pour un compilateur, le codage d’une entree/sortie est completement simi-

version en ligne - [PDF Document] (326)

318 Traduction des langages a structure de blocs en langage d’assemblage

laire a l’appel d’une procedure parametree. Simplement, cette procedure ayantete ecrite directement en assembleur, ou produite independamment par uncompilateur, il faut adopter les memes conventions de passages de parametreset d’appel de sous-programme, dans les deux contextes. C’est d’ailleurs leprobleme general de la compilation separee que nous etudions au chapitre 18.

Le seul travail du compilateur consiste a traduire une instruction de laforme Lire (X), ou X est une variable de type quelconque, en un ensembled’operations de lecture elementaires disponibles dans la bibliotheque. On nepeut pas supposer, en effet, que la bibliotheque d’entrees/sorties standard four-nit une primitive de lecture pour tout type susceptible d’etre defini dans unprogramme utilisateur.

La plupart des langages de programmation n’autorisent les primitives Lireet Ecrire que sur les types numeriques, les caracteres et les chaınes de caracteres.Pour les types numeriques cela suppose une convention de notation (decimalpour les entiers, norme IEEE... pour les flottants). Ainsi en Pascal est-il im-possible de lire un booleen, defini comme un type enumere, par manque deconvention sur la notation des booleens. En Ada le compilateur traduit les lec-tures de booleens en lectures de chaınes de caracteres, suivies de conversionsdes chaınes valides true et false en representation interne des booleens.

Dans les exemples de ce chapitre, nous n’utilisons Lire et Ecrire que pourdes entiers.

1.3 Traduction des conditions generales en conditionsdes machines restreintes

1.3.1 Codage de conditionnelles n-aires, type selon

La plupart des langages machine disposent de branchements uniquementbinaires. Les structures conditionnelles de la forme selon du langage d’actionsutilise dans cet ouvrage, ou bien les structures switch de C, case de Pascalet Ada, sont donc traduites en sequences de conditionnelles binaires.

1.3.2 Codage de conditions booleennes complexes

Quel que soit l’ensemble des predicats fonctions de N, Z, C et V disponiblesdans le langage machine cible, il est toujours possible d’ecrire dans le langaged’actions des conditions qui ne se traduisent pas par un seul predicat.

On a donc le meme probleme pour coder : si X < Y et Y > 0 graceaux 16 predicats usuels presentes au chapitre 12, figure 12.4, que pour co-der si X ≤ Y grace aux 8 predicats du processeur 6502. La solution generaleconsiste a enchaıner des conditionnelles. On traduit donc

si X < Y et Y > 0 alors A1 sinon A2en :

si X < Y alors (si Y > 0 alors A1 sinon A2) sinon A2.

version en ligne - [PDF Document] (327)

2. Cas des programmes a plusieurs blocs 319

A1tantque C1

A2si C2 alors A3 sinon A4A5

A6

A1 :... ! codage de l’action A1C1 :... ! codage de la condition C1

Bicc A6 ! branchement sur non C1A2 :... ! codage de l’action A2C2 :... ! codage de la condition C2

Bicc A4 ! branchement sur non C2A3 :... ! codage de l’action A3

ba A5 ! branchement inconditionnelA4 :... ! codage de l’action A4A5 :... ! codage de l’action A5

ba C1 ! branchement inconditionnelA6 :... ! codage de l’action A6

Fig. 13.1 – Sequentialisation des codages en langage d’assemblage des etats d’une ma-chine sequentielle a actions et lexique restreint.

1.4 Traduction des machines sequentiellesa lexique restreint en langage d’assemblage

Grace aux transformations de programmes suggerees ci-dessus, on est ca-pable d’obtenir un programme du langage d’actions dans lequel : 1) toutes lesdonnees sont en memoire ou dans des registres ; 2) on n’a plus que des struc-tures conditionnelles binaires (des si ... alors ... sinon ...) et des iterations : 3)toutes les conditions sont elementaires, au sens ou on peut en obtenir la valeurbooleenne par une ou plusieurs instructions de calcul, suivies d’une consulta-tion du mot d’etat. Ainsi X+2*Y < 4 est elementaire, alors que X < Y et Y > 0ne l’est pas. Cette forme de programme donne directement une machinesequentielle a lexique restreint, dans laquelle certains etats correspondent aucalcul des conditions elementaires.

La technique consiste ensuite a coder chaque etat par une sequence d’ins-tructions du langage d’assemblage, a laquelle on associe une etiquette de debut.Il ne reste plus qu’a disposer ces differentes sequences les unes a la suite desautres, en ajoutant les branchements necessaires.

Cette technique est illustree par l’exemple des figures 13.1 et 13.2.

2. Cas des programmes a plusieurs blocs

La difficulte de la traduction en langage d’assemblage des programmes astructure de blocs provient de deux aspects de ces programmes : les lexiqueslocaux et le passage de parametres, dans le cas le plus general ou les actionset fonctions introduites peuvent etre recursives. Nous etudions les problemeslies aux lexiques locaux et aux parametres dans les paragraphes 2.1 et 2.2ci-dessous, avant de les resoudre par une gestion de la memoire en pile, aux

version en ligne - [PDF Document] (328)

320 Traduction des langages a structure de blocs en langage d’assemblage

tantque A 6= Bsi A > B alors

A ←− A − Bsinon

B ←− B − A

! on suppose A dans r1 et B dans r2boucle : SUBcc r1, r2, g0

BEQ finSUBcc r1, r2, g0BLEU sinonSUBcc r1, r2, r1BA finsi

sinon : SUBcc r2, r1, r2finsi : BA bouclefin :

Fig. 13.2 – Sequentialisation des codages en langage d’assemblage des etats d’une ma-chine sequentielle a actions et lexique restreint : exemple du pgcd, Cf. Cha-pitre 12, figure 12.5. Le programme en langage d’assemblage est obtenu demaniere systematique ; il peut ensuite etre simplifie de plusieurs facons : sup-pression de la deuxieme comparaison SUBcc r1, r2, g0 ; remplacement duBA finsi par BA boucle directement.

paragraphes 2.3 et 2.4. Enfin le paragraphe 2.5 introduit le lien dynamique descompilateurs, et le paragraphe 2.6 resume l’occupation de la memoire lors del’execution d’un ensemble de procedures et fonctions parametrees.

Dans le cas ou une procedure A appelle une procedure B, nous appelonscontexte appelant l’ensemble des variables de A et contexte appele l’ensembledes variables de B.

2.1 Installation en memoire des lexiques locaux

2.1.1 Cas des lexiques locaux sans recursivite

Dans le cas d’un ensemble d’actions et fonctions sans recursivite (memecroisee), on peut reprendre l’approche suivie precedemment pour le lexiqued’un programme a un seul bloc : on installe en memoire toutes les variablesglobales, puis toutes celles de la premiere fonction ou action, a la suite, puistoutes celles de la deuxieme fonction ou action, etc. Si les lexiques locauxde deux actions ou fonctions A1 et A2 contiennent tous deux le nom i, aveceventuellement des types differents, alors ce nom correspond a deux emplace-ments distincts de la memoire, eventuellement de tailles differentes. En tra-duisant l’algorithme de A1 on utilise l’un des emplacements, et en traduisantl’algorithme de A2 on utilise l’autre.

Si deux actions ou fonctions A1 et A2 sont telles que A1 n’appelle jamaisA2 et A2 n’appelle jamais A1, on se convainc aisem*nt que ces deux blocsne seront jamais actifs en meme temps : on dit que leurs durees de vie sontdisjointes. Dans ce cas leurs lexiques locaux peuvent occuper la meme portionde la memoire.

version en ligne - [PDF Document] (329)

2. Cas des programmes a plusieurs blocs 321

2.1.2 Cas des lexiques locaux avec recursivite

Lorsque les actions et fonctions peuvent etre recursives, il n’est plus pos-sible d’appliquer la meme methode. Observons pour nous en convaincre leprogramme donne a titre d’exemple figure 13.3, qui utilise une action recursivede calcul de la suite de Fibonacci (definie par : x0 = x1 = 1 puis ∀n ≥ 2 xn =xn−1 +xn−2). La figure 13.4 illustre le deroulement du calcul si l’entier lu dansle programme principal est 4.

Pour obtenir le resultat correct il faut disposer d’autant d’exemplaires def1 et f2 (notes f1’, f1”, etc.) que d’appels imbriques. Il faut donc un espacememoire pour la variable locale f1 (resp. f2) de CalculFibo pour chaque appelde cette action. Or le nombre d’appels depend de la variable d’entree A ; savaleur est obtenue par Lire et est donc par definition inconnue quand on est entrain de modifier le texte du programme, independamment de toute execution,comme c’est le cas ici. Il nous faut donc trouver un mecanisme permettantd’allouer une zone de memoire a chaque entree dans la procedure, zone quidevra etre restituee avant la sortie de procedure.

2.2 Installation en memoire des parametres

Lorsqu’un programme comporte plusieurs blocs, il fait egalement usage deparametres donnees ou resultats. Comme les lexiques locaux, le passage deparametres demande de la memoire. En effet, un passage de parametres est unechange d’information entre le contexte appelant et le contexte appele. Tout sepasse comme si ces deux contextes avaient acces a un emplacement dans uneportion de memoire partagee geree de maniere tres particuliere : l’appelant peuty ecrire une information a transmettre a l’appele ; l’appele y lit l’information.Le passage de parametres necessite donc une sorte de boıte aux lettres.

2.2.1 Conventions de passage des parametres donnees ou resultats

Examinons tout d’abord comment se passe l’echange d’information entreappelant et appele, lors d’un passage de parametres, selon qu’il s’agit d’unedonnee ou d’un resultat. Nous traitons ici le parametre resultat avec le mode depassage par reference. Il existe d’autres modes de passage de parametres dontles particularites sont expliquees dans les ouvrages traitant de compilation (voirpar exemple [CGV80, WM94]) et dont nous ne parlons pas ici. Consideronsl’algorithme de calcul de la somme de deux entiers, donne figure 13.5.

Le programme principal appelle CalculSomme en lui passant deux donneesdans les parametres A et B, et en recoit un resultat dans le parametre R. Sup-posons pour l’instant que l’allocation memoire soit resolue pour les parametres(voir plus loin) et qu’on dispose de 3 emplacements memoire d’adresses res-pectives aA, aB et aR pour le passage de parametres. Par ailleurs les variablesdu lexique global sont placees aux adresses aX, aY et aZ. L’algorithme modifieest donne figure 13.6.

version en ligne - [PDF Document] (330)

322 Traduction des langages a structure de blocs en langage d’assemblage

CalculFibo : une action(la donnee n : un entier ≥ 0 ; le resultat f : un entier > 0){ etat final : f = xn }lexique local :

f1, f2 : des entiers > 0algorithme :

si n = 0 ou n = 1 alors f ←− 1sinon

CalculFibo (n − 1, f1) ; CalculFibo (n − 2, f2)f ←− f1 + f2

lexique du programme principal :A, B : des entiers ≥ 0

algorithme du programme principal :Lire (A) ; CalculFibo (A, B) ; Ecrire (B)

Fig. 13.3 – Algorithme recursif de calcul de la suite de Fibonacci

1. CalculFibo (4, B)1.1 CalculFibo (3, f1)

1.1.1 CalculFibo (2, f1’)1.1.1.1 CalculFibo (1, f1”)

f1” ←− 11.1.1.2 CalculFibo (0, f2”)

f2” ←− 11.1.1.3 f1’ ←− f1” + f2”

1.1.2 CalculFibo (1, f2’)f2’ ←− 1

1.1.3 f1 ←− f1’+ f2’1.2 CalculFibo (2, f2)

1.2.1 CalculFibo (1, f1’)f1’ ←− 1

1.2.2 CalculFibo (0, f2’)f2’ ←− 1

1.2.3 f2 ←− f1’ + f2’1.3 B ←− f1+f2

Fig. 13.4 – Deroulement du calcul de la suite de Fibonacci, pour l’entree 4.f1” ←− 1 ; f2” ←− 1 ; f1’ ←− f1” + f2” { = 2 } ;f2’ ←− 1 ; f1 ←− f1’+ f2’ { = 3 } ;f1’ ←− 1 ; f2’ ←− 1 ; f2 ←− f1’ + f2’ { = 2 } ;B ←− f1+f2 { = 5 } ;

version en ligne - [PDF Document] (331)

2. Cas des programmes a plusieurs blocs 323

CalculSomme (les donnees a, b : deux entiers ; le resultat r : un entier) :r ←− a+b

lexique du programme principalX, Y, Z : trois entiers

algorithme du programme principalLire (X) ; Lire (Y)CalculSomme (X+1, Y−2, Z)Ecrire (Z)

Fig. 13.5 – Algorithme de calcul de la somme de deux entiers

CalculSomme :MEM[MEM[aR]] ←− MEM[aA] + MEM[aB]

algorithme du programme principal... { traduction de Lire (X) ; Lire (Y) }MEM[aA] ←− 4 MEM[aX] + 1MEM[aB] ←− 4 MEM[aY] − 2MEM[aR] ←− 4 aZCalculSomme... { traduction de Ecrire (Z) }

Fig. 13.6 – Interpretation des natures de parametres

Passage des donnees par valeur : Les valeurs des expressions qui consti-tuent les parametres donnees effectifs doivent etre calculees puis placees enmemoire par l’appelant, a un endroit connu de l’appele qui les lira. Ainsion calcule la valeur de X+1, c’est-a-dire MEM[aX] + 1, et on la recopie dansMEM[aA].

Passage des resultats par reference : Pour les parametres resultats,passer leur valeur n’a aucun interet. Par definition un resultat est produit parl’action appelee. Quand on ecrit CalculSomme (X+1, Y−2, Z), on s’attend ace que la valeur de la variable Z soit modifiee. Pour cela il faut que l’actionappelee soit capable d’affecter une nouvelle valeur a la variable Z. Si l’ac-tion CalculSomme etait toujours appelee depuis le programme principal, aveccomme troisieme parametre la variable Z, il suffirait d’ecrire dans le corps del’action : MEM[aZ] ←− .... Mais elle peut etre appelee a divers endroits duprogramme, avec des parametres differents. Le corps de l’action doit donc etrecapable d’ecrire dans la variable qu’on lui indique. Pour assurer ce fonction-nement, l’adresse de la variable qui constitue le parametre resultat effectif estfournie a l’appelee ; elle est placee en memoire par l’appelant, a un endroitconnu de l’appelee qui la lira. On ecrit donc : MEM[aR] ←− 4 aZ. L’appeleepeut alors recuperer cette adresse dans MEM[aR], et s’en servir pour ecriredans la bonne variable, par indirection : MEM[MEM[aR]] ←− .... On retrouve

version en ligne - [PDF Document] (332)

324 Traduction des langages a structure de blocs en langage d’assemblage

la contrainte enoncee au paragraphe 1.6 du chapitre 4 : les parametres effectifsresultats doivent etre des expressions qui pourraient figurer en partie gauched’affectation, c’est-a-dire designer des emplacements memoire.

Si l’on definit la variable :T : un tableau sur [0..N] de < y : un caractere ; x : un entier >

l’expression T[4].x peut-etre utilisee comme parametre resultat deCalculSomme. Dans ce cas le passage de parametre consiste a ecrire,dans le programme principal : MEM[aR] ←− 4 aT + 4*8 + 4, ou aT designel’adresse de debut du tableau T. Le corps de CalculSomme est inchange.

2.2.2 Installation en memoire des boıtes aux lettres

Une fois adoptees ces conventions de passage des parametres donnees parvaleur et resultat par adresse, il reste a etudier la maniere d’obtenir aA, aB etaR : c’est le probleme de l’allocation memoire pour les parametres.

Cas sans recursivite : Il faut prevoir une zone de memoire pour chaqueparametre de F1 vers F2, pour chaque couple d’actions ou fonctions F1, F2telles qu’un appel de F2 apparaıt quelque part dans le corps de F1. Un examendu texte complet du programme, independamment de toute execution, permetde reperer qui appelle qui, et la place necessaire pour la liste de parametres,dans chaque cas. On choisit alors les adresses dans MEM, par exemple a lasuite de tous les emplacements alloues aux variables globales. Il suffit de setenir a ces choix lorsque l’on transforme les algorithmes des appelants et desappeles, comme nous l’avons fait pour CalculSomme ci-dessus.

Cas avec recursivite : Dans le cas avec recursivite, on retombe sur leprobleme evoque pour les variables des lexiques locaux : il faut un emplacementdedie aux parametres, pour chaque appel de F1 qui appelle F2, a l’execution.Le choix des adresses des parametres ne peut donc se faire statiquement, c’est-a-dire au moment de la transformation du programme.

2.3 Allocation dynamique de memoire pour les lexiqueslocaux

Il apparaıt la necessite de gerer dynamiquement l’association d’emplace-ments en memoire aux variables des lexiques locaux. Une solution consistea utiliser les primitives d’allocation dite dynamique de memoire etudiees auchapitre 4, paragraphe 4.

Supposons que chaque appel de CalculFibo utilise Allouer et Liberer pourreserver momentanement la memoire necessaire a l’installation de ses variableslocales f1 et f2. Notons taille 2 entiers le nombre d’octets necessaires a cesdeux entiers. Il nous faut encore une variable locale p qui donne l’adresse dela zone allouee. On suppose qu’il y a toujours de la place disponible. Celadonne le programme de la figure 13.7. Noter que l’allocation memoire pour les

version en ligne - [PDF Document] (333)

2. Cas des programmes a plusieurs blocs 325

differentes variables du lexique local suit la meme demarche que celle presenteeau paragraphe 1.1.2. Une fois obtenue une adresse de base p par allocationdynamique, on dispose les variables les unes apres les autres en menageant desespaces eventuels pour tenir compte des contraintes d’alignement.

Cette transformation n’a pas encore permis d’eliminer le lexique local : ona remplace les variables d’origine par une seule : p, mais il en faut toujoursautant d’exemplaires que d’appels de CalculFibo.

Toutefois, on peut poursuivre la transformation du programme. En effet, onremarque que, vue la structure des appels d’actions et fonctions, la dernierezone allouee est toujours la premiere liberee (autrement dit, les appels sontbien parentheses : on ne peut pas successivement entrer dans A ; entrer dansB ; sortir de A, sortir de B). On profite donc de cette situation tres particulierepour ne pas utiliser un mecanisme general d’allocation et liberation d’espacesmemoire, dont la complexite provient justement de la gestion des trous quiapparaissent si l’on ne libere pas toujours le dernier alloue.

On propose de realiser l’allocation memoire par les algorithmes de la fi-gure 13.9. Le corps des actions est tres court ; si l’on suppose de plus qu’ily a toujours de la place, on peut remplacer tout appel Allouer (p, n) parpp ←− pp − n ; p ←− pp et tout appel Liberer (p, n) par pp ←− pp + n. Onpeut ensuite eliminer la variable locale p et ne garder que la variable globalepp. Cela donne l’algorithme de la figure 13.8. On dit que la memoire est gereeen pile, pour rendre compte du fait que les allocations se font selon un ordredernier alloue/premier libere (Cf. Chapitre 4, paragraphe 5.).

2.4 Allocation dynamique de memoire pourles parametres

Pour l’allocation memoire necessaire aux parametres, il faut prevoir dememe des appels aux actions Allouer et Liberer. L’allocation de memoire pourles parametres a la meme propriete que celle des variables locales : on libere tou-jours les derniers alloues. On applique donc la meme simplification qui consistea allouer et liberer de la memoire grace aux procedures de la figure 13.9. L’allo-cation de memoire pour le passage de parametres se fait dans l’appelant, justeavant l’appel ; la liberation se fait juste apres l’appel, toujours dans l’appelant.

En appliquant toutes les transformations etudiees jusque la (dont lemecanisme de passage de parametre resultat), on obtient l’algorithme donnefigure 13.10. La figure 13.11 illustre l’evolution du contenu de la memoire lorsde l’execution du programme qui appelle CalculFibo(4, ...).

Noter que la variable pp est geree grace a des operations parfaitementsymetriques : pp ←− pp − 8 (pour faire de la place aux variables locales) enentrant dans CalculFibo et pp ←− pp + 8 en en sortant ; pp ←− pp − 8 justeavant l’appel recursif de Calcul Fibo (pour tenir compte de la place occupeepar les parametres), pp ←− pp + 8 juste apres. Cette forme de code garantitl’invariant suivant : l’etat de la memoire (en particulier la position de pp) est

version en ligne - [PDF Document] (334)

326 Traduction des langages a structure de blocs en langage d’assemblage

CalculFibo : une action (la donnee n : un entier ≥ 0 ; le resultat f : un entier > 0)p : un pointeur de caractere { variable LOCALE }{ lexique local : f1 sera en MEM[p+0] et f2 en MEM[p+4] }algorithme :

Allouer (p, taille 2 entiers)si n = 0 ou n = 1 alors f ←− 1sinon

CalculFibo (n − 1, MEM[p+0])CalculFibo (n − 2, MEM[p+4])f ←− MEM[p+0]+MEM[p+4]

Liberer (p, taille 2 entiers)lexique du programme principal :

A, B : des entiers ≥ 0algorithme du programme principal :

Lire (A) ; CalculFibo (A, B) ; Ecrire (B)

Fig. 13.7 – Installation du lexique local de CalculFibo en memoire

CalculFibo : une action (la donnee n : un entier ≥ 0 ; le resultat f : un entier > 0)algorithme :

{ Reservation de place pour les deux entiers du lexique local, qui renddisponibles les deux emplacements MEM[pp+0] et MEM[pp+4]. Poursimplifier, on ne fait pas le test de debordement (Cf. Figure 13.9) }pp ←− pp − taille 2 entiers{ Corps de l’action proprement dite }si n = 0 ou n = 1 alors f ←− 1sinon

CalculFibo (n − 1, MEM[pp+0])CalculFibo (n − 2, MEM[pp+4])f ←− MEM[pp+0]+MEM[pp+4]

{ Liberation de la place occupee par le lexique local }pp ←− pp + taille 2 entiers

lexique du programme principal :A, B : des entiers ≥ 0 ; pp : un pointeur

algorithme du programme principal :InitialiserLire (A)CalculFibo (A, B)Ecrire (B)

Fig. 13.8 – Simplification de l’allocation memoire

version en ligne - [PDF Document] (335)

2. Cas des programmes a plusieurs blocs 327

pp : un pointeurInitialiser :

pp ←− tmem

Allouer (p, n) :si pp − n < T+1 alors

p ←− NILsinon

pp ←− pp − np ←− pp

Liberer (p, n) :pp ←− pp + n

T+1

Zoneoccupee

tmemad

ress

escr

oiss

ante

s

Zonelibre

pp

tmem − 1

MEM

Fig. 13.9 – Gestion memoire simplifiee : pour allouer une nouvelle zone de taille n, ondeplace le pointeur pp de n octets vers les adresses decroissantes. La zoneainsi rendue disponible est entre les adresses pp incluse et pp+n exclue.

le meme a l’entree dans un bloc et a la sortie.

2.5 Reperage des objets locaux par rapport a la base del’environnement : lien dynamique

Nous remarquons dans l’exemple CalculFibo (figure 13.10) que la positionrelative a pp des objets presents en memoire est modifiee lorsque pp bouge.Ainsi, lors de l’entree dans CalculFibo, les parametres sont accessibles auxadresses MEM[pp+4] et MEM[pp+0]. Des que l’on diminue pp de 8, de manierea menager de la place pour les variables locales f1 et f2 de la procedureCalculFibo d’origine, le reperage des parametres devient : MEM[pp+4+8] etMEM[pp+0+8]. Rien de bien difficile a calculer, mais le nouveau programmede CalculFibo devient vite illisible sans dessin.

Le probleme vient du fait que les objets places en memoire (les variableslocales et les parametres) sont reperes par rapport a une unique adresse pp,elle-meme destinee a evoluer.

L’idee du lien dynamique que l’on trouve en compilation est tres simple :au lieu de reperer les objets locaux d’un bloc par rapport a l’adresse du haut,qui risque d’etre modifiee, il suffit de les reperer par rapport a l’adresse dubas, qui ne bouge pas pendant toute la duree de vie du bloc. On introduit uneadresse supplementaire pb, dite pointeur de base de l’environnement (framepointer en anglais), destinee a pointer sur la base de l’environnement du bloc

version en ligne - [PDF Document] (336)

328 Traduction des langages a structure de blocs en langage d’assemblage

CalculFibo : une action{ parametres : on recupere la valeur de la donnee n en MEM[pp+4] ; onecrit la valeur du resultat f a l’adresse indiquee dans MEM[pp+0]. }pp ←− pp − 8{ Attention, maintenant, n est en MEM[pp+4+8] et f en MEM[pp+0+8]Lexique local : f1 sera en MEM[pp+0] et f2 en MEM[pp+4] }

si MEM[pp+4+8] = 0 ou MEM[pp+4+8] = 1 alorsMEM[MEM[pp+0+8]] ←− 1

sinon{ Premier appel : (Point i) }

MEM[pp−4] ←− 4 MEM[pp+4+8] − 1MEM[pp−8] ←− 4 p+0pp ←− pp − 8 { place des parametres - (Point ii) }CalculFibopp ←− pp + 8 { on ote les parametres }

{ Deuxieme appel : }MEM[pp−4] ←− 4 MEM[pp+4+8] − 2MEM[pp−8] ←− 4 pp+4pp ←− pp − 8 { place des parametres }CalculFibopp ←− pp + 8 { on ote les parametres }

MEM[MEM[pp+0+8]] ←− MEM[pp+0]+MEM[pp+4]pp ←− pp + 8

lexique du programme principal :pp : un pointeur { Unique variable globale restante }

algorithme du programme principal :Initialiser { Initialisation de la zone pile }pp ←− pp − 8 { Place necessaire aux variables du lexique global }{ A est en MEM[pp+0] et B en MEM[pp+4]. }{ Traduction de l’appel Lire (A) : }

MEM[pp−4] ←− 4 pp+0 { adresse de A empilee }pp ←− pp − 4 ; Lire ; pp ←− pp + 4 { valeur de A lue en pp+0 }

{ Appel de CalculFibo (A, B) : (point 1) }MEM[pp−4] ←− 4 MEM[pp+0] { parametre donnee : valeur de A }MEM[pp−8] ←− 4 pp+4 { parametre resultat : adresse de B }pp ←− pp − 8 { Allocation memoire pour les parametres }{ (point 2) } CalculFibopp ←− pp + 8 { Liberation de la memoire des parametres }

{ Traduction de l’appel Ecrire (B) : }MEM[pp−4] ←− 4 MEM[pp+4] { valeur de B empilee }pp ←− pp − 4 ; Ecrire ; pp ←− pp + 4 { B ecrit }

Fig. 13.10 – Elimination complete des lexiques et des parametres dans CalculFibo (Ona suppose taille 2 entiers = 8).

version en ligne - [PDF Document] (337)

2. Cas des programmes a plusieurs blocs 329

CalculFibo (4, ...)avant le 1er appelrecursif (point i)

Prog. principalavant CalculFibopoint 2

Prog. principalPoint 1on a lu A=4

f1”’f2”’@f1”1f1”f2”

MEM

T

MEM

T

MEM

T

MEM MEM MEM

tmem tmem

@B

tmem

CalculFibo (4, ...)point ii

@B

tmem

CalculFibo (3, ...)point i

CalculFibo (1, ...)point i

tmemB

ppA=4

B

pp

@B

pp

@B

tmem

@B

4A=4

B

f1

f2@B4

A=4B

(f)(n)

T T T

pp

3@f1f1f2

@B4

B

A=4

(f)(n) 4

A=4

@B

f2f1

@f1

@f1

f2’

f1’

pp

B

@f13

f1’

f2’

@f13f1

(f)

(n)

f2@B4

A=4@B

pp

2@f1’

@f1

@f1’

@f1”

var.

loca

les

inutilis

ees

Fig. 13.11 – Contenu de la memoire lors de l’execution de CalculFibo

version en ligne - [PDF Document] (338)

330 Traduction des langages a structure de blocs en langage d’assemblage

en cours d’execution, c’est-a-dire juste sous les variables locales du bloc. Surla figure 13.12-a, les pointeurs de base d’environnement sont figures par desfleches en trait gras ; la notation @x est utilisee pour signifier l’adresse de x.

Lorsqu’on passe d’un bloc appelant a un bloc appele, il suffit de placerla variable pb a la base de l’environnement du bloc appele. Lorsque le blocappele se termine, il faut replacer pb a sa position anterieure, c’est-a-dire labase de l’environnement du bloc appelant. Contrairement a ce qui se passepour le pointeur pp, il n’est pas toujours aise de calculer l’ancienne positionde pb de maniere a deplacer pb par une action de la forme pb ←− pb + k. Onintroduit donc un mecanisme de sauvegarde de pb, ce qui donne le schema dela figure 13.12-b. Chacune des positions de pb pointe sur une case memoire quicontient la sauvegarde de l’ancienne valeur (plus bas dans la pile). La suite desces sauvegardes successives forme ce que l’on appelle le chaınage dynamique,ou lien dynamique.

Remarque : Il existe egalement en compilation une notion de lien statique,a ne pas confondre avec le lien dynamique. Le lien dynamique chaıne entre euxles environnements de deux blocs A et B tels que A appelle B, a l’execution.Le lien statique chaıne entre eux les environnements de deux blocs A et B telsque B est defini dans A, dans le texte du programme. Cela peut arriver enPascal, Ada, ANSI C, par exemple, mais pas en C classique.

La figure 13.13 donne le programme de calcul de la suite de Fibonacci danslequel on a introduit la manipulation de la variable pb.

2.6 Resume de l’occupation de la memoire et remarques

Nous avons deja dit au chapitre 4, paragraphe 4., que la memoire necessaireaux donnees d’un programme est formee de deux zones disjointes : une zonenecessaire a la gestion des zones memoire allouees et liberees dynamiquementa la demande du programme, qu’on appelle tas, et une zone necessaire a lagestion des variables du lexique global et des lexiques locaux des procedures.

Nous venons de voir precedemment que cette deuxieme zone comporte nonseulement les variables et les parametres mais aussi eventuellement des donneesde liaison entre appelant et appele : sauvegarde du lien dynamique dans notrecas, adresse de retour de sous-programme dans le cas ou l’instruction d’appell’empile (cas du 68000, paragraphe 3.4.1), lien statique eventuellement. Cettezone est geree comme une pile et on parle souvent de la pile a l’execution pourla designer.

Un certain nombre de variables peuvent aussi etre stockees dans les registresdu processeur. Il est alors necessaire d’assurer que leur valeur ne peut pasetre modifiee par un sous-programme appele. La sauvegarde eventuelle de cesregistres est aussi effectuee dans la zone pile (Cf. Paragraphe 3.1.3).

Noter que les acces a la zone pile sont des acces directs dans un tableau,par adresse et deplacement, du genre MEM[pp+4]. Dans une veritable pile lesseules actions autorisees sont Empiler et Depiler (Cf. Chapitre 4, paragraphe 5.)

version en ligne - [PDF Document] (339)

2. Cas des programmes a plusieurs blocs 331

Variables locales

du prog. principal

Variables locales

de CalculFibo

MEMMEM

ancien pb

ancien pbVariables localesde CalculFibo

... ...

(a) (b)

f1f2

param. @f1param. 3

f1f2

param. @Bparam. 4

A=4B

param. @f1param. 3

f1f2

param. @Bparam. 4A=4B

Fig. 13.12 – Pointeur de base d’environnement et lien dynamique. On reprend l’exemplede CalculFibo, figure 13.11.(a) : position des variables locales du programme principal lors de deuxappels de CalculFibo emboıtes ; les fleches indiquent la position de la basedes 3 environnements ; la variable pb doit prendre successivement ces 3valeurs lors du deroulement du programme.(b) : insertion des sauvegardes de pb.

version en ligne - [PDF Document] (340)

332 Traduction des langages a structure de blocs en langage d’assemblage

CalculFibo : une actionpp ←− pp − 4 ; MEM[pp] ←− pb { sauvegarde de pb }pb ←− pp { installation du nouveau pb, l’ancien est en MEM[pb] }{ parametres : n est en MEM[pb+8] ; f est en MEM[pb+4]. }pp ←− pp − 8 { Allocation pour les variables locales }{ Lexique local : f1 sera en MEM[pb−8] et f2 en MEM[pb−4] }si MEM[pb+8] = 0 ou MEM[pb+8] = 1 alors MEM[MEM[pb+4]] ←− 1sinon{ Premier appel : }

MEM[pp−4] ←− 4 MEM[pb+8] − 1MEM[pp−8] ←− 4 pb+4pp ←− pp − 8 ; CalculFibo ; pp ←− pp + 8

{ Deuxieme appel : }MEM[pp−4] ←− 4 MEM[pb+8] − 2MEM[pp−8] ←− 4 pb+4pp ←− pp − 8 ; CalculFibo ; pp ←− pp + 8

MEM[MEM[pb+4]] ←− MEM[pb−8]+MEM[pb−4]pp ←− pb { liberation des variables locales }pb ←− MEM[pp] ; pp ←− pp+4 { restauration de l’ancien pb }

lexique du programme principal :pp, pb : des pointeurs { Uniques variables globales restantes }

algorithme du programme principal :Initialiser { Initialisation de la zone pile }pb ←− pp { Initialisation du pointeur de base d’environnement }pp ←− pp − 8 { Place necessaire aux variables du lexique global }{ A est en MEM[pb−8] et B en MEM[pb−4]. }{ Traduction de l’appel Lire (A) : }

MEM[pp−4] ←− 4 pb−8pp ←− pp − 4 ; Lire ; pp ←− pp + 4

{ Appel de CalculFibo }MEM[pp−4] ←− 4 MEM[pb−8]MEM[pp−8] ←− 4 pb−4pp ←− pp − 8 ; CalculFibo ; pp ←− pp + 8

{ Traduction de l’appel Ecrire (B) : }MEM[pp−4] ←− 4 MEM[pb−4]pp ←− pp − 4 ; Ecrire ; pp ←− pp + 4

Fig. 13.13 – Elimination complete des lexiques et des parametres dans CalculFibo etintroduction du pointeur de base d’environnement pb.

version en ligne - [PDF Document] (341)

2. Cas des programmes a plusieurs blocs 333

et ne prejugent pas de l’implantation de la pile, qui peut fort bien etre unesequence chaınee.

Noter aussi que la gestion en pile de la memoire permet une reutilisationmaximale de la memoire pour les lexiques locaux de deux blocs qui ne s’ap-pellent pas l’un l’autre.

2.6.1 Problemes d’initialisation

Nous verrons plus tard que, lors de l’execution effective, le programme ditprincipal dans le texte d’un programme utilisateur n’est pas le premier blocexistant. Il y a toujours un appelant, ne fut-ce que l’interprete de commandesa partir duquel on lance l’execution du programme (Cf. Chapitre 20).

Le codage du programme principal suit donc exactement les memes prin-cipes que le codage des actions et fonctions parametrees. L’initialisation despointeurs pp et pb n’apparaıt pas dans le code des programmes utilisateurs.En produisant le codage du bloc qui correspond au programme principal, onsuppose que ce bloc herite, a l’execution, d’une valeur pertinente de ces deuxpointeurs, installee auparavant. Le codage du programme principal doit encontrepartie assurer que ce bloc se termine proprement comme une action oufonction, par un retour au contexte appelant.

2.6.2 Allocation memoire mixte statique/dynamique

L’allocation memoire pour les variables, et la transformation de programmecorrespondante, produit des programmes dans lesquels apparaissent des accesmemoire de la forme MEM[b+k], ou b est une adresse de base, et k est uneconstante calculee statiquement par le compilateur. En effet, dans le cas desprocedures et fonctions recursives, il est impossible d’associer statiquement(c’est-a-dire pendant la compilation et independamment des executions) uneadresse memoire a chaque nom de variable apparaissant dans le lexique. Plu-sieurs adresses correspondent au meme nom, et elles sont en nombre dependantde l’execution. Nous avons resolu cet aspect par une gestion de la memoire enpile, et une allocation mixte statique/dynamique : les adresses de base sontdynamiques, elles dependent de l’execution ; les deplacements des differentesvariables par rapport a l’adresse de base sont calcules statiquement, et sontindependants de l’execution.

La plupart des langages machine offrent des acces memoire avec adressageindirect par registre et deplacement, qui sont utilisables directement pour co-der nos programmes en langage d’assemblage. Il suffit que l’adresse de basesoit rangee dans un registre. S’il n’existe pas d’adressage avec deplacement,l’adresse complete de la variable peut etre calculee par une addition expliciteavant l’acces memoire.

En revanche le mode d’adressage indirect est indispensable. La gestion enpile de la memoire n’est pas implementable en langage machine sans adressageindirect pour les acces memoire : un adressage direct signifie que toutes les

version en ligne - [PDF Document] (342)

334 Traduction des langages a structure de blocs en langage d’assemblage

adresses sont calculables statiquement, et inscrites une fois pour toutes commedes constantes dans le programme en langage machine.

3. Traduction en langage d’assemblage :

solutions globales

On integre les solutions a tous les aspects en presentant deux classes desolutions : la classe des solutions a base de pile, du type de celle utilisee pourune machine 68000 ; la classe des solutions a base de fenetres de registres, dutype utilise pour une machine sparc.

3.1 Utilisation des registres et sauvegarde

3.1.1 Utilisation des registres pour les variables globales

Les registres de la machine pour laquelle on produit du code sont bien ap-propries pour ranger les uniques variables globales qui subsistent apres toutesles transformations de programme envisagees : les deux pointeurs, ou adresses,pp et pb. En effet les registres sont par definition accessibles dans tout contexte,et la rapidite d’acces (memoire plus rapide que la grande memoire, nombreusesinstructions du langage machine travaillant directement sur des registres) estinteressante pour des variables qui sont manipulees tres souvent.

3.1.2 Utilisation des registres pour les temporaires

D’autre part, lorsqu’on code un programme d’un langage de haut niveau,il est courant de faire apparaıtre des variables temporaires dans les calculs, quine correspondent a aucun nom explicitement defini par l’utilisateur dans lelexique. Pour un programme comme :

x, y, z : des entiersx ←− 3*(y + 2*z) − 7*(x+y)z ←− y

Il est impossible de calculer l’expression a affecter a x sans utiliser d’autres em-placements memoire que ceux alloues aux noms x, y, z. Dans certains langagesmachine (comme celui du sparc), il est meme impossible de coder l’affectationz ←− y (z et y etant en memoire) sans passer par un registre intermediaire :il n’y a pas de transfert memoire vers memoire directement.

Ou placer ces temporaires de calcul ? Pour des raisons de temps d’execution,on aimerait les placer dans les registres de la machine. On peut toujours ima-giner, toutefois, une expression suffisamment compliquee pour necessiter plusde variables temporaires qu’il n’y a de registres disponibles. Dans ce cas lescompilateurs placent les temporaires dans la pile.

version en ligne - [PDF Document] (343)

3. Traduction en langage d’assemblage : solutions globales 335

3.1.3 Necessite de sauvegarde des registres

Si les registres de la machine servent aux temporaires de calcul, il apparaıtdes cas comme :

lexiquex, y, z : des entiersf : un entier −→ un entier f(a) : 2 * a*a*a + 4 *a*a + 6*a + 1

algorithmex ←− f( 3*(y + 2*z) − 7*(x+y) )

Le programme principal et la fonction f doivent tout deux faire appel a desregistres comme temporaires de calcul. S’ils utilisent les memes registres, il sepeut que les temporaires du programme principal ne soient pas preserves depart et d’autre de l’appel de f.

Pour remedier a cet inconvenient, il faut sauvegarder les valeurs des re-gistres utilises comme temporaires de calcul, lorsqu’on passe d’un bloc a unautre. Il y a essentiellement deux classes de solutions : 1) la sauvegarde dansl’appelant, de tous les registres qu’il utilise et veut preserver de part et d’autrede l’appel d’un autre bloc ; 2) la sauvegarde dans l’appele, de tous les registresdans lesquels il ecrit. La deuxieme solution a tendance a provoquer moins desauvegardes : on ne sauvegarde que ce qui est effectivement modifie. Cela peutmalgre tout etre inutile : il est en effet possible qu’un appelant ne l’utilise pas.

La sauvegarde est realisee dans la pile, par exemple juste au-dessus desvariables locales. L’exemple detaille au paragraphe 3.4.3 ci-dessous illustre lasauvegarde des registres dans l’appele.

3.2 Appel de sous-programme : l’aller

Nous avons resolu les problemes d’allocation memoire pour les lexiqueslocaux et les parametres. Dans nos algorithmes modifies, il subsiste des appelsreduits au nom de la procedure ou fonction appelee. Chaque bloc est code enlangage d’assemblage d’apres les principes enonces au paragraphe 1. Il restea coder les appels de blocs par des instructions de branchement a des sous-programmes disponibles dans le langage machine considere. Se pose alors leprobleme de l’adresse du bloc a atteindre.

Le cas le plus simple est celui des structures de blocs statiques : lesprocedures et fonctions sont toutes connues, elles ont des noms, et sont tou-jours appelees directement par l’intermediaire de leur nom, dans le programmeen langage de haut niveau.

On code chaque bloc P separement (voir aussi aspects de compilationseparee, chapitre 18, paragraphe 2.), en lui associant une etiquette de debutd’apres le nom du bloc dans le langage de haut niveau, par exemple P. Lesappels de P sont codes par : call P, si call est le nom de l’instruction desaut a un sous-programme (Cf. Chapitre 12, paragraphe 1.4.3).

Les textes obtenus par codage des differents blocs sont simplement juxta-

version en ligne - [PDF Document] (344)

336 Traduction des langages a structure de blocs en langage d’assemblage

poses, dans un ordre quelconque. Il suffit de se rappeler quelle est l’etiquettequi correspond au bloc du programme principal. On l’appelle le point d’entreedu programme.

Un cas plus complique apparaıt lorsque le langage de haut niveau qu’onutilise permet de definir par exemple un tableau de fonctions. Dans ce cas lesfonctions ne sont plus necessairement appelees par leur nom. On noterait parexemple, dans un langage d’actions etendu :

Tf : le tableau sur [1..10] de (un entier −→ un entier)x : un entier sur [1..10] ; y, z : des entiersLire (x) ; Lire (y) ; z ←− Tf[x] (y)

Le programme en langage d’assemblage correspondant doit manipuler ex-plicitement les adresses des fonctions, c’est-a-dire les adresses associees auxetiquettes de debut des sequences d’instructions des fonctions. L’adresse alaquelle on doit brancher pour appeler la fonction Tf[x] doit etre calculee dy-namiquement, et le langage machine doit offrir un appel de sous-programmepar adressage indirect. Dans la suite nous ne nous interessons plus a ce cas.

3.3 Appel de sous-programme : le retour

Dans les programmes transformes du langage d’action obtenus au para-graphe precedent, nous ecrivons tout simplement dans un bloc P : CalculFibopour signifier qu’il faut executer le corps de cette procedure ; nous sous-entendons que, lorsque cette procedure appelee sera terminee, le cours del’execution reprendra dans P, juste apres l’appel.

Le basculement de contexte a l’aller est simple, comme nous venons de levoir. Le basculement de contexte au retour, en revanche, doit etre etudie depres.

Tout d’abord, il faut terminer le corps de la procedure appelee CalculFibopar un branchement explicite au point ou l’on desire retourner. Et commece point depend de la position de l’appel de CalculFibo dans le programme,c’est une adresse variable selon les appels. Le branchement de retour est doncnecessairement indirect, puisque le code d’une procedure est independant desendroits ou elle est appelee.

En quelque sorte, l’adresse ou il faudra retourner en fin de procedure estun parametre donnee supplementaire de toute procedure. Le raisonnement surles parametres de fonctions et procedures recursives que nous avons tenu auparagraphe 2. est encore valable.

L’adresse de retour doit donc etre stockee quelque part (par exemple rangeedans la pile avec les autres parametres donnees) par le bloc appelant, avantl’instruction de saut au sous-programme appele. En effet, cette adresse estune valeur du compteur programme, et le saut a un sous-programme consistejustement a forcer une nouvelle valeur du compteur programme.

Fort heureusem*nt les langages machines offrent toujours une instruction

version en ligne - [PDF Document] (345)

3. Traduction en langage d’assemblage : solutions globales 337

de branchement a un sous-programme avec sauvegarde integree de l’adressedepart. Pour le retour, soit on trouve une instruction coherente avec la sau-vegarde lors de l’appel (cas du 68000), soit il faut utiliser une instruction debranchement en respectant les conventions de l’instruction d’appel (cas dusparc).

Rappelons enfin que le programme principal doit se comporter comme lesautres blocs ; on suppose que l’on y est arrive par un mecanisme d’appel desous-programme, et il se termine donc par un retour au contexte appelant.

Remarque : Si l’on oublie l’instruction de retour a la fin d’un sous-programme, le processeur poursuit l’execution en sequence c’est-a-dire engeneral dans le code d’un autre sous-programme.

3.4 Solutions a base de pile, type 68000

3.4.1 Gestion de la zone de pile en assembleur

Les modes d’adressage indirects par registre avec pre-decrementation oupost-incrementation sont particulierement bien adaptes a la gestion en piled’une portion de la memoire. Il suffit de reserver un registre pour servir depointeur de pile.

Le choix de ce registre n’est pas toujours entierement libre. Par exemple,le jeu d’instructions du 68000 fournit l’instruction jsr de saut a un sous-programme, avec une sauvegarde automatique de l’adresse qui suit l’instructionjsr de la forme

RegA[7] ←− RegA[7] − 4 ; MEM[RegA[7]] ←− PC

On y reconnaıt un mecanisme de gestion de pile avec RegA[7] (le registred’adresse numero 7) comme pointeur de pile, place sur la derniere case occupee ;la pile croıt en diminuant les adresses.

Il suffit donc de gerer le passage des parametres et l’allocation de memoirepour les lexiques locaux en adoptant cette convention imposee par le jeu d’ins-tructions lui-meme (et qu’on ne peut donc pas remettre en cause, puisquel’algorithme d’interpretation du langage machine est cable).

Le retour de sous-programme adopte la meme convention. L’instructionrts est un branchement inconditionnel, doublement indirect par registre avecpostincrementation. L’effet est :

PC ←− MEM[RegA[7]] ; RegA[7] ←− RegA[7] + 4

Autrement dit rts trouve son adresse en sommet de pile, et la depile.

3.4.2 Instructions link et unlink

Reprenons la sequence d’instructions necessaires a l’installation de l’envi-ronnement local de la procedure CalculFibo (Cf. Figure 13.13) :

version en ligne - [PDF Document] (346)

338 Traduction des langages a structure de blocs en langage d’assemblage

pp ←− pp - 4 ; MEM[pp] ←− pb ; pb ←− pp ; pp ←− pp − 8

Et la sequence d’instructions symetrique, a la fin de CalculFibo :

pp ←− pb ; pb ←− MEM[pp] ; pp ←− pp+4

En langage d’assemblage 68000, on ecrit, en supposant que le pointeur pp estrange dans A7 et le pointeur pb dans A6 :link A6, -8 ! sequence de debut

....

unlink A6 ! sequence de fin

L’effet de ces instructions est exactement celui decrit plus haut. Noter quele choix de A6 comme pointeur de base d’environnement est libre, puisque c’estun parametre explicite des instructions link et unlink ; c’est une conventiondes compilateurs. A7 en revanche est le pointeur de pile oblige.

3.4.3 Codage avec lien dynamique, variables locales dans la pile,temporaires dans des registres

Soit les actions A, B et C definies Figure 13.14. A est l’action principale, elleappelle B qui appelle C. Nous donnons figure 13.15 le codage de la procedure Adans un langage d’assemblage pour 68000. Rappelons que l’adresse de retourde sous-programme est sauve dans la pile d’execution par l’instruction jsr etque la sauvegarde du lien dynamique et la mise en place de l’environnementlocal du sous-programme sont assurees par l’instruction link. Par rapport auschema de pile donne figure 13.12-b, la zone des donnees de liaison comportenon seulement la sauvegarde de pb mais aussi l’adresse de retour (en-dessous),ce qui donne la taille de deux adresses (8 octets) a cette zone.

3.5 Solutions a base de fenetres de registres, type sparc

Nous etudions ici les schemas de codage de sous-programmes suggerespar certaines architectures de processeurs, dites a fenetres de registres. Pourpreciser les choses, nous traitons l’exemple du sparc. Comme nous l’avonssignale au chapitre 12, paragraphe 1.7.1, le processeur sparc est equipe d’unbanc de registres, qui sont a acces plus rapide que la grande memoire. Cesnombreux registres sont utilises pour optimiser les mecanismes de passages deparametres et d’appels de sous-programmes. Les techniques etudiees plus haut,et mises en oeuvre directement dans le cas des langages machine type 68000,sont encore applicables. L’idee consiste a utiliser le banc de registres commeun cache sur la pile. Nous detaillons ci-dessous les mecanismes permettant decomprendre cette affirmation.

version en ligne - [PDF Document] (347)

3. Traduction en langage d’assemblage : solutions globales 339

A : l’action { sans parametre, donc. }lexique : x, y : des entiersalgorithme : x ←− 1 ; B (3*x + 1, y) ; x ←− y

B : l’action (la donnee a : un entier, le resultat b : un entier)lexique : z : un entieralgorithme : C (z) ; b ←− z + a

C : l’action (le resultat u : un entier)lexique : i : un entieralgorithme :

i ←− 1 ; u ←− 1tant que i ≤ 10

u ←− u + i ; i ←− i + 1

Fig. 13.14 – Procedures A, B, C

! Tous les idfs designent des entiers de 4 octetsTailleEnvB = 4! Acces a la variable locale, relatif a l’adresse de base :deltaZ = 4! Acces aux parametres, relatifs a l’adresse de base :deltaA = 12deltaB = 8

.textB :link A6, -TailleEnvB

! l’action A a prepare les parametres : donnee a <--> valeur 3*x+1! et resultat b <--> adresse de y avant l’appel a Bmove.l A0, -(SP) ! sauvegarde de 2 registresmove.l D0, -(SP)! appel de C :move.l A6, A0 ! calcul du param, adr de z dans A0sub.l deltaZ, A0move.l A0, -(SP) ! empiler A0jsr Cadd.l ]4, SP ! liberer parametre! fin de l’appel de C! b <-- z + amove.l (A6+deltaA), D0 ! D0 <-- aadd.l (A6-deltaZ), D0 ! D0 <-- D0 + zmove.l (A6+deltaB), A0 ! A0 <-- adresse bmove.l D0, (A0) ! b <-- D0move.l (SP)+, D0 ! restauration de 2 registresmove.l (SP)+, A0unlk A6rts

Fig. 13.15 – Codage de l’action B en langage d’assemblage 68000

version en ligne - [PDF Document] (348)

340 Traduction des langages a structure de blocs en langage d’assemblage

3.5.1 Le mecanisme de fenetres de registres du sparc

Le SPARC dispose d’un ensemble de registres gere en fenetres : 8 registresdits globaux sont accessibles en permamence. Les autres registres sont acces-sibles par groupes de 24 registres dits inputs, locals et outputs. Le groupe, oufenetre, courant, est repere par le registre CWP (pour Current Window Pointer).

Deux instructions specifiques permettent de deplacer la fenetre de registresen incrementant ou decrementant le registre CWP : save et restore. Le decalageest de 16 registres. Deux fenetres consecutives coıncident donc sur 8 registres :les registres ouputs de la fenetre courante avant l’execution du save cor-respondent aux inputs de la fenetre courante apres l’execution du save. Lerestore a l’effet inverse. Le mecanisme des fenetres de registres est illustrepar la figure 13.16.

3.5.2 Schema de codage ideal

Le mecanisme des fenetres permet d’implementer de maniere efficace lanotion de contexte des langages proceduraux. Schematiquement, lorsqu’uneprocedure en appelle une autre, la procedure appelee effectue un save, ce quilui permet de travailler avec un nouveau contexte. La communication entreprocedure appelante et procedure appelee (pour le passage des parametres et lagestion de l’adresse de retour) est assuree par les 8 registres communs aux deuxfenetres, qui constituent la zone d’echange. En fin d’execution, la procedureappelee effectue un restore, qui retablit le contexte precedent, puis un sauta l’adresse de retour.

Notons que lors de l’appel de sous-programme l’adresse de l’instructioncall est sauvegardee dans le registre %o7, d’ou l’adresse %o7+8 pour le retour(nous faisons suivre les instructions de saut par une instruction nop de facona ne pas se preoccuper du pipeline).

Le cas ideal le plus simple qu’on puisse envisager est le cas ou les proceduresn’utilisent jamais plus de 7 parametres d’entree, ni plus de 8 variables locales,et ou le nombre d’appels imbriques ne depasse pas le nombre de fenetres phy-siquement disponibles. Dans ce cas le mecanisme des fenetres de registres estsuffisant. Il suffit de considerer l’effet de l’instruction CALL pour respecter laconvention sur la memorisation de l’adresse de retour : dans le registre o7 del’appelante, qui correspond au registre i7 de l’appelee.

Le schema de codage ideal est donne figure 13.17.

Remarque : La sequence restore ; jmpl %o7+8, %g0 ; nop est souventtransformee en jmpl %i7+8, %g0 ; restore. En effet, l’adresse de retour estsituee dans le registre %o7 de l’appelante, qui s’appelle %i7 dans l’appelee. Elles’appelle donc %i7 avant le restore, et %o7 apres le restore. En profitant dudelai de branchement, on peut realiser le branchement avant la restaurationdu contexte.

version en ligne - [PDF Document] (349)

3. Traduction en langage d’assemblage : solutions globales 341

7 registres globaux

banc de registres oli

oli

32 bits

SAVERESTORE

Fig. 13.16 – Mecanisme des fenetres de registres

appelee:save! utilisation des parametres d’entree %i0...%i6! et des variables locales %l0..%l7restorejmpl %o7+8, %g0nop

appelante:! place les parametres dans %o0..%o6call appelee ! sauvegarde de l’adresse de retour dans %o7nop...

Fig. 13.17 – Schema de codage ideal utilisant le mecanisme de fenetres de registres

version en ligne - [PDF Document] (350)

342 Traduction des langages a structure de blocs en langage d’assemblage

3.5.3 Probleme : le banc de registres est fini

En cas de programme consequent ou de procedure recursive, l’hypothese surle petit nombre d’appels imbriques devient fausse. Pour que le programmeurpuisse considerer le banc de registres comme virtuellement infini, il faut prevoird’utiliser la memoire en plus du banc de registres.

Une solution simple consiste a imaginer que, lorsque le banc de registres estplein, les procedures et fonctions se mettent a utiliser directement la memoiregeree en pile, selon le schema etudie pour 68000. Comme le codage pour bancde registres differe du codage pour pile — ne serait-ce que dans l’acces auxvariables locales et parametres — chaque bloc devrait alors posseder deuxcodages differents, selon qu’il est appele quand le banc de registres est pleinou non. C’est hors de question.

Il faut donc se debrouiller pour obtenir cette commutation du banc deregistres vers la pile de maniere transparente pour les programmes des diversblocs, qui doivent toujours avoir l’impression que le banc de registres est infini.

La mise en oeuvre complete de cette solution transparente, plus la prise encompte du fait que certains programmes ont plus de 8 variables locales ou plusde 8 parametres, est delicate. Elle n’est pas realisable de maniere satisfaisantesans utiliser le mecanisme d’interruption logicielle qui sera presente dans lapartie VI.

Nous donnons ci-dessous quelques indices pour comprendre les schemas decodage de langages a structure de blocs en langage d’assemblage sparc, telsqu’on peut les observer en lisant le code produit par un compilateur C parexemple.

3.5.4 Cas realiste

Pour que le programmeur (ou le concepteur de compilateur) puisseconsiderer le banc de registres comme virtuellement infini, il faut prevoir unmecanisme de sauvegarde des fenetres de registres, lorsqu’on effectue plus desave qu’il n’est physiquement possible d’en gerer.

Cette sauvegarde est assuree automatiquement, pendant l’interpretationde l’instruction save par le processeur, comme traitant d’une interruptioninterne declenchee par le depassem*nt de capacite du banc de registres. Cetraitant d’interruption realise une copie des registres %i0..%i7 et %l0..%l7

d’une fenetre dans la pile. Il adopte des conventions sur la zone de pile utilisee,qui doivent etre connues du programmeur.

L’idee est d’utiliser un registre comme pointeur de pile. C’est %o6. Enlangage d’assemblage %sp est d’ailleurs un synonyme de %o6 (sp pour StackPointer). Toute fenetre correspondant au contexte d’une procedure en coursd’execution doit etre telle que son registre %o6 pointe sur une zone de 64 octetslibres de la pile. Cet invariant est suppose verifie au moment ou la procedureprincipale de notre programme est appelee (il a ete installe par l’appelant decette procedure, l’interprete de commandes par exemple, Cf. Chapitre 20).

version en ligne - [PDF Document] (351)

4. Exercices 343

Pour que la propriete soit toujours vraie il suffit, lors de tout changement decontexte qui installe une nouvelle fenetre, d’initialiser le registre %o6 de lanouvelle fenetre.

Or l’instruction save du sparc se comporte comme une addition, quiinterprete la designation de ses operandes dans la fenetre de depart, et ladesignation du resultat dans la fenetre d’arrivee. Une instruction save %o6,

-64, %o6 permet donc d’initialiser le registre %o6 de la nouvelle fenetre d’apresla valeur du registre %o6 de l’ancienne : l’instruction decale le pointeur vers lesadresses inferieures, reservant ainsi un espace de la pile de taille 4 ∗ 16 = 64pour 16 registres de 4 octets. L’ancien pointeur de pile, qui s’appelait %o6

dans le contexte de l’appelant, est toujours accessible. Il s’appelle %i6 dansle contexte de l’appele. %fp, pour Frame Pointer, est un synonyme de %i6 enassembleur. Le programme de la figure 13.19 illustre ce mecanisme.

3.5.5 Variables locales dans la pile et parametres en exces

Dans le cas ou le nombre de registres ne suffit pas pour stocker les variableslocales et passer les parametres, il est possible d’utiliser la pile. On peut lorsdu save demander plus de place dans la pile que les 64 octets necessaires a lasauvegarde des registres %i0..%i7 et %l0..%l7 par le traitant d’interruptiongerant la demande d’une fenetre alors qu’il n’en existe plus de libre.

La figure 13.20 illustre l’organisation de la pile et des fenetres de registresdans ce cas. La seule contrainte qu’il faut respecter est de conserver la placeen haut de zone allouee pour la sauvegarde eventuelle de la fenetre courante.

Les variables locales sont alors rangees en bas de pile et on y accede viaune adresse de la forme %fp − d, le deplacement d pouvant etre calcule sta-tiquement de la meme facon que pour la solution a base de pile seulement.

Les parametres sont rangees par l’appelant dans le haut de sa zone locale,juste sous la zone de sauvegarde pour le traitant d’interruption. Dans l’appeleon accede alors aux parametres effectifs via une adresse de la forme %sp + d’

avec d’ ≥ 64, d’ etant lui aussi calculable statiquement.

4. Exercices

E13.1 : Observation de l’execution d’une action recursiveConsiderons l’algorithme de calcul de la suite de Fibonacci (Cf. Figure 13.3)et plus particuilierement la traduction decrite dans le paragraphe 2.5 et lafigure 13.10. Dessiner les differents etats du tableau MEM et plus precisem*ntla partie pile au cours de l’execution de l’action calculFibo avec la valeur 4 pourla variable A.

E13.2 : Codage des fonctionsReprendre la demarche decrite dans ce chapitre pour les fonctions. Les pa-rametres d’une fonction sont des donnees, pour lesquelles on peut proceder

version en ligne - [PDF Document] (352)

344 Traduction des langages a structure de blocs en langage d’assemblage

i

l

o i

l

o

PILE

6

save %o6, -64,%o6

64

Zone de sauvegarde

de la fenetre 2

restore

fenetre1.SP = fenetre2.FP

fenetre2.SP

7

67

fenetre 2

fenetre 1

Fig. 13.18 – Utilisation des fenetres de registres avec reservation de place dans la pilepour la sauvegarde des fenetres. Noter que dans l’ecriture de l’instructionsave %o6, -64, %o6, le premier %o6 designe celui de l’ancienne fenetreet le second celui de la nouvelle fenetre.

appelee:save %o6, -64, %o6 ! ou save %sp, -64, %sp! reserve une zone de 64=16*4 octets dans la pile, pour! la sauvegarde des registres i et l de ce nouveau contexte.! ... utilisation des parametres d’entree %i0...%i6! et des variables locales %l0..%l7 ...! retour et restauration de la fenetrejmpl %i7+8, %g0restore

appelante:...call appelee ! sauvegarde de l’adresse de retour dans %o7nop

Fig. 13.19 – Programme necessitant la sauvegarde des registres

version en ligne - [PDF Document] (353)

4. Exercices 345

i, l

sauvegarde

registres

i, l

registres

sauvegardeCon

text

ede

l’ap

pel

ant

Con

text

e

de

l’ap

pel

e

i

l

o i

l

o

PILE

67

taille > 64

appele

> 6

parametres

appelant

save %o6, -taille,%o6

67

appele.sp

appelant.sp =

appele.fp var. locales

var. localesappelant.fp

Fig. 13.20 – Variables locales et parametres en exces dans la pile

version en ligne - [PDF Document] (354)

346 Traduction des langages a structure de blocs en langage d’assemblage

comme dans le cas des actions : on passe leur valeur. Le resultat d’une fonc-tion est calcule par l’appele sans que l’appelant lui ait fourni l’adresse d’unede ses variables. Il faut donc choisir un mecanisme qui permet a la fonctionappelee d’ecrire le resultat qu’elle calcule dans un emplacement memoire connudu contexte appelant, qui pourra le lire. On peut examiner deux solutions : leresultat est stocke dans un registre ou dans la pile. Noter que selon le type duresultat de la fonction (par exemple s’il s’agit d’un produit de types ou d’untableau) la solution de la pile est plus facile a mettre en oeuvre.

E13.3 : Nombre de ’1’ dans la representation binaire d’un entierTraduire dans le langage d’assemblage de votre choix l’algorithme presenteau chapitre 12, paragraphe 1.4.1, qui permet de compter les bits a 1 dans larepresentation binaire d’un entier.

E13.4 : Traduction de boucles imbriqueesTraduire en langage d’assemblage l’algorithme suivant :

lexiquei, j, x : des entiers ; N : l’entier ... { donne }

algorithmex ←− 0i parcourant 0 .. N

j parcourant 0 .. Nx ←− x + i * j

Commencer par exprimer chaque boucle a l’aide de la construction tant quecomme suggere au paragraphe 1.5 du chapitre 4.

E13.5 : Algorithme de BresenhamTraduire dans le langage d’assemblage de votre choix l’algorithme presente auchapitre 5, paragraphe 2.3 qui permet de calculer les coordonnees des pointsd’une droite dans un plan.

E13.6 : Suite de SyracuseL’algorithme ci-dessous calcule les termes successifs de la suite de Syracuse.Traduire cet algorithme dans le langage d’assemblage de votre choix.

lexique :X : l’entier constant ...

algorithme :tant que X 6= 1

si X reste 2 = 1 { X est impair }X ←− 3 × X + 1

sinon { X est pair }X ←− X quotient 2

version en ligne - [PDF Document] (355)

4. Exercices 347

E13.7 : Suite de FibonacciTraduire completement les algorithmes de l’exemple suite de Fibonacci (algo-rithme decrit dans la figure 13.3) dans l’assembleur de votre choix. Envisagerdes solutions avec ou sans gestion du lien dynamique, avec ou sans utilisationde fenetres de registres.

E13.8 : Parcours d’un tableau d’entiersSoit l’algorithme :

lexiqueN : l’entier ... { donne }T : un tableau sur [0..N−1] d’entiersS, i : des entiers

algorithme{ calcul de la somme des elements du tableau }

S ←− T[0]i parcourant (1..N−1) : S ←− S + T[i]

Ecrire cet algorithme en langage d’assemblage. Envisager plusieurs solutionsen utilisant diverses representations pour les entiers (2, 4 ou 8 octets) et diversmodes d’adressage pour les acces aux elements du tableau.

E13.9 : Parcours d’un tableau de structuresSoit l’algorithme :

lexiqueN : l’entier ... { donne }ST : le type ¡c : un caractere ; m : un entierT : un tableau sur [0..N−1] de STM, i : des entiers

algorithme{ calcul du maximum des elements du tableau }

M ←− T[0].mi parcourant (1..N−1) :

Si M < T[i] alors M ←− T[i].m

Proposer une representation en memoire du type ST et ecrire en langage d’as-semblage l’algorithme ci-dessus.

E13.10 : Parcours de matrice carree et comparaison double longueuren complement a deuxReprendre le probleme E4.8 du chapitre 4, et proposer un programme en as-sembleur sparc (description de la zone de donnees, suite d’instructions).

E13.11 : Observation de codeObserver le code produit par differents compilateurs pour differents pro-grammes ; en general une option (-S pour le compilateur gcc sous unix) permetd’obtenir une version en langage d’assemblage du code. Retrouver l’implanta-tion des variables globales, locales et des parametres.

version en ligne - [PDF Document] (356)

348 Traduction des langages a structure de blocs en langage d’assemblage

version en ligne - [PDF Document] (357)

Quatrieme partie

A la charniere du logiciel et dumateriel...

version en ligne - [PDF Document] (358)

version en ligne - [PDF Document] (359)

Chapitre 14

Le processeur : l’interpretecable du langage machine

Ce chapitre decrit la mise en oeuvre par un circuit de l’algorithme d’in-terpretation des instructions d’un processeur. Nous parlons aussi d’interpretedu langage machine. Cet interprete est cable : ce n’est pas un programme maisun circuit.

Etant donne le jeu d’instructions defini pour un processeur, la descriptionde cet algorithme permet de comprendre comment est executee une instruc-tion, donc un programme en langage machine. C’est ce point de vue simple etpurement pedagogique que nous adoptons ici, la description des methodes deconception d’un processeur depassant le cadre de ce livre. Nous ne parleronspas non plus de processeur a flot de donnees ou pipeline ; pour une descriptionapprofondie le lecteur peut consulter [HP94].

Un processeur peut etre considere comme une machine algorithmique(Cf. Chapitre 11) formee d’une partie operative (une UAL, des bus, deselements de memorisation, etc.) et d’une partie controle. Le processeur est reliea une memoire dans laquelle est stocke un programme en langage machine. Laquestion de la liaison entre une machine algorithmique et une memoire a eteetudiee au chapitre 11.

Le processeur doit recuperer les instructions en langage machine dans lamemoire, dans l’ordre du programme, et les executer une par une. L’algo-rithme d’interpretation du langage machine consiste ainsi en une boucle in-finie (mais nous verrons dans la partie VI, Chapitre 22, qu’il est possibled’interrompre cette boucle infinie) : lire l’instruction courante, la decoder,realiser le travail correspondant et determiner l’adresse de l’instruction sui-vante (Cf. Paragraphe 1.6 du chapitre 12). Si l’instruction a executer est parexemple add d0, d1, d2 le processeur doit faire en sorte que les contenus desregistres d0 et d1 soient presents aux deux entrees de l’UAL, activer l’additionet envoyer le resultat dans le registre d2.

La comprehension de ce chapitre suppose connus les chapitres 8, 9, 10, 11et 12. Apres avoir explique les principes de l’interpretation des instruc-

version en ligne - [PDF Document] (360)

352 Le processeur : l’interprete cable du langage machine

UAL

PC

bus donnees

bus adresses

SelMem

l/e

Partie controle

Partie operative

MemoireProcesseur

RI

programme

donnees

Fig. 14.1 – Organisation globale de l’ensemble processeur/memoire. UAL designe l’unitearithmetique et logique, PC le compteur de programme et RI le registreinstruction.

tions du langage machine (paragraphe 1.), nous presentons un exempleextremement simple dont le jeu d’instruction est decrit dans le para-graphe 2. Nous donnons dans le paragraphe 3. une realisation du pro-cesseur puis nous montrons comment l’ameliorer (paragraphe 4.). Enfin,nous etudions les consequences de quelques extensions du processeur (pa-ragraphe 5.).

1. Les principes de realisation

La figure 14.1 decrit la structure de l’ensemble processeur/memoire. Le pro-cesseur est compose d’une partie controle et d’une partie operative ; la premiereenvoie des commandes a la seconde qui, elle, emet des comptes-rendus. Lamemoire n’est ici reliee qu’a un processeur.

Les aspects precis de communication entre le processeur et la memoire sontdetailles dans le chapitre 15. Les aspects de liaison avec le monde exterieurpour realiser par exemple des entrees/sorties sont etudies dans le chapitre 16.

1.1 Relations du processeur avec la memoire

Le processeur est relie a la memoire par un bus adresses unidirectionnel etun bus donnees bidirectionnel.

Nous supposons ici que la lecture ou l’ecriture s’effectue en un tempsinferieur au temps de cycle d’horloge du processeur. L’acces a la memoire estalors pilote par deux commandes : selection de la memoire SelMem et lectureou ecriture l/e. Ainsi, pour ecrire la valeur vvv dans la memoire a l’adressexxx le processeur doit mettre SelMem a 1 et l/e a 0 en forcant la valeur vvvsur le bus donnees et la valeur xxx sur le bus adresses ; l’ecriture est effective

version en ligne - [PDF Document] (361)

1. Les principes de realisation 353

au prochain front d’horloge du processeur. Pour lire la valeur contenue dansla memoire a l’adresse xxx le processeur doit positionner les commandes Sel-Mem et l/e en forcant la valeur xxx sur le bus adresses ; le contenu du motmemoire est disponible sur le bus donnees a partir du prochain front d’horlogedu processeur.

Le deroulement d’un acces memoire dans le cas ou la memoire est plus lentea ete decrit au paragraphe 2.2 du chapitre 9 et les aspects de synchronisationont ete detailles au paragraphe 3.1 du chapitre 11.

La memoire contient deux types d’informations : des instructions et desdonnees. Une instruction machine comporte elle-meme deux types d’informa-tions : le code de l’instruction et la designation de(s) operande(s) de l’instruc-tion. Selon les instructions et le format de leur codage ces informations peuventetre lues en un seul acces a la memoire ou non. Lorsque plusieurs acces sontnecessaires, ils se deroulent necessairement lors de cycles d’horloge differents etconsecutifs, le code de l’instruction etant lu en premier. Un registre specialiseappele compteur programme (PC) repere le mot memoire en cours de traite-ment. Il doit etre mis a jour apres chaque acces a une instruction en vue del’acces suivant.

On peut envisager un autre type d’organisation dans laquelle la memoireest organisee en deux parties distinctes : une memoire pour les instructionset une memoire pour les donnees. Ce type d’organisation necessite deux busadresses et deux bus donnees differents. Les principes generaux restent tresproches ; nous n’en parlerons plus dans la suite.

1.2 Principes generaux de la partie operative

La partie operative d’un processeur doit etre capable d’effectuer toutes lesoperations et tous les transferts d’information necessaires a l’execution desinstructions du langage machine.

Elle peut donc etre tres proche d’une partie operative type, decrite auchapitre 11. Une particularite a signaler est l’existence d’un registre particulier(appele registre instruction et note RI), non manipulable par les instructionsdu langage machine et qui contient a chaque instant l’instruction en coursd’interpretation. Le contenu de ce registre sert de compte-rendu pour la partiecontrole.

L’UAL a deux types de sorties : une donnee qui est le resultat d’un calculet les codes de conditions arithmetiques Zu, Nu, Cu, Vu. La donnee circulesur un bus et sera chargee dans un registre ou un mot memoire ; les codesde conditions sont des informations de controle qui peuvent etre testees parla partie controle : ce sont des entrees de la partie controle. Ces codes deconditions peuvent aussi etre charges dans 4 bits d’un registre d’etat.

Notons qu’une adresse peut etre une entree de l’UAL lorsqu’un calcul estnecessaire sur une adresse ; par exemple, pour traiter un mode d’adressage in-direct avec deplacement, il faut ajouter la valeur de l’adresse et le deplacement.

version en ligne - [PDF Document] (362)

354 Le processeur : l’interprete cable du langage machine

Les registres sont des elements de memorisation internes au processeur.Certains sont connus du programmeur et manipulables explicitement : unmnemonique leur est associe dans le langage d’assemblage. Ces registrespeuvent contenir des donnees et/ou des adresses. Ils peuvent etre classes endifferentes categories. Par exemple dans la famille des processeurs 68xxx, lesregistres sont types en registres de donnees et registres d’adresses. Dans lesparc, on trouve des registres globaux et des registres locaux, d’entree et desortie, les trois derniers etant organises en fenetres de registres.

D’autres registres, comme le compteur programme (PC), le pointeur depile (SP), le mot d’etat (SR) contenant les indicateurs Z, N, C, V, peuventetre manipules au travers d’instructions specialisees. Par exemple, les instruc-tions de rupture de sequence ont un effet sur la valeur du registre PC. Lesindicateurs Z, N, C, V du mot d’etat contiennent les valeurs Zu, Nu, Cu, Vucalculees par l’UAL lors de la derniere instruction qui a mis a jour explicite-ment ces indicateurs. Dans certains processeurs, comme le sparc par exemple,le jeu d’instructions comporte les instructions arithmetiques sous deux formes :Addcc et Add, addition avec ou sans mise a jour des indicateurs.

Toute action sur un registre provoque un changement d’etat de la partieoperative. La partie operative peut executer un certain nombre d’actions quenous appellerons microactions (Cf. Paragraphe 3.1). Une microaction est unensemble de modifications simultanees de l’etat de la partie operative.

Rappelons que la partie operative peut etre vue comme un automate dontl’etat est l’ensemble des valeurs contenues dans les registres. L’exercice E14.4montre ce point de vue.

1.3 Principes generaux de la partie controle

La partie controle doit envoyer les commandes adequates a la partieoperative, le processeur realisant ainsi l’interpretation du langage machine.Le schema general est le suivant : charger le registre d’instructions (RI) avecl’instruction courante (dont l’adresse est dans PC), decoder et executer cetteinstruction, puis preparer le compteur programme (PC) pour l’instruction sui-vante.

La partie controle d’un processeur est ainsi la realisation materielle d’unalgorithme iteratif qui peut etre decrit par une machine sequentielle avec ac-tions. Les sorties sont un ensemble d’ordres envoyes a la partie operativeou a l’exterieur et les entrees sont des informations emanant de la partieoperative : valeur d’un code operation, valeur d’un code condition et indi-cateurs arithmetiques.

La machine sequentielle qui decrit l’algorithme de la partie controle estaussi appelee automate (ou graphe) de controle ou sequenceur.

Dans la suite nous developpons un exemple simple pour lequel nousdecrivons la partie controle tout d’abord de facon fonctionnelle par un algo-rithme iteratif en considerant les ressources (registres) du processeur comme

version en ligne - [PDF Document] (363)

2. Exemple : une machine a 5 instructions 355

des variables et la memoire comme un tableau. Nous donnons ensuite une des-cription sous forme de machine sequentielle avec actions aux etats de laquelleon associe des microactions : ce sont les operations effectivement realisablespar la partie operative. L’objectif est de montrer comment on peut concevoirla partie operative et la partie controle d’un processeur, etant donne le jeud’instructions retenu.

2. Exemple : une machine a 5 instructions

Le processeur comporte un seul registre de donnees, directement visible parle programmeur, appele ACC (pour accumulateur).

Les instructions sont decrites ci-dessous. On donne pour chacune unesyntaxe de langage d’assemblage et l’effet de l’instruction.

clr mise a zero du registre ACC

ld #vi chargement de la valeur immediate vi dans ACCst [ad] chargement du mot memoire d’adresse ad avec le

contenu de ACC

jmp ad saut a l’adresse ad

add [ad] chargement de ACC avec la somme du contenu de ACC etdu mot memoire d’adresse ad.

Ce jeu d’instruction est extremement reduit, l’objectif etant de disposer desuffisamment d’elements pour detailler la conception du processeur mais de selimiter de facon a garder une taille raisonnable a cette description. Remarquonsque l’on pourrait rendre le jeu d’instructions plus symetrique en ajoutant uneinstruction de chargement absolu : ld [ad].

La taille necessaire au codage d’une adresse ou d’une donnee est 1 mot.Les instructions sont codees sur 1 ou 2 mots : le premier mot represente lecodage de l’operation (clr, ld, st, jmp, add) ; le deuxieme mot, s’il existe,contient une adresse ou bien une constante. Le codage des instructions estdonne figure 14.2-a. Voici un exemple de programme ecrit dans ce langaged’assemblage :

ld #3st [8]

etiq: add [8]jmp etiq

En supposant le programme charge a partir de l’adresse 0, les adresses etantdes adresses de mots, l’adresse associee au symbole etiq est 4. En supposantque la taille d’un mot est de 4 bits, la figure 14.2-b donne la representation enmemoire du programme precedent apres assemblage et chargement en memoirea partir de l’adresse 0 (Cf. Chapitre 18 pour plus de details).

Remarque : En fixant la taille d’un mot nous avons fige la taille maxi-

version en ligne - [PDF Document] (364)

356 Le processeur : l’interprete cable du langage machine

clr 1

ld #vi 2 vi

st [ad] 3 ad

jmp ad 4 ad

add [ad] 5 ad

(a)

0100

0000 0010

0011

0011

1000

0101

1000

0100

01000111

memoire

code de l’operation jmp

adresse 4

code de l’operation ld

valeur immediate 3

code de l’operation st

adresse 8

code de l’operation add

adresse 8

(b)

Fig. 14.2 – (a) Codage des instructions ; (b) representation en memoire d’un programmeen langage machine

male de la memoire puisqu’une adresse est codee sur un mot. La memoire duprocesseur a ainsi une taille maximale de 16 mots.

Dans cet exemple, l’execution du programme commence par l’interpretationde la premiere instruction, dont le code est en memoire a l’adresse 0. Ce codeetant celui de l’instruction ld, l’interprete lit une information supplementairedans le mot d’adresse 1. Cette valeur est alors chargee dans le registre ACC.Finalement, le compteur programme (PC) est modifie de facon a traiter l’ins-truction suivante.

Nous adoptons un point de vue fonctionnel, en considerant les ressources duprocesseur comme les variables d’un programme. L’algorithme d’interpretationdes instructions est donne figure 14.3.

Nous montrons dans la suite comment realiser cet algorithme par un circuit.Nous allons ainsi definir la partie operative puis la partie controle qui la pilote.

3. Une realisation du processeur

Pour chaque instruction du langage machine, nous commencons par nousposer les questions : de quel materiel avons-nous besoin ?, comment organiserle flot des donnees pour cette instruction ? Nous retrouvons la des questionstres proches de celles resolues dans le chapitre 11. Les reponses a ces ques-tions permettent de definir la partie operative. Puis nous etudions la faconde realiser les differentes etapes constituant l’execution d’une instruction dulangage machine ; nous definissons ainsi la partie controle.

version en ligne - [PDF Document] (365)

3. Une realisation du processeur 357

lexique :entier4 : le type entiers representes sur 4 bits{ les operations arithmetiques sont donc modulo 16 }

PC, Acc : des entier4tailleMem : l’entier 16Mem : un tableau sur [0..tailleMem-1] d’entier4

algorithme d’interpretation des instructions :PC ←− 0tant que vrai

selon Mem[PC]clr : Acc ←− 0 ; PC ←− PC + 1ld : Acc ←− Mem[PC + 1] ; PC ←− PC + 2st : Mem[Mem[PC + 1]] ←− Acc ; PC ←− PC + 2jmp : PC ←− Mem[PC + 1]add : Acc ←− Acc + Mem[Mem[PC + 1 ]] ; PC ←− PC + 2

Fig. 14.3 – Algorithme d’interpretation du langage machine

L’amelioration d’une realisation materielle s’exprime en termes de placeoccupee par le circuit et de temps de calcul. Nous donnons a la fin de ce para-graphe quelques elements permettant d’ameliorer le schema obtenu selon cescriteres et nous envisageons les consequences d’une extension du jeu d’instruc-tions.

3.1 Definition de la partie operative

A partir du jeu d’instructions, on definit le flux des donnees necessaire,les operations que doit realiser l’UAL, celles affectant le contenu des registreset les operations concernant la memoire. Cette etude permet petit a petit deconstruire la partie operative et de preciser les operations elementaires qu’ellepeut realiser : les microactions.

Nous notons : A ; B le fait que le contenu de A doit pouvoir etretransfere en B sans distinguer les cas ou A ou B sont des bus ou des registres ;A ⇐= B op C une microaction qui permet de stocker dans A le resultat del’operation op realisee sur les operandes B et C.

On arrive ainsi a la partie operative decrite par la figure 14.4, la table 14.5resumant l’ensemble des microactions ainsi que les transferts mis en jeu et lescommandes associees pour la partie operative.

Nous avons indique que le processeur est relie a la memoire par le busadresses (BusAd) et le bus donnees (BusDon). On dispose des transferts : Bus-Don ; Mem[BusAd] (ecriture memoire) et Mem[BusAd] ; BusDon (lecturememoire).

Tout d’abord, il faut assurer le transfert de l’instruction courante (repereepar PC) de la memoire vers le registre instruction (RI) de la partie operative.

version en ligne - [PDF Document] (366)

358 Le processeur : l’interprete cable du langage machine

Dans notre exemple, une instruction est formee du code de l’operation arealiser, plus eventuellement une valeur ou une adresse. Le code operation, lesvaleurs et les adresses sont tous codes sur 1 mot. Nous choisissons de decouperle registre RI en deux registres RI1 et RI2, le premier contenant le code operationet le second l’information additionnelle (valeur immediate ou adresse). D’oules transferts PC ; BusAd, BusDon ; RI1 (respectivement BusDon ; RI2),couples avec l’operation de lecture de la memoire. Le resume des microactionsassociees se trouve dans les lignes 1 et 2 de la table 14.5.

Pour l’instruction clr, il faut pouvoir forcer la valeur 0 dans le registreACC : cette operation peut etre realisee par une commande de remise a zerodu registre (ligne 3 de la table 14.5).

L’instruction ld #vi necessite un transfert de la valeur immediate vi dansl’accumulateur. La valeur vi est stockee dans le registre RI2 ; d’ou le transfertRI2 ; ACC (ligne 4 de la table 14.5).

L’instruction st [ad] necessite un transfert de la valeur de ACC vers lamemoire ; ce transfert a comme intermediaire le bus donnees. Le transfert alieu a l’adresse qui a ete stockee dans RI2. D’ou : RI2 ; BusAd et ACC ;

BusDon, transferts couples avec l’operation d’ecriture memoire (ligne 5 de latable 14.5).

L’instruction jmp ad necessite un transfert de la valeur ad dans le registrePC. L’information ad etant dans RI2 : RI2 ; PC (ligne 6 de la table 14.5).

L’instruction add [ad] necessite un transfert des valeurs de ACC et du motmemoire d’adresse ad (stockee dans RI2) vers les deux entrees de l’UAL, et untransfert de la sortie de l’UAL vers l’accumulateur. La valeur provenant de lamemoire passe par le bus donnees d’ou : ACC ; UAL, RI2 ; BusAd, BusDon ;

UAL, UAL ; ACC et l’operation de lecture memoire. Evidemment l’UAL doitdisposer d’une com